Поиск хоста по MAC-адресу
Материал из Xgu.ru
- Автор: Игорь Чубин
- Короткий URL: Host_by_MAC
Поиск хоста по MAC адресу — задача поиска коммутатора и порта, к которому подключено сетевое устройство, MAC-адрес которого известен. Решение для управляемых коммутаторов описано ниже (не описано, а может быть будет описано когда-нибудь, а сейчас ниже просто его черновики).
Содержание |
[править] Задача
Необходимо по известному MAC-адресу хоста идентифицировать хост. Решение задачи в лоб, т.е. ведение базы данных MAC-адресов компьютеров сети вручную, не всегда эффективно (MAC-адрес может быть изменён, может использоваться гостевой компьютер и т.д.) и достаточно громоздко, поскольку требует сопровождения базы.
Для управляемых коммутаторов существует более простое и элегантное решение: узнать у самого коммутатора к какому его порту подключён хост с известным MAC-адресом.
Другая задача, которая имеет непосредственное отношение к этой — раздача DHCP-сервером IP-адресов основываясь на номерах портов коммутатора, к которым подключены хосты.
Поиск порта коммутатора: http://www.cisco.com/en/US/tech/tk648/tk362/technologies_tech_note09186a00801c9199.shtml
Можно находить хост даже в том случае, если он изменил MAC-адреса сетевой карты. Поиск порта коммутатора
После того как MAC-адрес устройства, выполнившего подмену известен, необходимо найти, сетевой карте какого компьютера он принадлежит.
Если база данных MAC-адресов сетевых карт не ведётся, простейший способ найти сетевую карту — опросить коммутатор. В том случае, если существует база данных MAC-адресов сетевых карт, с информацией о том, к какому порту коммутатора они подключены, можно попробовать найти сетевую карту с её помощью. Однако, MAC-адрес устройства могу быть подменён, и тогда поиск по базе данных не увенчается успехом. В этом случае также может помочь опрос коммутатора.
[править] Таблица MAC-адресов на коммутаторе
Точнее, они предоставляют две таблицы соответствия: таблицу соответствия MAC-адресов определённому числу-идентификатору и таблицу соответствия портов коммутатора этому же числу-идентификатору. После того как обе таблицы известны, достаточно их сопоставить, и определить, какому порту соответствует какой MAC-адрес.
собственно таблицы соответствия
Может быть и такое, что ни один MAC-адрес не соответствует порту, даже если к порту и подключён компьютер – это может произойти в том случае, если компьютер давно не отправлял пакеты, и информация о нём уже удалена из памяти коммутатора. По этой же причине, описываемый метод может не найти компьютер с определённым адресом.
Может быть и наоборот – одному порту соответствует множество адресов. Такая ситуация возможна в том случае, когда к порту подключён не один компьютер, а множество – через другой коммутатор или хаб.
Если коммутатор не один, и все они управляемые, то можно опросить все коммутаторы, и определить точно, какой порт какого коммутатора находится наиболее близко к искомой сетевой карте.
[править] Обнаружение новых хостов
В закрытых сетях, где новые сетевые устройства появляются редко, может иметь смысл задача автоматического обнаружения новых хостов в сети. Как только в сети появилось устройство с неизвестным MAC-адресом, администратору отправляется оповещение, содержащее максимум информации об устройстве.
Программа arpwatch ведет собственную базу данных MAC-адресов, и она самостоятельно может обнаруживать появление новых компьютеров. Однако, в том случае, если в сети работает несколько систем arpwatch одновременно, каждая из них будет заново обнаруживать хост с новым MAC-адресом, даже если остальные системы его уже обнаружили ранее.
про централизованную БД
Далее администратор решает, что делать с этим устройством. В том случае, если устройство появилось в сети законно, администратор может подтвердить его появление, что предотвратит появление новых сообщений, при повторном обнаружении устройства другими инсталляциями arpwatch.
Очевидно, метод будет работать и в том случае, если устройство просто изменило MAC-адрес на новый, отсутствовавший в сети ранее.
/usr/local/bin/syslog-ng-arpwatch
<sh/>
- !/bin/sh
PATH=$PATH:/usr/local/bin
while read line do mac="$(echo $line | grep 'changed ethernet address' | awk '{print $10}')" [ -z "$mac"] && continue ( echo POSSIBLY ARP-SPOOFING FROM:; mac2port | grep "$mac" )| logger -t arp-spoofing done
Скрипт, который автоматически выключает порт коммутатора:
#!/bin/sh PATH=$PATH:/usr/local/bin shutport () { INT=$1; SWITCH=192.168.15.99; PASSWORD=procurve; ( sleep 5; echo ${PASSWORD}; sleep 1; echo; sleep 1; echo conf; sleep 1; echo int $INT disable; sleep 1; echo end; sleep 1; echo exit; sleep 1; echo exit; sleep 1; echo y ) | socat - EXEC:"ssh ${SWITCH}",setsid,pty,ctty } main() { while read line do mac="$(echo $line | egrep 'changed ethernet address|reused old ethernet address' | awk '{print $10}')" [ -z "$mac"] && continue port_line="$(mac2port | grep "$mac" )" port=$(echo $port_line | sed "s/.*->//") echo POSSIBLY ARP-SPOOFING FROM: $port_line | logger -t arp-spoofing shutport $port done } main
<perl/>
- !/usr/bin/perl
our $community = "public"; our $switch = "192.168.15.100";
open(SNMP,"snmpwalk -On -OQ -v2c -c $community $switch .1.3.6.1.2.1.17.4.3.1.1|")
or die "Can't run snmpwalk";
while (<SNMP>) {
chomp; s@.1.3.6.1.2.1.17.4.3.1.1@@; my ($oid, $mac) = split /=\s*/;
$_=$mac; s@"@@g; s@\s*$@@; s@ @:@g; s@(.)@\l\1@g; s@^0@@; s@:0@:@g; $mac_table{$_}=$oid;
} close(SNMP);
open(SNMP,"snmpwalk -On -OQ -v2c -c $community $switch .1.3.6.1.2.1.17.4.3.1.2|")
or die "Can't run snmpwalk";
while (<SNMP>) {
chomp; s@.1.3.6.1.2.1.17.4.3.1.2@@; my ($oid, $port) = split /=/; $ports_table{$oid}=$port;
} close(SNMP);
for $oid (keys %mac_table) {
print "$oid -> ".$ports_table{$mac_table{$oid}}."\n";
}
[править] OID таблицы MAC-адресов в разных коммутаторах
У других коммутаторов MAC-адреса хранятся в других местах дерева OID.
Для коммутаторов Asotel:
.1.3.6.1.4.1.655.5.5.1.4.1.1.1.2 .1.3.6.1.4.1.655.5.21.1.4.1.1.1.2
[править] См. также
- Получаем списки MAC-адресов на портах управляемых свичей в Zabbix
- Использование SNMP для поиска номера порта по MAC-адресу на коммутаторах Cisco Catalyst (Using SNMP to Find a Port Number from a MAC Address on a Catalyst Switch) - http://www.cisco.com/en/US/tech/tk648/tk362/technologies_tech_note09186a00801c9199.shtml (англ.)