er_2009_2009 2019-01-23 16:03 采纳率: 0%
浏览 460

android上用c进行traceroute命令开发时候,为何收不到超时报文??

android上用c进行traceroute命令开发时候,为何收不到超时报文??
1前提:创建socket:socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP)
2.现象:按照默认在该socket上可以正常发送请求报文并收到回应报文。

         但为了实现了traceroute所以设置ttl为1、2、3、4....时候发送请求报文,这个时候应该会收到超时报文,来获取经过路由的地址。但我程序recvfrom收不到这个超时报文一直阻塞,但用wireshark可以抓到这个超时报文,为何我程序就不能收到???是谁给我把这个超时报文过滤掉了????
                    麻烦哪位大神给与答复????在线等
  • 写回答

1条回答 默认 最新

  • tww_1993 2020-03-10 17:31
    关注

    因为 sock_dgram 不能像sock_raw一样接收所有数据包。
    举个例子,当TTL = 1的时候,收到了中途的addr 发送的超时报文,recvfrom( ) 只接收目的地址的addr的数据报文,
    当接收到超时报文后,就把这个报文丢弃了,所以你会一直阻塞,可以使用SOCKET_RAW解决这个问题

    评论

报告相同问题?

悬赏问题

  • ¥15 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!