Установка источника дейтаграмм UDP для многоадресного соединения - PullRequest
0 голосов
/ 15 февраля 2012

У меня машина с Windows XP, имеющая один сетевой адаптер с 2 IP-адресами (в основном в одной физической сети есть 2 подсети):

IP-адрес 1: маска 1.51.1.2 255.255.0.0

IP-адрес 2: 1.162.1.2 маска 255.255.255.0

Шлюз по умолчанию: 1.51.1.1

Моему приложению, написанному на java, необходимо взаимодействовать с другими приложениями, используя многоадресную IP-рассылку.скажем IP 224.0.5.1.Однако это не работает как звук, поскольку я добавляю второй IP-адрес к сетевому адаптеру.Я покопался в старом добром Wireshark и пришел к выводу, что проблема в соединении с IGMP.Исходный IP-адрес дейтаграммы равен 1.51.1.2 в случае, если он работает, и 1.162.1.2, когда он не работает.Шлюз, являющийся маршрутизатором, похоже, игнорирует соединение, если источник не находится в той же подсети, в которой он настроен для работы.Вы могли бы сказать, что это несколько хорошо (хотя спецификация IGMP здесь немного молчит), но я не вижу никакого способа повлиять на исходный IP дейтаграммы ни в одном из многих API сокетов, на которые я смотрел до сих пор.Кажется, что все происходит на сетевом интерфейсе, безотносительно к фактической используемой подсети.

Также странным образом кажется, что исходный IP-адрес на дейтаграмме фактически выбран как самый высокий IP-номер, который, я полагаю, предсказуем, но неточно интуитивно понятноИтак, вот мои вопросы:

  • Есть ли какой-либо способ в Java или любой из собственных библиотек Windows, чтобы установить исходный IP на UDP-датаграмме IGMP-запроса?
  • тот факт, что шлюз игнорирует соединение, потому что он не распознает источник с правильным поведением (я иду с поведением де-факто, так как спецификация неясна в этом вопросе)?

1 Ответ

0 голосов
/ 11 марта 2012

О way to actually influence the source IP of the datagram:

SocketOptions.setOption (IP_MULTICAST_IF, InetAddress);

ИЛИ

MulticastSocket.setInterface (InetAddress)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...