2014-10-31 316 views
0

我有python,scapy和平代码存储我的数据到数据库(IP src和dst,端口,..) 我用于一些统计数据。 在某些数据包上,我正在做一些操作(更改dst端口),然后将它们发回界面。scapy数据包操作和原始pkt.time

问题是,我操纵的这个数据包与原始的数据包有不同的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) 

回答

1

创建changed_pkt后,你可以简单地设置其time属性如下:

changed_pkt.time = ts 

请注意,更改即使数据包的时间戳并发送它,更新的时间戳将不会反映在自t以来的另一端的接收数据包中在接收数据包时,时间戳被设置在接收机中,如here所述。

如果您有兴趣将数据包传输到远程计算机,同时保留它们的时间戳,请考虑将操纵的数据包存储在pcap文件中,并将该文件发送到另一台计算机。

+0

thx。好点,但即使我设置changed_pkt.time包时间没有改变。对我来说这不能改变 – user1627588 2014-11-03 16:40:25

+0

你是什么意思?你如何检查它是否已经改变? – Yoel 2014-11-03 18:21:13

+0

我正在检查与wireshark嗅探接口和框架树下有时代和到达时间 – user1627588 2014-11-03 19:48:14