hping3发送MTU大包无法正确设置DF标志patch

博客围绕hping3展开,在运行hping3命令测试时,设置TCP数据长度等于当前MTU(1500)长度报文选项失效,小于1460则正常。经分析是hping3一处BUG,默认对大于等于接口MTU报文自动忽略选项,修改为只检查大于接口MTU状态修正了问题。

hping3

hping3主页
Kali hping3仓库

问题

在运行以下hping3命令测试时, 设置-d 1406 TCP数据长度为等于当前MTU(1500)长度报文 -y 选项失效。TCP数据长度小于1460则无此类问题。
经过分析发现为hping3 send_ip_handler 一处BUG,默认对大于等于接口MTU报文自动忽略-y选项。修改为只检查大于接口MTU状态修正此问题。

hping3 -i eth1 -A -P  -p 123 -a 172.16.227.119 172.16.227.94  -d 512 -c  1 -y
hping3 -i eth1 -A -P  -p 123 -a 172.16.227.119 172.16.227.94  -d 1460 -c  1 -y

Patch

diff --git a/sendip_handler.c b/sendip_handler.c
index 545beb9..bc3f02d 100644
--- a/sendip_handler.c
+++ b/sendip_handler.c
@@ -19,7 +19,7 @@ void send_ip_handler(char *packet, unsigned int size)
 {
        ip_optlen = ip_opt_build(ip_opt);

-       if (!opt_fragment && (size+ip_optlen+20 >= h_if_mtu))
+       if (!opt_fragment && (size+ip_optlen+20 > h_if_mtu))
        {
                /* auto-activate fragmentation */
                virtual_mtu = h_if_mtu-20;
@@ -36,6 +36,8 @@ void send_ip_handler(char *packet, unsigned int size)

                if (opt_mf) fragment_flag |= MF; /* more fragments */
                if (opt_df) fragment_flag |= DF; /* dont fragment */
+               if (opt_verbose || opt_debug)
+                       printf("opt_df=%d opt_mf=%d fragment_flag=0x%x\n", opt_df, opt_mf, fragment_flag);
                send_ip((char*)&local.sin_addr,
                        (char*)&remote.sin_addr,
                        packet, size, fragment_flag, ip_frag_offset,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值