[英]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.