2014-10-31 52 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