Skip to content

wireshark 网卡混杂模式

​ 混杂模式是一种允许网卡能够查看到所有数据包的驱动模式。在混杂模式下,网卡将会把每一个它所看到的数据包都传递给主机的处理器, 而无论数据包的目的地址是什么。一旦数据包到达 CPU,它就可以被一个数据 包嗅探软件捕获并进行分析。Wireshark 使用 libpcap / WinPcap 驱动,将网卡直接切换到混杂模式。关闭混杂模式就是要抑制 未知单播,仅允许目的 mac 是自身或者广播/组播报文

  • 未知单播:交换机起动时,MAC地址表为空,如果此时A主机发送一个帧给主机B,那么当交换机接受此帧的时,查看源地址(主机A),并将它添加到MAC地址表中,但是交换机并不知道主机B在哪个端口,所以交换机会泛洪这个帧。

混在模式简介


  • wireshark 开启/关闭混杂模式

wireshark_promiscuous

linux 网卡模式简介


  • ifconfig 简介
root@client:~# ifconfig ens38
ens38     Link encap:Ethernet  HWaddr 00:0c:29:6a:87:11  
          inet addr:10.10.2.2  Bcast:10.10.2.3  Mask:255.255.255.252
          inet6 addr: fe80::20c:29ff:fe6a:8711/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:1476 (1.4 KB)
  • 字段描述 ^1
FlagDescription
UPdevice is functioning
BROADCASTdevice can send traffic to all hosts on the link
RUNNING???
MULTICASTdevice can perform and receive multicast packets
ALLMULTIdevice receives all multicast packets on the link
PROMISCdevice receives all traffic on the link
  • linux 设置/取消混杂模式
# 开启混杂模式
ifconfig eth0 promisc 
ens38     Link encap:Ethernet  HWaddr 00:0c:29:6a:87:11  
          inet addr:10.10.2.2  Bcast:10.10.2.3  Mask:255.255.255.252
          inet6 addr: fe80::20c:29ff:fe6a:8711/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:1476 (1.4 KB)

# 关闭混杂模式
ifconfig eth0 -promisc
ens38     Link encap:Ethernet  HWaddr 00:0c:29:6a:87:11  
          inet addr:10.10.2.2  Bcast:10.10.2.3  Mask:255.255.255.252
          inet6 addr: fe80::20c:29ff:fe6a:8711/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:1476 (1.4 KB)

未知问题(已解决)


按《wireshark 数据包分析实战》描述,关闭混杂模式应该收不到目的 mac 地址不是自己的报文,不清楚为啥还能收到广播包。

  • tcpdump 描述:
--no-promiscuous-mode
              Don't put the interface into promiscuous mode.  Note that the interface might be in promiscuous mode for some other reason; hence, `-p' cannot be used as an abbreviation for `ether host {local-hw-addr} or ether broadcast'.
  • 客户端测试
root@client:~# socat STDIO UDP4-DATAGRAM:10.10.2.3:6666,broadcast
1
  • 服务端抓包 (-p)
root@router:/home/ubuntu# tcpdump -i ens39 -p udp -e
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens39, link-type EN10MB (Ethernet), capture size 262144 bytes
22:56:03.225065 00:0c:29:6a:87:11 (oui Unknown) > Broadcast, ethertype IPv4 (0x0800), length 60: 10.10.2.2.50726 > 10.10.2.3.6666: UDP, length 1

参考文献