[英]How to use raw socket send and receive arp package in python
我需要“在一個程序中發送和接收ARP
數據包”。 我知道scapy
包已經很安靜了,你只需要傳遞一些參數。 但是,我想知道的不僅僅是傳遞參數。 所以,如果你推薦scapy
作為答案,它可能無濟於事。
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`
操作系統:Linux Ubuntu 16.04
口譯員:Python 3.5.2
進行綁定時,應將第二個參數設置為 0:rawSocket.bind(("wlp5s0", 0))
我能夠收到ARP數據包沒問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.