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