не может принимать широковещательные пакеты UDP - PullRequest
0 голосов
/ 11 июня 2010

У меня есть 2 коробки: - встроенное устройство (ARM Omap с linux), которое я назову " Omap ".- ПК (может быть Windows или Linux).

Сценарий 1

Оба блока находятся в одной сети (пример: мой офис).Omap получает свой адрес от сервера DHCP (например: 192.168.10.110).У ПК всегда один и тот же адрес (например, 192.168.10.104).Я могу успешно обмениваться широковещательными пакетами UDP на любом порту.Успех.

Сценарий 2

2 блока находятся в сети с OUT DHCP-сервером.ПК имеет статический IP-адрес (пример: 10.10.10.20).Omap загружается, ищет DHCP-сервер, не находит его и находится в состоянии, которое я называю «неверный IP-адрес».Теперь ... Широковещательные UDP-пакеты от Omap работают: ПК их видит.Обратное не работает: UDP-пакеты, транслируемые ПК, не видны Omap.Я использую Wireshark на другом ПК, чтобы убедиться, что пакеты отправляются.Провал.

Я пытался изменить IP-адрес Omap (с помощью ifconfig) ... не повезло.

Что мне не хватает?

Чтобы завершить картину, когда Omapв сценарии 2, если я запускаю udhcpc ... он может связаться с сервером DHCP и получить IP-адрес.Я также вижу пакеты с Wireshark.Это означает, что клиент DHCP может транслировать пакеты UDP.(Да, я пытался использовать DHCP-порты 67/68, но он не работает).

Я использую UDP-сокеты Boost C ++ Asio.В частности, я взял многоадресные примеры и заменил их на вещание.

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

Спасибо, Бенедетто

PS: Некоторые пояснения.

Устройство Omap является встроенным устройством, и моя цель состоит в том, чтобы клиент не должен был устанавливать его IP-адрес в поле.Вот почему я обмениваюсь широковещательными пакетами с ПК, чтобы получить «хороший» IP-адрес от моего другого программного обеспечения, работающего на ПК (который знает текущую подсеть, даже в сети со статическими IP-адресами и без DHCP-сервера).

По сути, я реализовал очень простой протокол DHCP.ПК может прослушивать пакеты, передаваемые Omap, но не наоборот.

Ответы [ 2 ]

0 голосов
/ 12 июня 2010

Если вы установите IP-адрес с помощью ifconfig, этого, вероятно, будет недостаточно.Обычно вы также должны настроить таблицу маршрутизации, которая обычно состоит из добавления двух маршрутов: один говорит, что «эта сеть подключена в eth0», а другой - «это шлюз по умолчанию».(Последнее не является обязательным требованием.)

«Сеть недоступна» - я предполагаю, что вы пытались пропинговать ПК из OMap?Если ваш ПК был 192.something.something.something, а у вашего «OMap» есть таблица маршрутизации, ваш комментарий:

Destination  Gateway  Genmask    Flags  MSS  Window  irtt  Iface
10.0.0.0     *        255.0.0.0  U      0    0       0     eth0

... тогда он не сможет отправлять.Эта таблица маршрутизации будет работать, только если вы попытаетесь отправить вещи на 10.something: это единственный маршрут, который он знает.Если вы не используете сеть 10.0.0.0/8, то этот маршрут неправильный.

Если вы хотите это сделать, посмотрите материал по таблицам маршрутизации, IP-адресам и т. Д.Хотя, если вы хотите, чтобы обычный человек «подключил его» - он будет использовать DHCP - что в этом плохого?Вы не можете просто выбрать IP-адрес в сети без какой-либо формы посредничества: либо человек выступает посредником и устанавливает его вручную, либо вы используете что-то вроде сервера DHCP.В противном случае вы могли бы выбрать чужой адрес.Кроме того, вам нужно знать, подключены ли вы к сети 10.0.0.0/8, сети 192.168.0-255.0/8, к какой-либо другой локальной сети или к Интернету ... что-то, что DHCP делает для вас ...

0 голосов
/ 11 июня 2010

Несколько мыслей ...

1) ifconfig eth0 - Интерфейс работает, есть ли у него IP-адрес, подходящая маска сети и т. Д.?

2) Маршрутизация -Это настроено правильно?(Netstat -r или route) (Это может быть проблемой, если IP-адреса находятся в разных не маршрутизированных подсетях, в зависимости от маски сети.)

3) Брандмауэр - я не могу сказать, скольковремя я столкнулся с проблемами брандмауэра.Убедитесь, что его там не останавливают.

4) Попробуйте tcpdump напрямую на соответствующих системах - что он показывает?Что проходит?

5) Можно ли пинговать с одной системы на другую?(У ICMP могут быть другие правила, чем у UDP.)

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

...