簡體   English   中英

在python上發出ARP請求

[英]Make ARP request on python

我正在嘗試在python上發出ARP請求。 我的代碼:

import socket
from struct import pack
from uuid import getnode as get_mac

def main():
    dest_ip = [10, 7, 31, 99]
    local_mac = [int(("%x" % get_mac())[i:i+2], 16) for i in range(0, 12, 2)]
    local_ip = [int(x) for x in socket.gethostbyname(socket.gethostname()).split('.')]

    sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.SOCK_RAW)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    sock.bind(('', 0))

    ARP_FRAME = [
        pack('!H', 0x0001), # HRD
        pack('!H', 0x0800), # PRO
        pack('!B', 0x06), # HLN
        pack('!B', 0x04), # PLN 
        pack('!H', 0x0001), # OP
        pack('!6B', *local_mac), # SHA
        pack('!4B', *local_ip), # SPA
        pack('!6B', *(0x00,)*6), # THA
        pack('!4B', *dest_ip), # TPA
    ]
    print(ARP_FRAME)
    sock.sendto(b''.join(ARP_FRAME), ('255.255.255.255', 0))
    sock.close()

if __name__ == "__main__":
    main()

當我執行此代碼時,Wireshark不會捕獲任何數據包。 我認為插座有問題。 當我執行socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.SOCK_RAW)我得到AttributeError: module 'socket' has no attribute 'AF_PACKET' 我在做什么錯以及如何解決?

OS X 10.11.3

socket.AF_INET是IP數據包的套接字。 由於ARP是以太網,因此無法通過這種方式工作,因此您需要訪問以太網層。

在Linux上,您可以使用:

s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(3))

s是您用來分配套接字的任何變量。

要發送數據包,您應該將接口與

s.bind(("eth0", 0))

其中“ eth0”是網絡接口名稱。

之后,您可以使用

s.send(packet)

數據包是您的有效載荷,以字節串表示。

AttributeError: module 'socket' has no attribute 'AF_PACKET'

也就是說,您的平台上未實現AF_PACKET。 不幸的是,某些平台不提供對低層網絡層的訪問,這在Windows中是正確的,在OS X中也可能是正確的。至少,即使在Linux上,您也需要root特權才能訪問低層網絡。您會收到拒絕訪問錯誤。

通過Python訪問低級網絡的想法是使用虛擬機(例如Virtualbox),並運行一個Linux guest虛擬機。

FTR,要變通解決此問題,您可以使用Scapy。 它將使用:

  • UNIX上的AF_PACKET或libpcap
  • BSD上的BPF
  • Windows上的Winpcap / Npcap

在每種情況下都可以訪問原始層,這使它跨平台。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM