簡體   English   中英

Scapy 提取 IP 地址,不重復

[英]Scapy extract IP address with no repetitions

我正在嘗試提取目標 IP 地址,然后將其保存在字典中,但我只想要一次

輸入

from scapy.all import *

pkts = rdpcap('example.pcap')

test = ""
for pkt in pkts:
    temp = pkt.sprintf("%IP.dst%",)
    test = test + temp

print(test)


目前我的輸出是這樣的

??,????,????,????,??0.0.0.0,255.255.255.255192.168.1.1,192.168.1.2380.0.0.0,255.255.255.255192.168.1.1,192.168.1.238192.168.1.1,192.168.1.2380.0.0.0,255.255.255.255192.168.1.1,192.168.1.238??,????,????,????,????,??192.168.1.238,192.168.1.1192.168.1.1,192.168.1.238192.168.1.238,89.30.121.15089.30.121.150,192.168.1.238192.168.1.238,89.30.121.150192.168.1.238,89.30.121.15089.30.121.150,192.168.1.238192.168.1.238,89.30.121.150192.16

我想要的是輸出看起來像這樣,我只想要目標 IP 地址沒有重復

89.30.121.150
198.50.110.244
89.30.121.14
89.30.121.23

我在輸出中得到的是大量 IP 地址列表,而不是我只想要目標 IP 地址,但只需要一次(無重復)而不是每個數據包

我也試過這個,但是這凍結了?

def print_summary(pkt):
    if IP in pkt:
        ip_dst=pkt[IP].dst
    print(ip_dst)

sniff(offline=pkts, filter="ip",prn=print_summary)

誰能想到使用 Scapy 從較大的 PCAP 文件中提取 IP 地址的更快解決方案

如果你想放入字典,你應該使用字典。

你得到重復的值,因為你沒有將它保存到 python dict 中。

這是一種通過修改代碼來保持src-->dest ip 而不重復的方法:

from scapy.all import *

pkts = rdpcap('example.pcap')

dic = {}
for pkt in pkts:
    temp = pkt.sprintf("%IP.dst%")
    dic[temp] = 1

for ip in dic.keys():
    print(ip)

輸出:

192.168.1.1
192.37.115.0
192.168.1.2
212.242.33.35
192.168.1.251
147.137.21.94
147.137.21.122
147.234.1.253

最快的方法之一是:

from scapy.all import *

IP.payload_guess = []

ips = set(p[IP].dst for p in PcapReader('example.pcap') if IP in p)

for ip in ips:
    print(ip)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM