Để trả lời câu hỏi bằng Python phụ thuộc vào nền tảng của bạn. Tôi không có Windows tiện dụng, do đó, các giải pháp sau đây hoạt động trên hộp Linux tôi đã viết nó trên. Một thay đổi nhỏ đối với cụm từ thông dụng sẽ làm cho nó hoạt động trong OS X.
Trước tiên, bạn phải ping mục tiêu. Điều đó sẽ đặt mục tiêu - miễn là nó nằm trong mặt nạ mạng của bạn, nó giống như trong tình huống này, nó sẽ nằm trong bộ nhớ cache ARP của hệ thống của bạn. Quan sát:
13:40 [email protected]% ping 97.107.138.15
PING 97.107.138.15 (97.107.138.15) 56(84) bytes of data.
64 bytes from 97.107.138.15: icmp_seq=1 ttl=64 time=1.25 ms
^C
13:40 [email protected]% arp -n 97.107.138.15
Address HWtype HWaddress Flags Mask Iface
97.107.138.15 ether fe:fd:61:6b:8a:0f C eth0
Biết rằng, bạn làm một chút subprocess kỳ diệu - nếu bạn đang viết ARP cache kiểm tra mã bản thân, và bạn không muốn làm điều đó:
>>> from subprocess import Popen, PIPE
>>> import re
>>> IP = "1.2.3.4"
>>> # do_ping(IP)
>>> # The time between ping and arp check must be small, as ARP may not cache long
>>> pid = Popen(["arp", "-n", IP], stdout=PIPE)
>>> s = pid.communicate()[0]
>>> mac = re.search(r"(([a-f\d]{1,2}\:){5}[a-f\d]{1,2})", s).groups()[0]
>>> mac
"fe:fd:61:6b:8a:0f"
Nguồn
2009-11-17 18:44:39
Anh ấy tránh ARP vô cớ, không kiểm tra nội dung trên máy cục bộ. Đọc kỹ câu hỏi: ** từ một thiết bị trên mạng cục bộ của tôi ** –