Как я могу извлечь MAC-адрес из ответа ICMP в C на Linux - PullRequest
4 голосов
/ 19 октября 2011

Я пытаюсь узнать MAC-адрес компьютера в коммутируемой среде после отправки ему необработанного пакета.Я пытаюсь реализовать команду traceroute.Я хочу знать, когда я получаю сообщение об превышении времени ICMP, как я могу извлечь MAC-адрес этой машины.Я новичок в сетевом программировании, поэтому запутался, какой вызов сокета поможет мне извлечь MAC-адрес.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 19 октября 2011

Нет, вы не можете извлечь MAC-адрес из ответа ICMP.

Вы можете только определять MAC-адреса связанных машин рядом с вами.В ICMP (tracert) вы можете просто узнать IP-адрес целевого или среднего компьютера.

Если вы хотите обнаруживать MAC-адреса, вы должны использовать протоколы ARP, если они применимы в локальных сетях, а не в Интернете.

Протокол ICMP запускается после заголовка IPv4 [ 1 ], а MAC-адреса связаны с физическим / канальным уровнем.На нижних уровнях MAC-адреса будут прозрачными от верхних уровней, таких как сеть (IP) или передача, ...

Для определения MAC-адресов следует использовать необработанные сокеты или PCAP SDK для доступа к нижним уровням сетевого программирования.(Еще раз говорю, они бесполезны через Интернет)

0 голосов
/ 04 сентября 2015

Как правило, в Интернете вы даже не знаете, какой носитель используется хостом для передачи пакетов. Предположим, что удаленный хост подключен через последовательный канал rs-232-C с протоколом PPP. У него нет MAC-адреса. Это также происходит, например, если хост использует интерфейс Token Ring или Frame Relay. Это делает определение удаленных mac-адресов хостов полностью локальной проблемой. Обычно, когда вы получаете пакет с удаленного сайта через Ethernet, исходный MAC-адрес, который вы получаете в пакете, является одним из последних маршрутизаторов, которые связывают вас с Интернетом, а не тот из исходного хоста, который отправил пакет IP. В RFC по IP через птичьих носителей (rfc1149, rfc2549 и rfc6214) носитель, используемый для передачи, не позволяет использовать mac-адреса (адрес ссылки, если это возможно на пиджоне, может быть его именем)

Если вы хотите прочитать о traceroute в сети Ethernet-коммутаторов, возможно, вам пришлось взглянуть на IEEE802.1ag, в котором есть спецификация для трассировки по коммутаторам (служба tracelink), но я думаю, что это далеко выходит за рамки этого ответа.

0 голосов
/ 19 октября 2011

Как сказал Масуд М, вы можете получить только MAC-адрес компьютеров, которые находятся в вашей локальной сети.Тем не менее, вы можете проанализировать выходные данные команды arp, чтобы найти MAC-адрес по IP-адресу компьютера в вашей локальной сети.

...