python - arp中毒python失败(linux)

标签 python linux network-programming arp python-sockets

好的,所以我正在运行 Ubuntu 14.04 LTS,我正试图通过这样做来毒化我自己的 ARP 缓存,

我的私有(private) IP 地址是 10.0.0.1

我手机的私有(private) IP 地址是 10.0.0.8

对于这个例子,假设我的 MAC 地址是 axaxaxaxaxax

我编写了以下 python 代码:

from binascii import *  
from struct import *
import socket;


class ethernetframe:

    def __init__(self, destmac, srcmac, ethrtype):  

        self.destmac = unhexlify(destmac)
        self.srcmac = unhexlify(srcmac)
        self.ethrtype = unhexlify(ethrtype)


    def uniteframe(self, payload):
        frame = ''
        frame = frame + self.destmac
        frame = frame + self.srcmac
        frame = frame + self.ethrtype
        frame = frame + payload
        frame = frame + unhexlify("00000000")
        return frame



class arppacket:

    def __init__(self,opcode,srcmac,srcip,dstmac,dstip):

        if opcode == 1:
            dstmac = "000000000000"
            opcode = "0001"
        else:
            opcode = "0002"
        self.opcode = unhexlify(opcode)
        self.srcmac = unhexlify(srcmac)
        self.srcip = pack('!4B',srcip[0],srcip[1],srcip[2],srcip[3])
        self.dstmac = unhexlify(dstmac)
        self.dstip =  pack('!4B',dstip[0],dstip[1],dstip[2],dstip[3])

    def unitepacket(self):
        packet = ''
        packet = packet + "\x00\x01\x08\x00\x06\x04"
        packet = packet + self.opcode
        packet = packet + self.srcmac 
        packet = packet + self.srcip
        packet = packet + self.dstmac
        packet = packet + self.dstip
        return packet


e1 = ethernetframe("axaxaxaxaxax","axaxaxaxaxax","0800")
arp1 = arppacket(2,"axaxaxaxaxax",(10,0,0,8),"axaxaxaxaxax",(10,0,0,1))
arpacket = arp1.unitepacket()
fullethframe = e1.uniteframe(arpacket)

s = socket.socket(socket.AF_PACKET,socket.SOCK_RAW,socket.htons(0x0806))
s.bind(("eth0",0))
s.send(fullethframe)

现在,我正在使用 Wireshark 监视整个过程,正在发送 ARP 数据包并且它的格式正确,在 wire shark 中我看到以下行:

10.0.0.8 位于 axaxaxaxaxax

这意味着我已经成功发送了ARP回复!到我自己的计算机,说明为 10.0.0.8 解析的 MAC 地址是 axaxaxaxaxax 因为如果收到回复,ARP 缓存会自动更新,无论是否发送请求,这意味着在我的 NIC 驱动程序的 arp 缓存中应该添加一行说明 10.0.0.8 用axaxaxaxaxax 解析

但是,当我在 ubunutu 的终端中运行时

arp - a

arp - an

它没有出现.......,这意味着我没能毒化我自己的 ARP 缓存,有什么解决办法吗?

最佳答案

这里只是一个想法——你试过了吗

arp -an

如果没有 -n,arp 将尝试对主机名进行反向名称查找。

关于python - arp中毒python失败(linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26004822/

相关文章:

python - 适用于 Linux 的可移植 .so 库

sockets - 多个send()方法调用和1个receive方法。这正常吗?

python - 属性错误 : 'tuple' object has no attribute 'autoscale_None'

python 字典: get vs setdefault

linux - 进程和线程在 Linux 中有什么区别?

c - RAW-Sockets 应该忽略 MTU

c++ - 加密字符数组的字节序切换

python - 使用 shell 脚本安装 python 库

python - 将网站表转换为 pandas df(beautifulsoup 无法识别表)

c - 在内核重启后保留文件