我试图从我不知道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正在接收超过回复的时间,那么我怎样才能让我的程序接收它们?