网卡设成混杂模式,有人成功了吗?

firefly3233 2013-02-19 07:00:42
网上说,把网卡设成混杂模式,就可以接收到交换机上的所有数据,即:如果A\B\C都在一个网段上,且在一个交换机上,B如果和C交换数据,A的网卡如果设成了混杂模式,A也可以收到他们之间的来往数据.不知我理解的对不?根据网上提供的代码,我反复测试没有成功,不知有人成功过吗?
...全文
880 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
firefly3233 2015-07-02
  • 打赏
  • 举报
回复
补充一点: SOCKET_RAW好象对无线网卡无效,ioctlsocket(sock, SIO_RCVALL, &dwValue)一直返回失败。
firefly3233 2015-07-02
  • 打赏
  • 举报
回复
混杂模式确实成功了,不过只能收广播和发给自己的数据,且只能抓到网络层以上的包,链路层的抓不到。pcap可以抓到链路层以上的包,不知如何实现的?微软呀,未公布的后门太多了....将使用SOCK_RAW的经验分享如下:

#include <Winsock2.h>	// support for socket
#include "Mstcpip.h"		// support for tcpip
#define WM_RECVDATA  WM_USER + 1
//如果没有Mstcpip.h
#define RCVALL_ON	1  
#define SIO_RCVALL	0x98000001  

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_MESSAGE(WM_RECVDATA, OnRecvData)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	WSADATA  stWsaData;
	if (WSAStartup(MAKEWORD(2, 2), &stWsaData) != 0)
	{
		MessageBox("加载网络服务失败!");
		return -1;
	}
	SOCKET sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
	if (sock == SOCKET_ERROR)
	{
		MessageBox("socket faild!");
		return -1;
	}

	sockaddr_in sa;  
	memset(&sa, 0, sizeof(sa));
	sa.sin_family = AF_INET;  
	sa.sin_port = htons(0);  
	sa.sin_addr.S_un.S_addr = inet_addr("30.14.184.1");//my network IP 
	if (bind(sock, (sockaddr *)&sa, sizeof(sa)) == SOCKET_ERROR)
	{
		MessageBox("bind faild!");
		return -1;      // fail to create
	}
	DWORD dwValue = RCVALL_ON;  
	if (ioctlsocket(sock, SIO_RCVALL, &dwValue) == SOCKET_ERROR)
	{
		MessageBox("I/O设置失败");
		return -1;      // fail to create
	}
	if (WSAAsyncSelect(sock, m_hWnd, WM_RECVDATA, FD_READ | FD_CLOSE) == SOCKET_ERROR)
	{
		MessageBox("异步选择失败!");
		return -1;      // fail to create
	}
	//CRect rect;
	//GetClientRect(&rect);
	//SetDlgItemPos(rect.Width(), rect.Height());
	return 0;
}

void CMainFrame::OnRecvData(SOCKET sock, long lEvent)
{
	switch (WSAGETSELECTEVENT(lEvent))
	{
	case FD_READ:
		{
			BYTE pBuf[8192];
			int nLen = recv(sock, (char*)pBuf, sizeof(pBuf), 0);
			//...
			break;
		}
	case FD_CLOSE:
		//...
		break;
	}
}
  • 打赏
  • 举报
回复
网卡设成混杂模式只能抓到经过A电脑的数据包,并不能抓到所有经过交换机的包的
firefly3233 2013-03-02
  • 打赏
  • 举报
回复
引用 11 楼 wangmu7206 的回复:
29XX,35XX系列: 在配置模式下,首先选择接口Fa0/1: Switch(config)#int fa0/1 输入被侦听端口: Switch(config-if)#port monitor fastEthernet 0/2 Switch(config-if)#port monitor fastEthernet 0/5 指定管理端口: Switch(c……
你的设置方法(针对29XX系列),电脑连到哪个端口上,电脑网卡的IP如何设?用什么方法登录上交换机进行设置的? 再则,设好侦听口后,电脑插到这个端口上,网卡IP怎么设?用抓包工具可以抓到包吗? 设好的侦听口,是不是就不能做为正常传输口用了?
zhangyihu321 2013-02-27
  • 打赏
  • 举报
回复
原始套接字好像与系统版本和权限有关吧
jimette 2013-02-21
  • 打赏
  • 举报
回复
http://www.2cto.com/net/201212/177509.html???
捧剑者 2013-02-21
  • 打赏
  • 举报
