gpt4 book ai didi

python - scapy:UDP碎片整理时间戳问题

转载 作者:行者123 更新时间:2023-11-28 17:53:27 31 4
gpt4 key购买 nike

我使用以下脚本 (python + scapy) 创建一个包含碎片 UDP 数据包的 pcap 文件的碎片整理版本。

# Read pcap file
in=rdpcap("in.pcap")
# Defragment ...
out = defragment(in)
# Write defragmented pcap file
wrpcap ("out.pcap", out)

我的问题是碎片整理数据包的 pcap 时间戳设置为碎片整理日期,而不是捕获日期。未分片的数据包仍具有其原始捕获时间戳。

我查看了 inet.py、defragment() 和 defrag(),但我对 scapy 不是很流利,我想帮助理解它并破解它以保持日期,比如说,最后一个分片,放入碎片整理后的数据包中...

任何人都可以帮我解决这个问题吗?
比如,我在哪里可以找到输入数据包中的捕获日期,我应该把它放在碎片整理数据包的什么地方......

当然,欢迎任何其他达到相同目标的解决方案(我承认......我很着急:(......)

最佳答案

这是 inet.py 的补丁,它将第一个片段的捕获日期添加到经过碎片整理的数据包中。

可能有更简洁的解决方案,例如修改 Packet.copy() 方法和其他一些方法,但是,嘿,它符合要求......

*** inet.py     2011-03-29 14:01:19.000000000 +0000
--- inet.py.orig 2011-03-29 07:59:02.000000000 +0000
***************
*** 846,856 ****
lastp = lst[-1]
if p.frag > 0 or lastp.flags & 1 != 0: # first or last fragment missing
missfrag += lst
- print "missing framgent!"
continue
! # Keep 1st fragment capture time (as it is lost in subsequent copies during defragmentation)
! ptime = p.time
! p = p.copy() # copy() method do not copy time member (?)
if Padding in p:
del(p[Padding].underlayer.payload)
ip = p[IP]
--- 846,853 ----
lastp = lst[-1]
if p.frag > 0 or lastp.flags & 1 != 0: # first or last fragment missing
missfrag += lst
continue
! p = p.copy()
if Padding in p:
del(p[Padding].underlayer.payload)
ip = p[IP]
***************
*** 878,892 ****
del(ip.len)
p = p/txt
p._defrag_pos = max(x._defrag_pos for x in lst)
- # Put back time in packet
- p.time= ptime
defrag.append(p)
defrag2=[]
for p in defrag:
q = p.__class__(str(p))
q._defrag_pos = p._defrag_pos
- # Put back time in packet
- q.time = p.time
defrag2.append(q)
final += defrag2
final += missfrag
--- 875,885 ----

关于python - scapy:UDP碎片整理时间戳问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5422432/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com