Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中使用原始套接字发送和接收arp包_Python_Sockets_Arp_Recvfrom - Fatal编程技术网

如何在python中使用原始套接字发送和接收arp包

如何在python中使用原始套接字发送和接收arp包,python,sockets,arp,recvfrom,Python,Sockets,Arp,Recvfrom,我需要“在一个程序中发送和接收ARP数据包”。我知道scapy包已经做得很好了,您只需要传递一些参数。然而,我想知道的远不止是通过争论。所以,如果你推荐scapy作为答案,可能没有帮助 代码 站台: 操作系统:Linux Ubuntn 16.04 解释器:Python 3.5.2 嗯,你的问题是什么^^我的代码不能满足我接收ARP重播数据包的需要。你知道为什么吗?什么对斯卡皮不利?你可以在一行中完成。或者你这样做是为了教育目的?事实上,我个人也想知道如何使用原始套接字来完成它。嗯,你的问题是什

我需要“在一个程序中发送和接收
ARP
数据包”。我知道
scapy
包已经做得很好了,您只需要传递一些参数。然而,我想知道的远不止是通过争论。所以,如果你推荐
scapy
作为答案,可能没有帮助

代码

站台: 操作系统:Linux Ubuntn 16.04

解释器:Python 3.5.2


嗯,你的问题是什么^^我的代码不能满足我接收ARP重播数据包的需要。你知道为什么吗?什么对斯卡皮不利?你可以在一行中完成。或者你这样做是为了教育目的?事实上,我个人也想知道如何使用原始套接字来完成它。嗯,你的问题是什么^^我的代码不能满足我接收ARP重播数据包的需要。你知道为什么吗?什么对斯卡皮不利?你可以在一行中完成。或者你这样做是为了教育目的?事实上,我个人也想知道如何使用原始套接字来完成它。
python
import struct
import socket
import binascii

rawSocket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW,
                          socket.htons(0x0003))
rawSocket.bind(("wlp5s0", socket.htons(0x0003)))

source_mac = binascii.unhexlify('00:A0:C9:14:C8:29'.replace(':', ''))
#b'\x00\x00\x00\x00\x00\x00' sender mac address
dest_mac = binascii.unhexlify('ff:ff:ff:ff:ff:ff'.replace(':', ''))
#  b'\xff\xff\xff\xff\xff\xff'  target mac address

source_ip = "192.168.100.3"  # sender ip address
dest_ip = "192.168.100.1"  # target ip address

# Ethernet Header
protocol = 0x0806  # 0x0806 for ARP
eth_hdr = struct.pack("!6s6sH", dest_mac, source_mac, protocol)

# ARP header
htype = 1  # Hardware_type ethernet
ptype = 0x0800  # Protocol type TCP
hlen = 6  # Hardware address Len
plen = 4  # Protocol addr. len
operation = 1  # 1=request/2=reply
src_ip = socket.inet_aton(source_ip)
dst_ip = socket.inet_aton(dest_ip)
arp_hdr = struct.pack("!HHBBH6s4s6s4s", htype, ptype, hlen, plen, operation,
                      source_mac, src_ip, dest_mac, dst_ip)

packet = eth_hdr + arp_hdr
rawSocket.send(packet)
rawSocket.recvfrom(65535)
```
By the way I can clear see the packet already send and reply but `Wireshark`