没有回复原始套接字的 ARP 请求 python
ARP request without reply raw sockets python
我试图在发送 ARP 请求后得到一个 arp 回复,但没有收到回复。
我查看了 wireshark 的结果,我认为他向网络广播,但没有回复显示...
在 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
enter image description here
enter image description here
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
调用之前字节串的长度是否恰好是六个字节。
此外,不确定您要做什么,但我怀疑将全零硬件地址用作 目标 地址是否有意义。很确定没有人会收到它,因为它将是一个单播到一个没有人拥有的地址。相反可能会有帮助(发送到广播地址 from 全零)——我认为这是 ARP 探测的标准。
我对已接受的答案有些困惑。
MAC 00:00:00: 00:00:00 不是 XEROX 的有效 MAC 吗?
https://hwaddress.com/company/xerox-corporation/
当我看到 ARP-request 被 wireshark 捕获时
然后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
我试图在发送 ARP 请求后得到一个 arp 回复,但没有收到回复。
我查看了 wireshark 的结果,我认为他向网络广播,但没有回复显示...
在 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
enter image description here
enter image description here
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
调用之前字节串的长度是否恰好是六个字节。
此外,不确定您要做什么,但我怀疑将全零硬件地址用作 目标 地址是否有意义。很确定没有人会收到它,因为它将是一个单播到一个没有人拥有的地址。相反可能会有帮助(发送到广播地址 from 全零)——我认为这是 ARP 探测的标准。
我对已接受的答案有些困惑。
MAC 00:00:00: 00:00:00 不是 XEROX 的有效 MAC 吗?
https://hwaddress.com/company/xerox-corporation/
当我看到 ARP-request 被 wireshark 捕获时
然后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