2015-02-10 3 views
2

Для запроса ICMP-запроса (эхо-запрос) мне нужно получить MAC-адрес получателя? Я пытаюсь узнать, как реализовать это в C, используя raw сокеты, но не могу понять, как получить MAC-адрес адресата.Отправка ICMP ping

Любая помощь приветствуется. Спасибо.

+1

Рекомендация: получить исходный код 'coreutils' и посмотреть' ping'. https://www.gnu.org/software/coreutils/ – HuStmpHrrr

+1

@HuStmpHrrr: 'ping' не находится в [coreutils] (http://en.wikipedia.org/wiki/GNU_Core_Utilities). – indiv

ответ

3

[...] Мне нужно получить MAC-адрес пункта назначения?

Нет, в большинстве случаев этого не должно быть.

От человека-странице raw(7) (курсив мой):

Сырые сокеты позволяют новым IPv4 протоколы, которые будут реализованы в пользовательском пространстве. Сырой сокет получает или отправляет необработанную дейтаграмму , не включая заголовки уровня канала.

Это логично, потому что вы можете быть ping -ную что-то не в той же подсети, в этом случае MAC-адрес будет МАС-адрес маршрутизатора.

Чтобы доказать это, here - это исходный код для старой версии BSD ping - первый, который я нашел в Google. Обратите внимание, что он не пытается найти MAC-адрес назначения.

Обратите внимание, что некоторые программы UNIX ping выполняют всевозможные забавные вещи. Некоторые версии, например, позволяют вам обманывать исходящий IP-адрес источника. Некоторые версии включают функциональность arping. В этих случаях они будут вводить вещи на более низком уровне (на уровне ссылки), и в этом случае вам понадобятся исходные заголовки.

+0

Мне нужно получить MAC-адрес маршрутизатора, который является местом назначения в этом случае (следующий переход). – Novak007

+0

@ Novak007, вам не нужно это делать, если вы не * не * используете сырые сокеты, а используете необработанные пакеты ethernet. Если вы используете сырые сокеты, то ОС будет работать для вас. – abligh

+0

Как ответ предполагает, что ARP позаботится о MAC-адресе назначения. Если вы используете сырые сокеты, и ОС будет использовать MAC-адрес назначенного адреса для вашего Ethernet-заголовка – cmidi

Смежные вопросы