如何在Windows的UDP套接字上获取ICMP端口无法到达的数据包
||
我有一个使用sendto()和UDP来检查不同端口上的资源的应用程序。如何使用recvfrom()获取ICMP端口不可达数据包?
我的recvfrom()是这样的:
SOCKADDR_STORAGE saFrom;
int nFromLen = sizeof( SOCKADDR_STORAGE );
nReceived = recvfrom ( Socket, Buffer, BufferSize, 0, ( struct sockaddr * ) &saFrom, (socklen_t *)&nFromLen );
当发生ICMP端口不可达时,nReceived = -1,并且WSAGetLastError()返回WSAECONNRESET(10054)。
但是,由于我要检查不同的端口,因此我想一种确定哪个端口触发了ICMP端口不可达消息的方法。我如何确定呢? (也许我可以设置一些套接字选项?)
编辑:
根据Len的建议(仅使用ICMP),我尝试通过套接字(AF_INET,SOCK_RAW,IPPROTO_ICMP)创建一个套接字,然后在其上调用recvfrom()。 recvfrom()返回10022(WSAEINVAL)错误,因为未绑定套接字。我该如何解决?
没有找到相关结果
已邀请:
1 个回复
骂陋冠
和
来控制是否得到get3ѭ而不是
,但是即使设置了该值(或在默认设置的OS上),您仍然不会得到ICMP端口不可达的远端端口。 我建议您在检查的每个端口上使用一个套接字,这样就可以确定错误的来源。或直接使用ICMP。