如何捕获网卡发送的所有数据(包括网卡过滤掉,如:包括发往本机的) 主机发送数据到网络,是不是要再经过交换机转发的?我原本打算使用SOCKET RAW捕获本机所有发送数据,后来我发现无法捕获发往未上线IP主机或发往本机的数据,1.我估计应该是网卡过滤掉,但我不确认,谁有讲网卡通信原理规则的资料?2.如果我想实现捕获所以放送的数据(不用对方应答),是不是使用SOCKET RAW不能实现?又该如何实现呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.对于交换机网络,Raw socket不能捕获数据包..2.需要把抓包程序做到交换机上 把网卡置于混杂模式,用raw socket捕获数据包 我现在的做法就是就是:网卡设置为混杂模式 用原始套接字 socket(AF_INET, SOCK_RAW, IPPROTO_RAW) dwValue = 0x0001; //设置 SOCK_RAW 为SIO_RCVALL,以便接收所有的IP包 if (ioctlsocket(sock, SIO_RCVALL, &dwValue) != 0)现在存在的问题就是当我使用IPPROTO_RAW时,就没受到任何数据;使用IPPROTO_IP时,则无法收到源IP和目的IP均为本机的数据包。另外有个奇怪的问题:我做2个程序:(使用BCB6.0,控件:TNMUDP)A:用来往本机发送UDP数据;B:用来接收UDP数据,且A的目的端口和B的接受端口相同。当我先启动B,再启动A发送数据时,B能收到数据;但是反之则不行,这又是怎么回事呢? B是服务端,当然要先启动,不然A启动的时候,连接B,而这时候B没有启动,A不能连接成功,发送数据失败 raw socket只能捕获IP协议的数据包,比如TCP、UDP、ICMP等。显然不能满足LZ的“所有数据”的要求。要捕获所有数据,需要从驱动里获得,比较好的开发库是winpcap 用winpcap库吧,不但一开源,而且能捕捉到数据链路层的帧。 ndis中间层驱动 ndis协议驱动 winpcap 解决了,不用使用SOCKET RAW的。使用SOCKET就可以获取本地发送的UDP数据了。 UDP发送是不用BIND()的,只有接受端要BIND(),所以无所谓先后。我找到的原因是:我使用了3个TNMUDP控件,发送端和接受端都有发送的控件,导致了发送失败,而控件屏蔽了这个消息,所以收不到消息。 MFC中如何实现二叉树的部分旋转 OCCI getString()返回中文乱码。坐等结贴 哀悼玉树地震的死难同胞 怎么才能恢复我的vc界面的原来面目 如何获得屏幕的大小? 谁能提供下windows下的nc源代码?谢谢! 如何和IE通信 关于文件操作的一个简单问题? alpha 图像合成 请问Visual C++ 6 宝典,这本书怎么样? 从代理存根那章开始迷糊了... 如何判断点在旋转椭圆内,边界以及包围矩形中
2.需要把抓包程序做到交换机上
就是:网卡设置为混杂模式 用原始套接字 socket(AF_INET, SOCK_RAW, IPPROTO_RAW)
dwValue = 0x0001;
//设置 SOCK_RAW 为SIO_RCVALL,以便接收所有的IP包
if (ioctlsocket(sock, SIO_RCVALL, &dwValue) != 0)现在存在的问题就是
当我使用IPPROTO_RAW时,就没受到任何数据;
使用IPPROTO_IP时,则无法收到源IP和目的IP均为本机的数据包。
另外有个奇怪的问题:
我做2个程序:(使用BCB6.0,控件:TNMUDP)
A:用来往本机发送UDP数据;
B:用来接收UDP数据,
且A的目的端口和B的接受端口相同。当我先启动B,再启动A发送数据时,B能收到数据;
但是反之则不行,这又是怎么回事呢?
用winpcap库吧,不但一开源,而且能捕捉到数据链路层的帧。
UDP发送是不用BIND()的,只有接受端要BIND(),所以无所谓先后。我找到的原因是:我使用了3个TNMUDP控件,发送端和接受端都有发送的控件,导致了发送失败,而控件屏蔽了这个消息,所以收不到消息。