以太网网卡的工作模式:
常见的以太网卡支持以下工作模式:广播模式、多播模式、直接模式和混杂模式。
- 广播模式(Broad Cast Model)
- 它的物理地址(MAC)地址是0xffffff的帧为广播帧,工作在广播模式的网卡接收广播帧。它将会接收所有目的地址为广播地址的数据包,一般所有的网卡都会设置为这个模式。
- 多播传送(MultiCast Model)
- 多播传送地址作为目的物理地址的帧可以被组内的其它主机同时接收,而组外主机却接收不到。但是,如果将网卡设置为多播传送模式,它可以接收所有的多播传送帧,而不论它是不是组内成员。当数据包的目的地址为多播地址,而且网卡地址是属于那个多播地址所代表的多播组时,网卡将接纳此数据包,即使一个网卡并不是一个多播组的成员,程序也可以将网卡设置为多播模式而接收那些多播的数据包。
- 直接模式(Direct Model)
- 工作在直接模式下的网卡只接收目的地址是自己Mac地址的帧。只有当数据包的目的地址为网卡自己的地址时,网卡才接收它。
- 混杂模式(Promiscuous Model)
- 工作在混杂模式下的网卡接收所有的流过网卡的帧,信包捕获程序就是在这种模式下运行的。网卡的缺省工作模式包含广播模式和直接模式,即它只接收广播帧和发给自己的帧。如果采用混杂模式,网卡将接受同一网络内所有主机发送的数据包。
- 利用网卡混杂模式的特性,就可以达到对于网络信息监听捕获的目的。
- 需要注意的是,并不是任何情况下,网络中的数据都会流经你的网卡,比如交换机网络,交换机会绑定端口和MAC,此时就需要ARP欺骗了。
设置网卡为混杂模式
我们可以通过ifconfig和iwconfig配置网络接口的信息。
ifconfig eth0 promisc ------ 将eth0设置为混杂模式
ifconfig eth0 -promisc ------ 取消网卡混杂模式
无线网卡的监听模式
对于无线网卡,我们可以使用iwconfig的mode参数来配置混杂模式,mode选项值如下:
- Ad-hoc: 不带AP的点对点无线网络
- Managed: 通过多个AP组成的网络,无线设备可以在这个网络中漫游
- Master: 设置该无线网卡为一个AP
- Repeater: 设置为无线网络中继设备,可以转发网络包。
- Secondary: 设置为备份的AP/Repeater
- Monitor: 监听模式
- Auto: 由无线网卡自动选择工作模式
使用如下命令可以设置无线网卡为监听模式:
ifconfig wlan0 down
iwconfig wlan0 mode monitor
ifconfig wlan0 up
在kali中我们通过iwconfig来设置混杂模式,可能会遇到点困难,无线网卡设置为混杂模式后,过几秒又变成manage模式了,这是由于Network Manage服务造成,我们可以关闭该服务。
监听模式和混杂模式区别?
混杂模式是在wifi连接到指定网络中,监听子网中的数据传输;监听模式下wifi会断网,进而监听某一个信道内所有传输流量,因此可以用来扫描wifi热点,破解wifi密码等工作。
嗅探程序sniffer
Raw Socket是一种较为底层的socket编程接口,可以用来获取IP层以上的数据,可以用来编写sniffer。
一个完整的sinffer代码组成,大致分为创建socket对象,接收数据,分析数据三个部分。其中开启网卡的混杂模式,需要配置socket对象属性。
setsockopt函数是用来对socket对象进行补充选项的设置,三个参数分别为level、选项名称和值。
level支持SOL_SOCKET、IPPROTO_TCP、IPPROTO_IP和IPPROTO_IPV6.
可用的socket层选项名字如下:
协议层 选项名字
SOL_SOCKET SO_REUSEADDR 该选项可以让多个socket对象绑定到相同的地址和端口上。
SOL_SOCKET SO_KKEPALIVE
SOL_SOCKET SO_LINGER
SOL_SOCKET SO_BROADCAST
SOL_SOCKET SO_OOBINLINE
SOL_SOCKET SO_SNDBUF
SOL_SOCKET SO_RCVBUF
SOL_SOCKET SO_TYPE
SOL_SOCKET SO_ERROR
IPPROTO_IP IP_HDRINCL 设置数据保护IP头部
详情请见:玄魂博客