向各位高手请教一个问题!! 本人在windows下用raw socket来捕获包,结果发现整个局域网的包都能获得。这个结果想不通,socket不是工作在网络层得吗,按理不是应该只收到源地址或目标地址是本机的IP包吗?请教各位了:) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 原始套接口本来就没有什么标准规范,各操作系统想怎么做就怎么做,能捕获所有IP报文也不足为奇,我想windows也是把网卡设为混杂模式实现的吧。windows的raw socket做的怪怪的,SOCK_RAW 要想接收数据包,只能配IPPROTO_ICMP和IPPROTO_IP( 好像还有IPPROTO_RAW? ),用IPPROTO_TCP和IPPROTO_UDP根本收不到任何包,而 linux 我记得就可以使用 IPPROTO_UDP 收原始的UDP包。所以,还是操作系统实现的不同吧。 协议栈的实现,并不一定非要一条线向上解包传递数据,也可以有分支呀。比如windows把网卡设成混杂模式,收到以太包后,如果存在有原始套接口监听,则分成两个拷贝去处理,一份拷贝 过滤目的MAC->链路层->网络层->传输层,另一份拷贝直接拆分链路层,滤出IP包,再传递给原始套接口。当然windows实际可能不是这样实现的。我的理解就这么多了,如果有高手知道详情,还请补充。 CWebBrowser2 获取网页HTML 不显示删除回复显示所有回复显示星级回复显示得分回复 #define IDD_DIALOG1 102 VC++ 持久层的框架 写入串口失败 如何将一个24位的bmp图片转换成为8位灰度图 STL链表结构体指针怎么做参数? 双网卡的bind问题 像我这样搞底层研究的还有饭吃吗? 怎么进行设置VC6.0 才能调试呀~! 用ado读sql2000 sever中数据时float全读为0,但bstr正确,为什么?请帮助! 开发一个游戏是用mfc还是sdk比较好? 一个关于edit控件操作的问题
能捕获所有IP报文也不足为奇,我想windows也是把网卡设为混杂模式实现的吧。
windows的raw socket做的怪怪的,SOCK_RAW 要想接收数据包,
只能配IPPROTO_ICMP和IPPROTO_IP( 好像还有IPPROTO_RAW? ),
用IPPROTO_TCP和IPPROTO_UDP根本收不到任何包,
而 linux 我记得就可以使用 IPPROTO_UDP 收原始的UDP包。
所以,还是操作系统实现的不同吧。
比如windows把网卡设成混杂模式,收到以太包后,如果存在有原始套接口监听,
则分成两个拷贝去处理,一份拷贝 过滤目的MAC->链路层->网络层->传输层,
另一份拷贝直接拆分链路层,滤出IP包,再传递给原始套接口。
当然windows实际可能不是这样实现的。我的理解就这么多了,如果有高手知道详情,还请补充。