混杂模式(promiscuous mode)的检测

本文发布时间: 2019-Mar-22
混杂模式在一些网络嗅探工具很常见,本文以“如何探测某台机器是否开启混杂模式?”这个问题出发,逐渐展开对混杂模式的介绍。 首先,linux下如何开启混杂模式? 我所知道的有两种方式: 1、ifconfig . 使用man ifconfig 帮助可以看到[-]promisc Enable or disable the promiscuous mode of the interface. If selected, all packets on the network will be received by the interface. ifconfig eth1 promisc ----------------开启混杂模式 ifconfig eth1 -promisc ----------------关闭混杂模式 2、ip 命令ip link set DEVICE { up | down | arp { on | off } | promisc { on | off } | allmulticast { on | off } | dynamic { on | off } | multicast { on | off } | txqueuelen PACKETS | name NEWNAME | address LLADDR | broadcast LLADDR | mtu MTU | netns PID | alias NAME | vf NUM [ mac LLADDR ] [ vlan VLANID [ qos VLAN-QOS ] ] [ rate TXRATE ] } ip link set eth1 promisc on ----------------开启混杂模式 ip link set eth1 promisc off ----------------关闭混杂模式 其次,如何检测某台机器网卡是否开启混杂模式,我所知道的有三种方式,前两种是要登陆到该机器上查询。后一种则直接发网络包查询。 1、登陆到该机器上使用 ip link show eth1 命令eth1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:78:9c:1d brd ff:ff:ff:ff:ff:ff 如果有promisc字眼,就是开启了混杂模式。 2、登陆到该机器上使用netstat -i 命令Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flgeth1 1500 0 246689 0 0 0 87535 0 0 0 BMPRUlo 16436 0 40 0 0 0 40 0 0 0 LRU Flg 中有个P标志表示promisc 3、使用ARP包进行探测,也是本文的重点。方法是向局域网内被检测的目标机器发送一个特殊的arp包,根据是否有arp应答包特性来判断目标机器是否开启混杂模式。之所以能这样做,是由下面几个特点决定的。 1、以太网是载波侦听(CSMA/CD)。什么意思。通俗一点讲就是“一个人在点到,大家都在听,点到自己才回答,没有点自己别吭声”。它是一种广播链路,共享信道方式。 2、网络包的过滤特性,过滤分两层,首先是硬件过滤(HW Filter),随后是软件过滤(SW Filter)。上图中主机B,C,D拒绝是指硬件过滤。它过滤判断条件是MAC地址是否匹配,针对的是MAC地址,属于OSI第二层--链路层的处理。 软件过滤判断条件是ip地址是否匹配。属于OSI协议分层里面的第三层过滤。正是因为一些原来不会产生应答而在混杂模式下却会产生应答的差异。提供了检测混杂模式的手段。 上表是一个很经典的linux下过滤特性统计表格,其中gr bit 是指group bit,组播位。第一个字节的最低位为1的所有地址,例如01-12-0f-00-00-02。当然广播地址 FF:FF:FF:FF:FF:FF 也属于组播的一种。其中最后两行在普通模式下没有应答,而在混杂模式下有应答。所以可以利用最后两行来检测混杂模式。具体检测时候填充的MAC地址如下表。使用红圈两行即可。 最后两行属于多播地址范围(00:00:5e:00:00:00 - 00:00:5e:7f:ff:ff),参照上表,目的地址使用FF:FF:FF:FF:FF:FE或FF:FF:00:00:00:00即可不分windows还是linux,探测出是否开启了混杂模式。 3、最后一步就是构造测试包,目前linux系统好像没有现成的可以构造目的地址的工具,需要自己写程序或使用第三方工具。可以构造一个arp包或者ip包,设置目的mac地址为上表红圈中地址即可。struct pack { unsigned char h_dest[ETH_ALEN];//目标mac地址,填写FF:FF:FF:FF:FF:FE unsigned char h_source[ETH_ALEN];//源mac地址,及发送者本机mac unsigned short h_proto;//以太网包的类型,0x0806 arp或者 0x0800 ip包 ..... //arp 或 ip 包内容}


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:10pm
栏目列表