go tcp assembly丢失大数据集的数据包?

时间:2016-09-28 09:16:49

标签: go tcp packet-capture

我正在尝试使用tcp程序包开始重新组装TCP流。我看了两个例子

https://github.com/google/gopacket/tree/master/examples/httpassemblyhttps://github.com/google/gopacket/tree/master/examples/statsassembly

如果我发送小数据块,这些示例工作正常。如果我发送更大的数据,例如从源到目的地的5MB文件,那么golang TCP程序集似乎会丢失数据。

当我使用tcpflow使用tcpdump时,我可以重建我发送的数据,但golang示例在重组期间错过了大块数据,我无法重现我发送的数据。

例如,当我使用netcat从源传输文件到目的地时,我无法在使用golang TCP程序集汇编数据时重现该文件。

我对https://github.com/google/gopacket/tree/master/examples/statsassembly中的代码做了很小的修改。

加入 payload []byte到statsStream结构。

然后 s.payload = append(s.payload, reassembly.Bytes...) 就在

之前

s.bytes += int64(len(reassembly.Bytes))

当我在 ReassemblyComplete 中打印数据时,它只有一部分数据而且不包含其余数据。

我也改变了snaplength

var snaplen = flag.Int("s", 65536, "SnapLen for pcap packet capture")

当我使用tc命令减慢流量时,应用程序工作正常。真奇怪。 go库可以捕获数据包的速度是否有限制? Tcpdump似乎可以很好地捕获所有流量。

0 个答案:

没有答案