比如, 我用windows的 tracert 命令测量路由的同时,我运行我自己写的traceroute程序,在我的程序中也会收到对应于windows tracert命令的ICMP响应报文。此外,我在不同的线程中调用我的traceroute程序,使之并行的运行,各个traceroute程序之间也会相互影响,收到的报文中有对应于其他的traceroute的ICMP响应报文。
我怀疑原始套接字的 recvfrom 操作可能会接收任何ICMP报文,我的问题是,是否可以设置一下,使之只接收对应于自己这个raw socket发送的ICMP响应报文呢?
8 个解决方案
#1
帮顶
这个C++版块貌似MFC和VC的高手不是很多
可以将帖子转移到那个版块
#2
没人回答啊? 自己顶一下,各位大侠帮帮忙~~
#3
首先声明我也不太懂,请参考。
1、主机遇到的第一个路由应该是相同的,这是网络环境决定的。
2、你测试的是相同的地址吗?如果相同那结果应该也差不多。
1、主机遇到的第一个路由应该是相同的,这是网络环境决定的。
2、你测试的是相同的地址吗?如果相同那结果应该也差不多。
#4
试试不设混杂模式的情况下看看
#5
原始套接字方式是在IP层对SOCKET进行编程,所以需要你在接收后对结构进行分析和过滤。
#6
#7
原始套接字的收发可能是有你这个限制,
如果用系统socket可能没有这个问题吧?
SOCKET sock = socket(AF_INET, PROTOCAL_IP, 0);
如果用系统socket可能没有这个问题吧?
SOCKET sock = socket(AF_INET, PROTOCAL_IP, 0);
#8
结贴通知:
请lz注意结贴。。。。
请lz注意结贴。。。。
#1
帮顶
这个C++版块貌似MFC和VC的高手不是很多
可以将帖子转移到那个版块
#2
没人回答啊? 自己顶一下,各位大侠帮帮忙~~
#3
首先声明我也不太懂,请参考。
1、主机遇到的第一个路由应该是相同的,这是网络环境决定的。
2、你测试的是相同的地址吗?如果相同那结果应该也差不多。
1、主机遇到的第一个路由应该是相同的,这是网络环境决定的。
2、你测试的是相同的地址吗?如果相同那结果应该也差不多。
#4
试试不设混杂模式的情况下看看
#5
原始套接字方式是在IP层对SOCKET进行编程,所以需要你在接收后对结构进行分析和过滤。
#6
#7
原始套接字的收发可能是有你这个限制,
如果用系统socket可能没有这个问题吧?
SOCKET sock = socket(AF_INET, PROTOCAL_IP, 0);
如果用系统socket可能没有这个问题吧?
SOCKET sock = socket(AF_INET, PROTOCAL_IP, 0);
#8
结贴通知:
请lz注意结贴。。。。
请lz注意结贴。。。。