用Python回答问题取决于您的平台。我没有Windows,因此以下解决方案可在我写过的Linux机器上使用。对正则表达式进行小的更改将使其在OS
X中运行。
首先,您必须ping通目标。这将把目标(只要它在您的网络掩码之内,这听起来像是在这种情况下)就放置在系统的ARP缓存中。观察:
13:40 jsmith@undertow% ping 97.107.138.15PING 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^C13:40 jsmith@undertow% arp -n 97.107.138.15Address HWtype HWaddressFlags Mask Iface97.107.138.15 ether fe:fd:61:6b:8a:0f C eth0
知道这一点,您就做了一点子处理的魔术-否则您自己编写了ARP缓存检查代码,而您不想这样做:
>>> 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-fd]{1,2}:){5}[a-fd]{1,2})", s).groups()[0]>>> mac"fe:fd:61:6b:8a:0f"
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)