Compteur des packets en double dans une capture de réseau
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:
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:
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:
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:
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