Python scapy-嗅探到的TCP数据包中缺少数据

Python scapy-嗅探到的TCP数据包中缺少数据,python,sockets,networking,scapy,sniffing,Python,Sockets,Networking,Scapy,Sniffing,我有一个通过TCP连接将数据发送到生产服务器的应用程序。我需要嗅探TCP连接的内容并将其重新发送到调试服务器 我已经非常接近这一点: from scapy.all import * packets = 0 def dup_pkt(pkt): global packets read = raw(pkt[TCP].payload) print(str(packets)) s.sendall(read) print("connecting") s = socket

我有一个通过TCP连接将数据发送到生产服务器的应用程序。我需要嗅探TCP连接的内容并将其重新发送到调试服务器

我已经非常接近这一点:

from scapy.all import *
packets = 0

def dup_pkt(pkt):
    global packets

    read = raw(pkt[TCP].payload)
    print(str(packets))
    s.sendall(read)

print("connecting")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("x.x.x.x", 12345))
print("connected")

print("sniffing")
pkts = sniff(prn=dup_pkt, filter="tcp dst port 12345 and not host x.x.x.x") # don't sniff the packets we're resending
问题是数据包在前两个报头中似乎缺少数据。我已将调试服务器设置为将每个接收到的数据包保存到一个文件中,并将应用程序设置为直接连接到调试服务器,以将已知的良好数据包数据与嗅探器正在发送的数据包数据进行比较。在第一个数据包中,前1546/2079字节是好的,但在这之后,每个字节都是零,而不是充满正确的数据。在第二个数据包中,前11个字节丢失,但其余的字节正常

有趣的是,在最初的两个大设置数据包之后,其余的TCP数据包似乎被正确地嗅探到了——可能是因为它们通常要简单得多,每个数据包少于40字节


有没有更好的方法读取数据包?我错过什么了吗?不幸的是,我无法访问应用程序的源代码,因此我无法判断它是否对我遇到问题的两个大数据包做了特殊处理。

第一个数据包的问题可能表明您的操作系统的TCP堆栈w.r.t.片段重组有问题


在任何情况下,请尝试使用另一种工具,如
tcpdump
wireshark
捕获数据包。如果他们有相同的问题,问题在于你的操作系统。如果不是,则可能是
scapy

的错误或配置问题,也可能意味着您的IP数据包被分割。Scapy不会自动对数据包进行碎片整理,而是将其分割

您需要在收到的数据包列表上使用
碎片整理
功能或
碎片整理
(查看帮助(碎片整理))

也许你正在检查的数据包是一个片段