c - hping怎么能这么快发包呢?

标签 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 不计算重复的数据包?

最佳答案

*.pcap 文件中有每个数据包的时间戳信息。而且我认为packETHcli这个工具是在解析*.pcap文件,利用时间戳信息来模拟捕获*.pcap文件的网络环境,也就是说它要根据时间戳在数据包之间增加一些延迟。

而 hping 没有。

我认为这就是区别。

如果可以,packETHcli工具中有没有支持加速发送包的选项?

关于c - hping怎么能这么快发包呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15144066/

相关文章:

c - 包含指向其他结构的指针的堆栈

C下划线原型(prototype)语法

c - 如何给属于结构体的常量变量赋值?

linux - 检查变量值是否存在的条件

linux - 将现有的 jenkins 配置复制到新的 jenkins

linux - Bash 回显奇怪的行为

C windows 套接字在第一次执行时永远被阻塞

Java套接字服务器、PHP套接字客户端;通信正常,但是 PHP 'echoes' 数据仅在套接字连接关闭后

java - 通过套接字发送javafx矩形/ Pane

python - WinSock 错误 #10055