Je veux compter les paquets dupliqués à partir d'un fichier pcap. Les paquets dupliqués sont les paquets dont le numéro de séquence a déjà été vu précédemment. Pour cela j’extraie tout d'abord la liste des numéros de séquences avec cette fonction:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
  def seq_list(s):
      v = []
      a = [p['TCP'].seq if p.haslayer(TCP) else None
            for p in s]
      return a
Ensuite, je vérifie si le numéro de séquence actuel a déjà été vu précédemment: (je ne suis pas sûr de cette fonction)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
 
 
def is_dupl(s):
    v = seq_list(s)    
    a = []
    for p in s: 
        if p.haslayer(TCP):
            for i in range(0, len(v)):
                a += v[0:i+1:1]
            if p[TCP].seq in a:
                return True
        return False
Après cela, j'ai créé une fonction pour obtenir la liste du paquet dupliqué: (je ne suis pas sûr de cette fonction)


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
def find_dupl(s):
    tcpSeq = [p[TCP].seq if p.haslayer(TCP) and is_dupl(p) else None
          for p in s]
    counter = Counter(tcpSeq)
    #del counter[None]
    print("---------------------length of counter dictionary : --", counter.items())
    return [[s[index] for index, seq in enumerate(tcpSeq)
             if seq == key]
            for (key, value) in counter.items()
            if value > 1]
et enfin mon compteur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
 
def duplication_pkt_count(s, s_ip, c_ip):
    sCount = 0
    cCount = 0
    duplication = find_dupl(s)
 
    for dup in duplication:
        for p in dup[1:]:
            if p.haslayer(IP):
                if (p[IP].src == s_ip):
                    sCount += 1
                if (p[IP].src == c_ip):
                    cCount += 1
    return (sCount, cCount)
Puis j'ai appelé la fonction duplication_pkt_count dans mon main

Mais le compteur ne fonctionne pas. Et j'ignore la raison