我试图在python上发出ARP请求。我的代码:在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
出于好奇,有什么理由不使用scapy吗? – Goodies
第二层帧是一个带有广播目的地MAC地址(FFFF.FFFF.FFFF)和ARP ethertype(0x0806)的标准以太网帧。三层报文是一个ARP请求。有关ARP数据包格式,请参阅http://www.tcpipguide.com/free/t_ARPMessageFormat.htm。 –
@Goodies这是“计算机网络”课程的家庭作业。 – 0x1337