2013-11-22 4 views
0

Я изучаю программирование сокетов rawatalink на Linux, и я нашел их полезными examples. Я скомпилировал icmp4_ll.c и использовал его для отправки ICMP-пакета на компьютер-пыльник в той же локальной сети. Я могу получить ответ с конечного компьютера. Тем не менее, когда я использовал его для отправки ICMP-пакета на локальный компьютер, то есть я установил MAC-адрес и IP-адрес Ethernet и IP-адреса Ethernet в адрес MAC и IP-адреса eth0, я не могу получить ответ ICMP на eth0 или lo interface (В Wireshark я заметил только ICMP-запрос, отправленный по eth0, но не ответил ICMP на любой интерфейс.) Я думаю, что сообщение запроса ICMP составлено правильно (иначе удаленное назначение не ответит). Но я не знаю, почему ОС просто не отвечает на запрос. Любая помощь или намеки приветствуются.отправить и принять ICMP с datalink raw socket через локальный интерфейс

+0

Если вы не получили ответа, запрос эха либо неверен, либо что-то блокирует ответ в другом месте. – nos

+0

Я думал об этой возможности, но когда одна и та же программа используется для отправки ICMP-запроса на удаленный компьютер, я могу видеть форму ответа на удаленном компьютере. Ответ отсутствует, только когда программа используется для отправки запроса в локальный интерфейс. – user2975098

ответ

0

RFC 792 определены специальные условия для сообщений ICMP:

  • Сообщения об ошибках Нет ICMP посылаются в ответ на сообщения об ошибках ICMP, чтобы избежать бесконечного повторения.

  • Для фрагментированных IP-дейтаграмм сообщения ICMP отправляются только для ошибок на фрагментированном нуле (первый фрагмент).

  • Сообщения об ошибках ICMP никогда не отправляются в ответ на дейтаграмму, предназначенную для широковещательного или многоадресного адреса.

  • Сообщения об ошибках ICMP никогда не отправляются в ответ на дейтаграмму, отправленную как широковещательный канал связи.

  • сообщения об ошибках ICMP никогда не посылаются в ответ на дейтаграмму, чей адрес источника не представляет собой уникальный хост (адрес источника не может быть ноль, циклический адрес, широковещательный адрес или групповой адрес).

  • Сообщения об ошибках ICMP никогда не отправляются в ответ на сообщение IGMP любого типа. Когда принимается сообщение ICMP неизвестного типа, оно должно быть отброшено без предупреждения .

маршрутизаторы почти всегда генерируют сообщения ICMP, но когда дело доходит до узла назначения, количество сообщений ICMP генерируется, зависит от реализации.