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

被折叠的 条评论
为什么被折叠?



