Как я получаю MAC-адрес удаленного хоста на моей LAN? Я использую Python и Linux.
Можно попробовать выполнить команду arp -a
Вот несколько ссылок на захват адреса Mac (не протестировано)
В Linux/Unix, арпинг,
http://www.ibm.com/developerworks/aix/library/au-pythocli/
В Windows, используя IP Helper API по типу
] Много лет назад мне было поручено собрать различную информацию о машинах со всех машин на корпоративном кампусе. Желаемой частью информации был MAC-адрес, который трудно получить в сети, охватывающей несколько подсетей. В то время я использовал встроенную в Windows команду "nbtstat".[
] []Сегодня существует утилита Unix под названием "nbtscan", которая предоставляет похожую информацию. Если вы не хотите использовать внешнюю утилиту, может быть, существуют библиотеки NetBIOS для python, с помощью которых можно собрать информацию для вас?[
].вы можете использовать это на win32 или linux
import subprocess
import sys
remotehost="192.168.0.122"
cmd="arp -a"
p=subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
output, errors = p.communicate()
if output is not None :
if sys.platform in ['linux','linux2']:
for i in output.split("\n"):
if remotehost in i:
for j in i.split():
if ":" in j:
print "%s--> %s" % (remotehost,j)
elif sys.platform in ['win32']:
item = output.split("\n")[-2]
if remotehost in item:
print "%s--> %s" %(remotehost, item.split()[1])
NB:arp записи взорвутся через некоторое время, вам нужно "залить вашу сеть", например, ping, так что arp -a показывает ваш удаленный хост.
ARP-записи никогда не могут быть правы, я пытался пинговать хост несколько раз, но ARP -A не даст мне адрес Mac / Ethernet. (Не беспокойтесь с кодом Windows из активного состояния BTW)
Надежный путь на Linux (и * NIX) - использовать Arping или Sakpapy (см. http://en.wikipedia.org/wiki/arping ) а затем анализ вывода. Вот код, который я использовал. Вы должны быть root или использовать Sudo, чтобы запустить Arping.
cmd = '/sbin/arping -c 1 ' + remotehost
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
output, errors = p.communicate()
if output is not None :
mac_addr = re.findall(r'(\[.*\])', output)[0].replace('[', '').replace(']', '')