Нет ответа ARP от шлюза

Я разрабатываю встраиваемую систему, которая должна взаимодействовать с внешним миром через Ethernet 10Base-T. Я построил все функции, необходимые для обслуживания веб-страниц, включая ARP, IP, TCP, ICMP (ping), HTTP и части FTP. Теперь мне нужно собрать остальную часть кода, который позволит мне действовать как клиент. Все вышеупомянутые протоколы работали хорошо с точки зрения сервера в течение нескольких месяцев.

Теперь мне нужно собрать клиентскую половину этих протоколов, чтобы запрашивать данные с других серверов. Шаг 1 - ARP для аппаратного адреса удаленного сервера. Насколько я понимаю, поскольку сервер находится в другой сети, мой шлюз должен ответить своим MAC-адресом, чтобы я знал, что все пакеты, предназначенные для этого IP, должны быть переданы моему шлюзу. Вот проблема:

Мое устройство (192.168.1.251, в маске подсети 255.255.255.0) не получает ответ ARP от моего шлюза (192.168.1.1) или любого компьютера вне сети. Однако мое устройство (X.251) действительно получает ответ ARP от моего ноутбука (192.168.1.100), который находится под тем же маршрутизатором.

Я уверен, что моя базовая структура кадра ARP ethernet правильная, потому что я каждый раз правильно отвечаю на запросы ARP. Разница заключается в поле ОПЕРАЦИЯ, которое равно 1 или 2, в зависимости от ЗАПРОСА или ОТВЕТА.


Вот запрос моего устройства (192.168.1.251) к шлюзу (192.168.1.1), который не получает ответа:

FF FF FF FF FF FF <- MAC назначения - широковещательная передача (также пробовал 0x00)

00 04 A3 7F C1 57 <- источник MAC - мое устройство

08 06 <- ARP

00 01 <- ethernet

08 00 <- IP

06 <- 6-байтовые MAC-адреса

04 <- 4-байтовые IP-адреса

00 01 <- запрос (2 = ответ)

00 04 A3 7F C1 57 <- отправитель MAC - мой

C0 A8 01 FB <- IP отправителя - мой = 192.168.1.251

00 00 00 00 00 00 <- целевой MAC - неизвестно, причина запроса

C0 A8 01 01 <- целевой IP - шлюз = 192.168.1.1

00 00 00 00..... 00 00 00 <- трейлер из 18 комплектов 00 для набивки


Теперь запрос моего устройства (192.168.1.251) практически идентичен запросу моего ноутбука (192.168.1.100), который получает действительный ответ:

FF FF FF FF FF FF <- MAC назначения - широковещательная передача (также пробовал 0x00)

00 04 A3 7F C1 57 <- источник MAC - мое устройство

08 06 <- ARP

00 01 <- ethernet

08 00 <- IP

06 <- 6-байтовые MAC-адреса

04 <- 4-байтовые IP-адреса

00 01 <- запрос (2 = ответ)

00 04 A3 7F C1 57 <- отправитель MAC - мой

C0 A8 01 FB <- IP отправителя - мой = 192.168.1.251

00 00 00 00 00 00 <- целевой MAC - неизвестно, причина запроса

C0 A8 01 64 <- целевой IP - ноутбук = 192.168.1.100

00 00 00 00..... 00 00 00 <- трейлер из 18 комплектов 00 для набивки


Дополнительные примечания, которые могут или не могут быть важными:

  • И мое устройство, и шлюз отображаются в таблице ARP моего ноутбука.
  • Мой ноутбук работает под управлением Win7.
  • Мой шлюз - это широкополосный маршрутизатор Linksys WRT54GL Wireless-G.
  • Я проанализировал пакеты через Wireshark, чтобы предоставить результаты выше.
  • Мой блок DHCP охватывает X.100 до X.149, поэтому мой ноутбук назначен маршрутизатором X.100
  • IP-адрес моего устройства X.251 жестко запрограммирован в устройстве. Я не вижу способа установить связь между этим IP-адресом и MAC-адресом моего устройства в приложении конфигурации маршрутизатора. Все остальные функции работают с моим устройством как сервером, поэтому я полагаю, что это не проблема.
  • Я попытался отправить запрос ARP для удаленных серверов (google = 173.194.43.33) как непосредственно на IP-адрес сервера, так и на IP-адрес моего шлюза (надеясь, что он поймет, что ему нужен прокси-сервер).
  • Я пытался ударить головой о стол, что, к сожалению, немного помогло.

2 ответа

Если я не ошибаюсь, вы публикуете свой запрос ARP в своем блокноте, который не может отвечать на этот запрос ARP. Обычно каждое устройство отвечает только за себя. Попробуйте ввести целевой IP 192.168.1.1 для вашего роутера. Это должно работать.

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

Я бы попытался решить эту проблему следующим образом:

Используя такой инструмент, как scapy, создайте ARP-запрос с вашего ноутбука, запрашивающего MAC шлюза, и отправьте его на широковещательный MAC. Посмотрите, есть ли ответ на запрос.

Затем создайте запрос ARP на своем ноутбуке, используя scapy, но установите MAC-адрес источника равным MAC-адресу вашего устройства и отправьте запрос на широковещательный MAC-адрес для MAC-адреса шлюза. По сути, это имитация отправки вашего устройства на вашем ноутбуке. Если вы можете временно изменить mac вашего ноутбука на MAC вашего устройства, вы должны получить ответ на своем ноутбуке.

Если вышеуказанный шаг работает правильно, то вы смоделировали точное поведение вашего устройства на вашем ноутбуке, и фактическое устройство также будет работать правильно.

Другие вопросы по тегам