我有python,scapy和平的代码,将我的数据存储到数据库(IP src和dst,ports,..) 我用它来进行一些统计。 在一些数据包上,我正在进行一些操作(更改dst端口),然后将它们发送回接口。
问题是我操作的这个数据包与原始数据包有不同的pkt.time值 如果我将这些数据包存储到数据库中,则它们具有与原始数据包不同的数据包时间。
在创建UDP数据包时是否存在选项以放置原始pkt.time值? 使用此选项,数据包操作延迟不会导致我的数据包无序。
欢迎任何帮助
以下是我的操作脚本
#!/usr/bin/env python
from scapy.all import *
# VARIABLES
interface = 'eth1'
filter_bpf = "port 8000"
def pkt_change(pkt):
if pkt.haslayer(UDP):
# --> pkt.time is packet time
ts = pkt.time
src = pkt[IP].src
dst = pkt[IP].dst
sport = pkt[IP].sport
dport = pkt[IP].dport
msg = pkt[IP].load
#### Spoof Response
changed_pkt = Ether()/IP(dst=dst, src=src)/UDP(dport=8000, sport=sport)/msg
sendp(changed_pkt, iface="eth1")
print 'Sent:', changed_pkt.summary()
# ------------------------------------------------
# start sniffing
print "Start Sniffing"
sniff(iface=interface, filter=filter_bpf, store=0, prn=pkt_change)
答案 0 :(得分:1)
创建changed_pkt
后,您只需按如下方式设置其time
属性:
changed_pkt.time = ts
请注意,即使在更改数据包的时间戳并发送它之后,更新的时间戳也不会反映在另一端的接收数据包中,因为时间戳是在接收机中设置的,因为数据包是收到了,如here所述。
如果您对将数据包传输到远程计算机感兴趣,同时保留其时间戳,请考虑将处理后的数据包存储在pcap
文件中,然后将该文件发送到另一台计算机。