0
回答
traceroute 怎么自己发送icmp回包呢
华为云实践训练营,热门技术免费实践!>>>   

大牛们好,我现在有这样一个要求,当在A设备上  (直连)  traceroute B  ,正常的情况是,A发送UDP包,B发送icmp回包。

我打算将到达B的报文入队,判断出是来自A的UDP包之后,丢弃,然后自己构造一个icmp包发回A,

但是这样做了之后,A并没有认为traceroute成功,这是为啥呢,是不是对于回的ICMP有特殊要求?

以下是我构造的ICMP包:

    /* ICMP类型为回显请求 */
    icmph->icmp_type = ICMP_DEST_UNREACH;  
    /* 代码为0 */
    icmph->icmp_code = ICMP_PORT_UNREACH; 
    icmph->icmp_seq = 1;
  
    //icmph->icmp_cksum =   cal_chksum((unsigned short *)icmph,64);
     icmph->icmp_cksum = 0 ;//会自动填充么?
    

    //以下都没问题

    /* 填写发送目的地址部分 */
    to.sin_family =  AF_INET; 
    to.sin_addr.s_addr = dest;
    to.sin_port = htons(0);

<无标签>
举报
顶部