win10设置网卡监听模式
1.网络监听技术是怎样的?
网络监听,在网络安全上一直是一个比较敏感的话题,作为一种发展比较成熟的技术,监听在协助网络管理员监测网络传输数据,排除网络故障等方面具有不可替代的作用,因而一直倍受网络管理员的青睐。
然而,在另一方面网络监听也给以太网安全带来了极大的隐患,许多的网络入侵往往都伴随着以太网内网络监听行为,从而造成口令失窃,敏感数据被截获等等连锁性安全事件。 网络监听在安全领域引起人们普遍注意是在94年开始的,在那一年2月间,相继发生了几次大的安全事件,一个不知名的人在众多的主机和骨干网络设备上安装了网络监听软件,利用它对美国骨干互联网和军方网窃取了超过100000个有效的用户名和口令。
上述事件可能是互联网上最早期的大规模的网络监听事件了,它使早期网络监听从"地下"走向了公开,并迅速的在大众中普及开来。 关于网络监听常常会有一些有意思的问题,如:"我现在有连在网上的计算机了,我也有了窃听的软件了,那么我能不能窃听到微软(或者美国国防部,新浪网等等)的密码? 又如:我是公司的局域网管理员,我知道hub很不安全,使用hub这种网络结构将公司的计算计互连起来,会使网络监听变得非常容易,那么我们就换掉hub,使用交换机,不就能解决口令失窃这种安全问题了么? 这是两个很有意思的问题,我们在这里先不做回答,相信读者看完全文后会有自己正确的答案。
基本概念:认清mac地址和ip地址 首先,我们知道,一台接在以太网内的计算机为了和其他主机进行通讯,在硬件上是需要网卡,在软件上是需要网卡驱动程序的。而每块网卡在出厂时都有一个唯一的不与世界上任何一块网卡重复的硬件地址,称为mac地址。
同时,当网络中两台主机在实现tcp/ip通讯时,网卡还必须绑定一个唯一的ip地址。下面用一个常见的unix命令ifconfig来看一看作者本人的一台正常工作的机器的网卡:[yiming@server/root]# ifconfig -ahme0: flags=863 mtu 1500inet 192。
168。1。
35 netmask ffffffe0ether 8:0:20:c8:fe:15 从这个命令的输出中我们可以看到上面讲到的这些概念,如第二行的192。168。
1。35是ip 地址,第三行的8:0:20:c8:fe:15是mac地址。
请注意第一行的BROADCAST,MULTICAST,这是什么意思?一般而言,网卡有几种接收数据帧的状态,如unicast,broadcast,multicast,promiscuous等,unicast是指网卡在工作时接收目的地址是本机硬件地址的数据帧。 Broadcast是指接收所有类型为广播报文的数据帧。
Multicast是指接收特定的组播报文。Promiscuous 则是通常说的混杂模式,是指对报文中的目的硬件地址不加任何检查,全部接收的工作模式。
对照这几个概念,看看上面的命令输出,我们可以看到,正常的网卡应该只是接收发往自身的数据报文,广播和组播报文,请大家记住这个概念。 对网络使用者来说,浏览网页,收发邮件等都是很平常,很简便的工作,其实在后台这些工作是依靠tcp/ip协议族实现的,大家知道有两个主要的网络体系:OSI参考模型和TCP/IP参考模型,OSI模型即为通常说的7层协议,它由下向上分别为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层,而tcp/ip模型中去掉了会话层和表示层后,由剩下的5层构成了互联网的基础,在网络的后台默默的工作着。
下面我们不妨从tcp/ip模型的角度来看数据包在局域网内发送的过程:当数据由应用层自上而下的传递时,在网络层形成ip数据报,再向下到达数据链路层,由数据链路层将ip数据报分割为数据帧,增加以太网包头,再向下一层发送。需要注意的是,以太网的包头中包含着本机和目标设备的mac地址,也即,链路层的数据帧发送时,是依靠48bits的以太网地址而非ip地址来确认的,以太网的网卡设备驱动程序不会关心ip数据报中的目的ip地址,它所需要的仅仅是mac地址。
目标ip的mac地址又是如何获得的呢?发端主机会向以太网上的每个主机发送一份包含目的地的ip地址的以太网数据帧(称为arp数据包),并期望目的主机回复,从而得到目的主机对应的mac地址,并将这个mac地址存入自己的一个arp缓存内。
2.局域网实现监听有哪些基本原理?
对于目前很流行的以太网协议,其工作方式是:将要发送的数据包发往连接在一起的所有主机,包中包含着应该接收数据包主机的正确地址,只有与数据包中目标地址一致的那台主机才能接收。
但是,当主机工作监听模式下,无论数据包中的目标地址是什么,主机都将接收(当然只能监听经过自己网络接口的那些包)。 在因特网上有很多使用以太网协议的局域网,许多主机通过电缆、集线器连在一起。
当同一网络中的两台主机通信的时候,源主机将写有目的的主机地址的数据包直接发向目的主机。但这种数据包不能在IP层直接发送,必须从TCP/IP协议的IP层交给网络接口,也就是数据链路层,而网络接口是不会识别IP地址的,因此在网络接口数据包又增加了一部分以太帧头的信息。
在帧头中有两个域,分别为只有网络接口才能识别的源主机和目的主机的物理地址,这是一个与IP地址相对应的48位的地址。 传输数据时,包含物理地址的帧从网络接口(网卡)发送到物理的线路上,如果局域网是由一条粗缆或细缆连接而成,则数字信号在电缆上传输,能够到达线路上的每一台主机。
当使用集线器时,由集线器再发向连接在集线器上的每一条线路,数字信号也能到达连接在集线器上的每一台主机。当数字信号到达一台主机的网络接口时,正常情况下,网络接口读入数据帧,进行检查,如果数据帧中携带的物理地址是自己的或者是广播地址,则将数据帧交给上层协议软件,也就是IP层软件,否则就将这个帧丢弃。
对于每一个到达网络接口的数据帧,都要进行这个过程。 然而,当主机工作在监听模式下,所有的数据帧都将被交给上层协议软件处理。
而且,当连接在同一条电缆或集线器上的主机被逻辑地分为几个子网时,如果一台主机处于监听模式下,它还能接收到发向与自己不在同一子网(使用了不同的掩码、IP地址和网关)的主机的数据包。 也就是说,在同一条物理信道上传输的所有信息都可以被接收到。
另外,现在网络中使用的大部分协议都是很早设计的,许多协议的实现都是基于一种非常友好的、通信的双方充分信任的基础之上,许多信息以明文发送。因此,如果用户的账户名和口令等信息也以明文的方式在网上传输,而此时一个黑客或网络攻击者正在进行网络监听,只要具有初步的网络和TCP/IP协议知识,便能轻易地从监听到的信息中提取出感兴趣的部分。
同理,正确的使用网络监听技术也可以发现入侵并对入侵者进行追踪定位,在对网络犯罪进行侦查取证时获取有关犯罪行为的重要信息,成为打击网络犯罪的有力手段。
3.Win10虚拟网卡如何设置呢?
Win10系统里面添加虚拟网卡的办法。
具体的操作方法如下: 1、在计算机图标上我们点击右键,紧跟着选择设备管理器。在PC图标上点击右键,选择添加过时硬件选项。
2、接着大家点选安装我手动从列表选择的硬件选项,并且点击下一步。 3、其次选择网络适配器,然后点击下一步。
4、在厂商处选择大家选择Microsoft,网络适配器处我们选择Microsoft Loopback Adapter选项,紧接着点击下一步。通过上面几个步骤的设置后,一块虚拟网卡的安装设置就算是完成了。
任务栏右下角会显示出一个小电脑图标上有感叹号,连接不上网, 我们可以手动设置IP地址,把它设置为与自带网卡同一网段就行了。
4.Win10正式版热点开启方法 Win10怎么共享热点
1、右击Win10正式版左下角的“Windows”按钮,从其右键菜单中选择“命令提示符(管理员)”项进入。
2、从打开的“命令提示符”窗口中,输入命令
“netsh wlan set hostednetwork mode=allow ssid=Win10FreeWiFi key=12345678"
并按回车键即可创建一个名为”Win10FreeWiFi”、密码为“12345678”的WiFi热点。
3、待热点创建完成后,接着输入命令“netsh wlan start hostednetwork”即可开启热点,此时就可以利用手机等其它设备来尝试连接此WiFi网络。
4、接下来查看一下我们所创建的WiFi热点:右击任务栏右下角的“网络”图标,从其右键菜单中选择“打开网络和共享中心”项。
5、从打开的“网络和共享中心”界面中,点击左上角的“更改适配器设置”按钮。
6、此时从打开的“网络连接”界面中,就可以看到新创建的名为“Win10FreeWiFi“的网络连接啦。
7、在手机端或其它设备中就可以尝试连接以上所创建的免费WiFi热点啦。
8、如果出现”无法正常连接“或”一直获取IP地址“的提示时,我们需要进行如下设置:首先暂时关闭安全防护类软件,比如”360安全卫士“,同时设置防火墙以允许”虚拟WiFi“热点通过。
9、在“网络连接”界面中,右击“宽带连接”或“本地连接”图标,从弹出的右键菜单中选择“属性”项。
10、此时将打开“属性”界面,切换到“共享”选项卡,勾选“允许其它网络用户通过此计算机的Internet连接来连接”项,同时从家庭网络连接下拉列表中选择“本地连接*1”(即新创建的WiFi热点),点击“确定”完成设置。
11、当然,如果想关闭新创建的名为“Win10FreeWiFi”的网络,只需要在MSDOS界面中输入命令“netsh wlan set hostednetwork mode=disallow”并按回车即可。
win10设置混杂模式
1.如何在windows中将网卡设置为混杂模式
网卡混杂模式(Promiscuous Model) 工作在混杂模式下的网卡接收所有的流过网卡的帧,信包捕获程序就是在这种模式下运行的。
一般的网络分析工具,都是通过把网卡设置为混杂模式来获取底层数据流。网卡设置为混杂模式1.网上流传的设置调整网卡属性,是全双工和半双工设置。
2.网卡设置为混杂模式是比较麻烦的,需要通过编程底层来修改。3.常见的抓包工具如 Sniffer ,WinPcap都自动调整网卡混杂模式功能,开启抓包自动调整为混杂模式,关闭停止抓包程序。
恢复正常模式。
2.如何控制混杂模式
一、在普通程序中设置网卡混杂模式。
在普通程序中普遍用ioctl函数来设置,该函数很值得大家好好的了解,因为它的使用非常的广泛。下面 给出设置网卡混杂模式的实现代码: #include #include #include #include int set_all_promisc() { struct ifreq ifaces[16]; struct ifconf param; int sock, i; param.ifc_len = sizeof(ifaces); param.ifc_req = ifaces; sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP); if (sock <= 0) return 0; if (ioctl(sock, SIOCGIFCONF, ¶m)) return 0; for (i = 0; i < param.ifc_len / sizeof(struct ifreq); i++) { if (ioctl(sock, SIOCGIFFLAGS, ifaces + i)) return 0; ifaces[i].ifr_flags |= IFF_PROMISC; /*如果恢复网卡模式,把|= 改成 &=~ */ if (ioctl(sock, SIOCSIFFLAGS, ifaces + i)) return 0; } return 1; } 二、在核心空间中设置混杂模式1.在kernel-2.2.x 中 static struct device *sniffer_dev = NULL; static unsigned short old_flags, old_gflags;int init_module ( void ) /* 模块初始化 */ { 。
sniffer_dev = dev_get("eth0"); if ( sniffer_dev != NULL ) { /* thanks for difeijing of whnet's Security */ old_flags = sniffer_dev->flags; old_gflags = sniffer_dev->gflags; /* * 参看net/core/dev.c里的dev_change_flags() * ->gflags的作用是避免多次重复设置混杂模式,没有其他特别含义 */ /* 设置混杂模式 */ sniffer_dev->flags |= IFF_PROMISC; sniffer_dev->gflags |= IFF_PROMISC; start_bh_atomic(); /* 注意,这个回调函数还是会报告 eth0: Setting promiscuous mode. */ sniffer_dev->set_multicast_list( sniffer_dev ); end_bh_atomic(); }。
return 0; } void cleanup_module(void) { 。
if (sniffer_dev != NULL) { /* 恢复原有模式 */ sniffer_dev>flags = old_flags; sniffer_dev>gflags = old_gflags; start_bh_atomic(); sniffer_dev>set_multicast_list( sniffer_dev ); end_bh_atomic(); }。
} 2.在kernel-2.4.x 中在2.4中有了许多变化,首先struct device结构改为struct net_device, 再者dev_get功能改为测试网络设备是否存在,真正的设置网络混杂模式的函数改为 void dev_set_promiscuity(struct net_device *dev, int inc); 其中根据inc的值来设置混杂模式还是恢复原来设置模式,通过计数来恢复原来模式,这样的好处就是:不会和其他的程序冲突,不在像上述两种实现方式中恢复原来模式就全恢复了,不管还有没有其他的程序是否也设置了混杂模式。
现在就通过计数来恢复原来的模式,只要当计数相加为零才设置成普通模式。linux源代码的注释如下: /** * dev_set_promiscuity - update promiscuity count on a device * @dev: device * @inc: modifier * * Add or remove promsicuity from a device. While the count in the device * remains above zero the interface remains promiscuous. Once it hits zero * the device reverts back to normal filtering operation. A negative inc * value is used to drop promiscuity on the device. */设置网卡混杂模式的实现代码如下:struct net_device *sniffer_dev = NULL; int dev_flags = 0;int init_module ( void ) /* 模块初始化 */ { 。
sniffer_dev = dev_get_by_name("eth0"); if (sniffer_dev != NULL) { dev_flags = 1; dev_set_promiscuity(sniffer_dev, 1); dev_put(sniffer_dev); sniffer_dev = NULL; }。
return 0; }void cleanup_module(void) { 。
if (dev_flags) { sniffer_dev = dev_get_by_name("eth0"); if (sniffer_dev != NULL) { dev_flags = 0; dev_set_promiscuity(sniffer_dev, -1); /*注意此处的第二个参数*/ dev_put(sniffer_dev); sniffer_dev = NULL; } }。
}。
3.windows怎么设置网卡的网卡的混杂模式
网卡混杂模式(Promiscuous Model)
工作在混杂模式下的网卡接收所有的流过网卡的帧,信包捕获程序就是在这种模式下运行的。一般的网络分析工具,都是通过把网卡设置为混杂模式来获取底层数据流。
网卡设置为混杂模式
1、网上流传的设置调整网卡属性,是全双工和半双工设置。
2、网卡设置为混杂模式是比较麻烦的,需要通过编程底层来修改。
3、常见的抓包工具如 Sniffer ,WinPcap都自动调整网卡混杂模式功能,开启抓包自动调整为混杂模式,关闭停止抓包程序。恢复正常模式
4.如何控制混杂模式
一、在普通程序中设置网卡混杂模式。
在普通程序中普遍用ioctl函数来设置,该函数很值得大家好好的了解,因为它的使用非常的广泛。下面 给出设置网卡混杂模式的实现代码: #include #include #include #include int set_all_promisc() { struct ifreq ifaces[16]; struct ifconf param; int sock, i; param.ifc_len = sizeof(ifaces); param.ifc_req = ifaces; sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP); if (sock <= 0) return 0; if (ioctl(sock, SIOCGIFCONF, ¶m)) return 0; for (i = 0; i < param.ifc_len / sizeof(struct ifreq); i++) { if (ioctl(sock, SIOCGIFFLAGS, ifaces + i)) return 0; ifaces[i].ifr_flags |= IFF_PROMISC; /*如果恢复网卡模式,把|= 改成 &=~ */ if (ioctl(sock, SIOCSIFFLAGS, ifaces + i)) return 0; } return 1; } 二、在核心空间中设置混杂模式 1.在kernel-2.2.x 中 static struct device *sniffer_dev = NULL; static unsigned short old_flags, old_gflags; int init_module ( void ) /* 模块初始化 */ { 。
sniffer_dev = dev_get("eth0"); if ( sniffer_dev != NULL ) { /* thanks for difeijing of whnet's Security */ old_flags = sniffer_dev->flags; old_gflags = sniffer_dev->gflags; /* * 参看net/core/dev.c里的dev_change_flags() * ->gflags的作用是避免多次重复设置混杂模式,没有其他特别含义 */ /* 设置混杂模式 */ sniffer_dev->flags |= IFF_PROMISC; sniffer_dev->gflags |= IFF_PROMISC; start_bh_atomic(); /* 注意,这个回调函数还是会报告 eth0: Setting promiscuous mode. */ sniffer_dev->set_multicast_list( sniffer_dev ); end_bh_atomic(); } 。
return 0; } void cleanup_module(void) { 。
if (sniffer_dev != NULL) { /* 恢复原有模式 */ sniffer_dev>flags = old_flags; sniffer_dev>gflags = old_gflags; start_bh_atomic(); sniffer_dev>set_multicast_list( sniffer_dev ); end_bh_atomic(); } 。
} 2.在kernel-2.4.x 中 在2.4中有了许多变化,首先struct device结构改为struct net_device, 再者dev_get 功能改为测试网络设备是否存在,真正的设置网络混杂模式的函数改为 void dev_set_promiscuity(struct net_device *dev, int inc); 其中根据inc的值来设置混杂模式还是恢复原来设置模式,通过计数来恢复原来模式,这样的好处就是:不会和其他的程序冲突,不在像上述两种实现方式中恢复原来模式就全恢复了,不管还有没有其他的程序是否也设置了混杂模式。
现在就通过计数来恢复原来的模式,只要当计数相加为零才设置成普通模式。 linux源代码的注释如下: /** * dev_set_promiscuity - update promiscuity count on a device * @dev: device * @inc: modifier * * Add or remove promsicuity from a device. While the count in the device * remains above zero the interface remains promiscuous. Once it hits zero * the device reverts back to normal filtering operation. A negative inc * value is used to drop promiscuity on the device. */ 设置网卡混杂模式的实现代码如下: struct net_device *sniffer_dev = NULL; int dev_flags = 0; int init_module ( void ) /* 模块初始化 */ { 。
sniffer_dev = dev_get_by_name("eth0"); if (sniffer_dev != NULL) { dev_flags = 1; dev_set_promiscuity(sniffer_dev, 1); dev_put(sniffer_dev); sniffer_dev = NULL; } 。
return 0; } void cleanup_module(void) { 。
if (dev_flags) { sniffer_dev = dev_get_by_name("eth0"); if (sniffer_dev != NULL) { dev_flags = 0; dev_set_promiscuity(sniffer_dev, -1); /*注意此处的第二个参数*/ dev_put(sniffer_dev); sniffer_dev = NULL; } } 。
}。
5.请教各位高手如何将网卡设置为混杂模式
RtlZeroMemory(&pAdapt->Request, sizeof(NDIS_REQUEST));
ulFilter = NDIS_PACKET_TYPE_PROMISCUOUS ;
pAdapt->Request.RequestType = ;
pAdapt->Request.DATA.SET_INFORMATION.Oid = OID_GEN_CURRENT_PACKET_FILTER;
pAdapt->Request.DATA.SET_INFORMATION.InformationBuffer = &ulFilter;
pAdapt->Request.DATA.SET_INFORMATION. = sizeof(ulFilter);
NdisRequest(Status, pAdapt->BindingHandle, &pAdapt->Request);
或 NdisRequest OID_GEN_CURRENT_PACKET_FILTER ,增加NDIS_PACKET_TYPE_PROMISCUOUS 标志
或 Const
NDIS_PACKET_TYPE_DIRECTED =$0001;
NDIS_PACKET_TYPE_MULTICAST =$0002;
NDIS_PACKET_TYPE_ALL_MULTICAST =$0004;
NDIS_PACKET_TYPE_BROADCAST =$0008;
NDIS_PACKET_TYPE_SOURCE_ROUTING =$0010;
NDIS_PACKET_TYPE_PROMISCUOUS =$0020;
NDIS_PACKET_TYPE_SMT =$0040;
NDIS_PACKET_TYPE_MAC_FRAME =$8000;
NDIS_PACKET_TYPE_FUNCTIONAL =$4000;
NDIS_PACKET_TYPE_ALL_FUNCTIONAL =$2000;
NDIS_PACKET_TYPE_GROUP =$1000;
function SetOid(hVxD:THandle; ulOid,ulLength,data:ULong):PBYTE;
var
cbin,cbRet,a:DWord;
ioctl:ULong;
pOidData:PPACKET_OID_DATA;
begin
cbIn := sizeof(PACKET_OID_DATA) + ulLength;
pOidData:= PPACKET_OID_DATA(@InBuff);
if (ulOid = OID_GEN_CURRENT_PACKET_FILTER) then
ioctl := ULONG (IOCTL_PROTOCOL_SET_OID);
fillchar(InBuff, 0, cbIn+1);
pOidData.Oid := ulOid;
pOidData.Length := ulLength;
pOidData.Data[0] := UCHAR(data);
cbRet := QueryPacket( hVxD, ioctl, @InBuff, cbIn, @InBuff, cbIn );
result:=0;
end;
SetOid(hVxD, OID_GEN_CURRENT_PACKET_FILTER, 4, NDIS_PACKET_TYPE_PROMISCUOUS);
转载请注明出处windows之家 » win10网卡混杂模式