如何快速发送数据包?

时间:2013-02-28 19:31:49

标签: c linux sockets raw-sockets packet-injection

我比较了两个用于发送数据包速度的工具,hpingpackETHcli。 packETHcli的命令行选项是

./packETHcli -i eth0 -m 2 -n 0 -d -1 -f icmpSample.pcap

和hping是

hping --flood 192.168.0.1

但是在iptraf中,它表明发送hping速度的数据包比packETHcli快10倍。

这两个工具都使用原始套接字,但为什么会有这么大的差异?

以下是获取源代码的链接。

hping:http://wiki.hping.org/

packETHcli:http://sourceforge.net/projects/packeth/

修改  我注意到hping使用AF_INET原始套接字,有效负载是TCP。 packETHcli使用PF_PACKET原始套接字,在我的示例中,有效负载是带有ICMP有效负载的IP数据包。 它是否会影响数据包发送速度?

EDIT2

这一次,我使用ifconfig查找运行hping3packETHcli之前和之后的TX数据包计数差异。并发现两个工具的数据包生成速率接近。 hping3每秒约为100000个数据包,packETHcli每秒约为80000个数据包。

我还使用vnstat来衡量生成速率的数据包。结果与我从ifconfig得到的数字一致。

所以,似乎iptraf谎言。我使用iptraf监视TCP数据包的重复重发,而不更新IP ID号和TCP序列号。 iptraf认为我的数据包发送速率是每秒0个数据包。可能iptraf不计算重复的数据包吗?

1 个答案:

答案 0 :(得分:0)

* .pcap文件中的每个数据包都有时间戳信息。我认为工具包ETHcli正在解析* .pcap文件,使用时间戳信息来模拟捕获* .pcap文件的网络环境,这意味着它必须根据时间戳在数据包之间添加一些延迟。

虽然hping没有。

我认为这就是区别。

如果是这样,packETHcli工具中是否有支持加速数据包发送的选项?