C套接字侦听ICMP Time Exceeded数据包

时间:2014-04-15 22:09:00

标签: c sockets udp icmp

我试图从我不知道IP地址的节点收听ICMP Time Exceeded数据包。在线查看了一些代码后,我发现人们为NULL的最后两个参数提供了recvfrom(),所以我尝试了一下:

if ((recvfrom(recv_sock, icmp_msg, icmp_msg_len, 0, NULL, NULL)) != -1) {
            /* PROCESS THE INFORMATION */
            printf("Packet received\n");
} else {
            fprintf(stderr, "Error receiving packet: %s\n", strerror(errno));
}

然而,当我运行它时,程序就会挂起。

这并不让我感到惊讶,因为该手册页说明了以下内容:

  

如果address不是空指针且套接字不是面向连接的,则填写消息的源地址。

我使用UDP发送数据包,这意味着我没有连接。当我发送一个生存时间为1的数据包时,Wireshark正在接收超过回复的时间,那么我怎样才能让我的程序接收它们?

0 个答案:

没有答案