我在编写Tracert程序时,使用UDP报文进行路由检查,UDP数据报发送成功,但是不能收到ICMP差错报文。接收源代码如下:
main()
{
SendUdpData();
RecvICMPData();
}
BOOL WINAPI SendUdpData()
{
.........
//发送UDP数据报文;
}
BOOL WINAPI RecvICMPData()
{
SOCKET ICMPSocket = WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL,0,0);
if(ICMPSocket == INVALID_SOCKET)
{
WSAGetLastError();
printf("ICMPSocket Error!\n");
return FALSE;
}
char buf[1024];
memset(buf,0,1024);
if(recvfrom(ICMPSocket,buf,1024,0,NULL,0)==SOCKET_ERROR)
{
printf("%d\n",WSAGetLastError());//此处打印出错误类型位:10022
return FALSE;
}
}
调用WSAGetLastError()函数后,recvfrom函数调用失败,错误类型为10022
请高手指点,到底怎样接受ICMP端口不可达报文与ICMP超时报文。
有没有用UDP来检测路由的Tracert源代码?
main()
{
SendUdpData();
RecvICMPData();
}
BOOL WINAPI SendUdpData()
{
.........
//发送UDP数据报文;
}
BOOL WINAPI RecvICMPData()
{
SOCKET ICMPSocket = WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL,0,0);
if(ICMPSocket == INVALID_SOCKET)
{
WSAGetLastError();
printf("ICMPSocket Error!\n");
return FALSE;
}
char buf[1024];
memset(buf,0,1024);
if(recvfrom(ICMPSocket,buf,1024,0,NULL,0)==SOCKET_ERROR)
{
printf("%d\n",WSAGetLastError());//此处打印出错误类型位:10022
return FALSE;
}
}
调用WSAGetLastError()函数后,recvfrom函数调用失败,错误类型为10022
请高手指点,到底怎样接受ICMP端口不可达报文与ICMP超时报文。
有没有用UDP来检测路由的Tracert源代码?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货