回复
29XX,35XX系列: 在配置模式下,首先选择接口Fa0/1:   Switch(config)#int fa0/1   输入被侦听端口:   Switch(config-if)#port monitor fastEthernet 0/2   Switch(config-if)#port monitor fastEthernet 0/5   指定管理端口:   Switch(config-if)#port monitor VLAN 1   这条命令并不意味着接口Fa0/1 将侦听vlan 1 的所有端口,它只是用来指定管理接口。   退出保存后,接口Fa0/1 设置为侦听口,接口Fa0/2,Fa0/5 设置为被侦听口。连接在接口Fa0/1 上的机器将能接收到通过接口Fa0/2,Fa0/5 的流量。   可以用命令Switch# show port monitor 来查看设置的结果:   Switch#show port monitor   Monitor Port Port Being Monitored   FastEthernet0/1 VLAN1   FastEthernet0/1 FastEthernet0/2   FastEthernet0/1 FastEthernet0/5   注:侦听口与被侦听口必须属于同一个vlan 4000,5000,6000: set span Source Destination 例:set span 2/3 3/30 (将2/3镜像到3/30) ================== 其它交换机查附带的手册。。。
firefly3233 2013-02-20
  • 打赏
  • 举报
回复
我们的交换机专门设置了调试通道,估计就是你说得旁路通道吧? 你有成功利用过混杂模式接收到此数据的吗?因为人家是TCP数据,我不可能利用握手做好连接才去访问它.
oyljerry 2013-02-20
  • 打赏
  • 举报
回复
引用 7 楼 firefly3233 的回复:
引用 5 楼 lostying 的回复:引用 4 楼 wangmu7206 的回复:交换机中的数据不是共享的。早期的HUB可以。 顶! 设置成混杂模式后,也得数据到你的网卡才行,交换机内部是有表来记录各IP地址对应的口,比如1,2,3口分别对应IP A,B,C,由A发到B的数据,就直接由B口出去了,不会到C口,你的网卡自然不会收到.早期的HUB是一个口收到消息,无责任……
交换机有专门的旁路通道,需要在上面设置,才会把中转的数据复制一份到专门的端口
firefly3233 2013-02-20
  • 打赏
  • 举报
回复
引用 5 楼 lostying 的回复:
引用 4 楼 wangmu7206 的回复:交换机中的数据不是共享的。早期的HUB可以。 顶! 设置成混杂模式后,也得数据到你的网卡才行,交换机内部是有表来记录各IP地址对应的口,比如1,2,3口分别对应IP A,B,C,由A发到B的数据,就直接由B口出去了,不会到C口,你的网卡自然不会收到.早期的HUB是一个口收到消息,无责任的全部发送到别的口,这样才能收到. ……
你说得很有道理,我设成混杂模式的代码,一点数据都收不到,是什么原因? 网上有利用wpcap.dll来捕获网卡的程序,我运行后发现,也只是能收到发往自己的数据,和一些广播.看来交换机确实处理掉了不是发往自己网卡数据. 但我们单位有一个交换机,有4个口为一个WLAN,正常只插两个网线,也就是说有两个电脑在此通讯,为了排查故障,其余两个口为调试口.是不是说,这4个口相当于一个早期的HUB了? 再则:利用wpcap.dll的程序,我跟踪后发现没有利用socket之类来设置混合模式的API,他是怎么做到可以收到所有在HUB间流动的数据的. 如果不利用wpcap.dll,自己如何做能收到所有在HUB间流动的数据?设置混合模式我试了,老不成功呀
无言猪 2013-02-20
  • 打赏
  • 举报
回复
引用 4 楼 wangmu7206 的回复:
交换机中的数据不是共享的。早期的HUB可以。
顶! 设置成混杂模式后,也得数据到你的网卡才行,交换机内部是有表来记录各IP地址对应的口,比如1,2,3口分别对应IP A,B,C,由A发到B的数据,就直接由B口出去了,不会到C口,你的网卡自然不会收到.早期的HUB是一个口收到消息,无责任的全部发送到别的口,这样才能收到.
捧剑者 2013-02-20
  • 打赏
  • 举报
回复
交换机中的数据不是共享的。早期的HUB可以。
  • 打赏
  • 举报
回复
暂时还没有接处过。学习。
翅膀又硬了 2013-02-20
  • 打赏
  • 举报
回复
对,得用HUB
win0813 2013-02-19
  • 打赏
  • 举报
回复
自己尝试下就知道
ShengFei01 2013-02-19
  • 打赏
  • 举报
回复
网卡设成混杂模式可以收到同一网段上的数据,需要用wincap,用 raw socket不知行不行,这有些socket例子,有个 RawEcho 你可以修改一下试试: http://download.csdn.net/detail/geoff08zhang/4571358

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