[...] Мне нужно получить MAC-адрес пункта назначения?
Нет, в большинстве случаев этого не должно быть.
От человека-странице raw(7)
(курсив мой):
Сырые сокеты позволяют новым IPv4 протоколы, которые будут реализованы в пользовательском пространстве. Сырой сокет получает или отправляет необработанную дейтаграмму , не включая заголовки уровня канала.
Это логично, потому что вы можете быть ping
-ную что-то не в той же подсети, в этом случае MAC-адрес будет МАС-адрес маршрутизатора.
Чтобы доказать это, here - это исходный код для старой версии BSD ping
- первый, который я нашел в Google. Обратите внимание, что он не пытается найти MAC-адрес назначения.
Обратите внимание, что некоторые программы UNIX ping
выполняют всевозможные забавные вещи. Некоторые версии, например, позволяют вам обманывать исходящий IP-адрес источника. Некоторые версии включают функциональность arping
. В этих случаях они будут вводить вещи на более низком уровне (на уровне ссылки), и в этом случае вам понадобятся исходные заголовки.
Рекомендация: получить исходный код 'coreutils' и посмотреть' ping'. https://www.gnu.org/software/coreutils/ – HuStmpHrrr
@HuStmpHrrr: 'ping' не находится в [coreutils] (http://en.wikipedia.org/wiki/GNU_Core_Utilities). – indiv