MAC欺骗是欺骗了MAC地址和交换机端口的对应关系
假如我作为攻击者,发送了
dst_mac = GW.mac
src_mac = 你.mac
这样的数据包到网关GW,这样就导致对应关系为:
你.mac => 我.port
此时,交换机就将所有发到你.mac的数据帧都从我.port发给了我,直到你主动发送一个包,或者另外出现
dst_mac = GW.mac
src_mac = 你.mac
这样的包出现
接上面,我收到了GW发给你的数据,有可能需要发送一个ARP请求,也就是请求你.mac的广播:
dst_mac = ff:ff:ff:ff:ff:ff
src_mac = 我.mac
由于src是我.mac,也就是对应关系为:
我.mac => 我.port
同时你响应了一个ARP包的reply信息:
dst_mac = 我.mac
src_mac = 你.mac
这个数据帧也表明了:
你.mac => 你.port
这样对应关系又好了,我劫持的数据又可以顺利地转发到你了,但是完成了一次劫持
MAC的欺骗,如果要伪造MAC地址的话,有人可能想直接修改MAC地址,那直接通过ip或者macchanger工具即可,但是欺骗毕竟是作为中间人,不应对其它正常主机进行主动修改,因此可以通过数据包伪造工具来进行
>>> >>> from scapy.all import * >>> frame = Ether(src = '11:11:11:11:11:11')/IP()/ICMP() >>> >>> sendp(frame, iface = 'eth1') . Sent 1 packets. >>>
可以看到MAC地址的确是自己伪造的
# tcpdump -i eth1 icmp -en tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes 00:15:14.456836 11:11:11:11:11:11 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 42: 127.0.0.1 > 127.0.0.1: ICMP echo request, id 0, seq 0, length 8 ^C 1 packet captured 1 packet received by filter 0 packets dropped by kernel