You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用IP_HDRINCL选项构造IP头发送ICMP包无报错但未实际发包问题

问题原因及修复方案

  • 1 运行权限不足
    原始套接字SOCK_RAW需要root权限才能创建和使用,运行程序时必须加sudo前缀,否则即使看起来没有报错,实际套接字创建失败也可能因为异常处理逻辑漏洞导致后续空执行。
  • 2 网络字节序转换缺失(最核心丢包原因)
    IP头的所有多字节字段(ip_len、ip_id、ip_off)都要求使用大端字节序(网络字节序),你代码中直接赋值主机字节序的数值,内核校验不通过会直接丢弃报文不会返回错误:
    错误写法:
    ip->ip_len=20+8;
    ip->ip_id=8848;
    ip->ip_off=IP_DF;
    
    修正为:
    ip->ip_len=htons(20+8);
    ip->ip_id=htons(8848);
    ip->ip_off=htons(IP_DF);
    
  • 3 源IP地址有效性问题
    你硬编码的源IP192.168.1.69需要和你发送报文的网卡实际IP一致,否则内核会直接丢弃非法源IP的报文,或者将报文从其他匹配路由的接口发出,导致你在当前网卡抓不到包。
  • 4 抓包配置问题
    Wireshark抓包时要选择正确的出口网卡,同时设置过滤规则icmp避免其他报文干扰,还要确认本地防火墙没有拦截出口ICMP报文。
  • 5 其他代码规范问题
    • main函数标准返回值为int,不是void
    • getaddrinfo申请的内存需要用freeaddrinfo释放,避免内存泄漏

内容的提问来源于stack exchange,提问作者mojo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:06:01