Разрешить MAC-адрес по имени хоста

1

Я написал несколько скриптов perl во время моей стажировки, и я хотел бы упростить их использование. Сценарии спрашивают в arg, адрес mac и возвращает, какой коммутатор подключен, скорость... и т.д. Вместо того, чтобы указывать адрес mac, я бы хотел указать имя компьютера. Итак, как я могу разрешить имя хоста для MAC-адреса?
Спасибо, пока.

Изменить → Решение может быть: bash команда или perl-модуль или что-то такое мощное...

  • 0
    Какова область действия этого сценария? Насколько велика сеть, хосты и коммутаторы? Вы получаете доступ к информации о коммутаторе, поэтому вы являетесь сетевым администратором?
  • 0
    @MattH: этот скрипт локализует MAC-адрес в компании. Сеть насчитывает около 20 коммутаторов Cisco (в основном 2960) и около 500 компьютеров, а может и больше. Я не админ, я здесь для стажировки, я прошу информацию о переключателях в SNMP (с Perl). Чтобы упростить сценарий для других, я написал CGI для отображения в браузере и хотел бы ввести имя ПК вместо mac-адреса.
Показать ещё 3 комментария
Теги:
ip
hostname
mac-address

2 ответа

2
Лучший ответ

Помогает ли это?

[mpenning@Bucksnort ~]$ arp -an
? (4.121.8.3) at 08:00:27:f5:5b:6b [ether] on eth0
? (4.121.8.4) at 08:00:27:f5:5b:6b [ether] on eth0
? (4.121.8.1) at 00:1b:53:6b:c9:c4 [ether] on eth0
[mpenning@Bucksnort ~]$

В python...

#!/usr/bin/env python
import subprocess
import re

def parse_arpline(line, hosts):
    match = re.search(r'\((\S+?)\)\s+at\s+(\S+)', line)
    if match is not None:
        ipaddr = match.group(1)
        mac = match.group(2)
        hosts.append((ipaddr, mac))
    return hosts

SUBNET = '192.168.1.0/24'  # Insert your subnet here
subprocess.Popen([r"nmap","-sP", SUBNET],stdout=subprocess.PIPE).communicate()
p = subprocess.Popen([r"arp","-an"],stdout=subprocess.PIPE).communicate()[0].split('\n')
hosts = []
ii = 0
for line in p:
    hosts = parse_arpline(line, hosts)
    ii +=1
# Iterate and do something with the hosts list
print hosts

в perl...

my $SUBNET = '192.168.1.0/24';  # Insert your subnet here
`nmap -sP $SUBNET`;
my $p = `arp -an`;
for my $line (split('\n', $p)) {
    $line=~/\((\S+?)\)\s+at\s+(\S+)/;
    $ipaddr = $1;
    $mac = $2;
    # do something with with each mac and ip address
}
  • 0
    @eouti, а команда arp не помогает для 500 компьютеров?
  • 6
    @eouti, у тебя странная манера общения с людьми, которые пытаются тебе помочь
Показать ещё 4 комментария
0

Файл ethers в системе UNIX отображает Ethernet-адрес на IP-номер (или имя хоста). Если ваш /etc/ethers правильно поддерживается, вы можете найти его там.

  • 0
    Спасибо, но мой не поддерживается должным образом, пустой файл.
  • 0
    Это правильно поддерживается тогда.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню