[英]ARP request without reply raw sockets python
我試圖在發送 ARP 請求后獲得 arp 回復,但沒有收到回復。
我查看了 wireshark 的結果,我認為他向.network 廣播,但沒有回復顯示...
在 wireshark 的結果中,發送方和接收方的 MAC 地址與真實的 MAC 地址不對應,我相信我沒有正確打包,但我不明白為什么。
需要幫忙...
#!/usr/bin/env python3
import struct
import socket
raw = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(0x0806))
raw.bind(("wlp3s0", socket.htons(0x0806)))
mac_local = b"ff:ff:ff:ff:ff:ff" # mac de quem envia request
ip_local = "192.168.1.7" # ip de quem envia request
mac_dest = b"00:00:00:00:00:00" # mac de quem recebe request
ip_dest = "192.168.1.2" # ip de quem recebe request
# Ethernet Header
protocol = 0x0806 # 0x0806 protocol to ARP
ethernet_header = struct.pack("!6s6sH", mac_dest, mac_local, protocol)
# ARP header
type_hardware = 1
type_protocol = 0x0800 # IPV4
size_addr_hardware = 6 # Refere ao tamanho do endereço do MAC que é
48 bits == 6 bytes
size_addr_protocol = 4 # Refere ao tamanho do endereço do ipv4 que é
32 bits == 4 bytes
operation = 1 # 1 = request / 2 = Reply
source_ip = socket.inet_aton(ip_local)
dest_ip = socket.inet_aton(ip_dest)
arp_addr = struct.pack("!HHBBH6s4s6s4s", type_hardware, type_protocol,
size_addr_hardware, size_addr_protocol, operation,
mac_local, source_ip, mac_dest, dest_ip)
pkt = ethernet_header + arp_addr
cont = 0
while cont < 6:
raw.send(pkt)
cont +=1
mac_dest
和mac_local
絕對不正確。 您剛剛使用ASCII值創建了一個字節字符串。 這些每個都是17字節長。 而且,您只需要為每個地址獲取這17個字節中的前6個字節。
它們應該是這樣的:
mac_dest = b'\x00\x00\x00\x00\x00\x00'
mac_local = b'\xff\xff\xff\xff\xff\xff'
檢查struct.pack
調用之前字節字符串的長度是否正好是六個字節。
另外,不確定您要做什么,但是我懷疑使用全零硬件地址作為目標地址是否有意義。 可以肯定的是沒有人會收到它,因為它將是單播到一個沒有人的地址。 相反可能會有所幫助( 從全零發送到廣播地址)-我認為這是ARP探針的標准。
我對接受的答案感到困惑。
MAC 00:00:00: 00:00:00 不是 XEROX 的有效 MAC 嗎?
https://hwaddress.com/company/xerox-corporation/
當我看到使用 wireshark 捕獲的 ARP 請求時
那么請求中的 mac 地址總是像
MAC_DST: FF:FF:FF:FF:FF:FF //mac broadcast
MAC_SRC: MAC-address of requester
回復的mac地址將是
MAC_DST: MAC-adress of requester
MAC_SRC: MAC-address of replier
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.