У меня машина с 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-запроса?
- тот факт, что шлюз игнорирует соединение, потому что он не распознает источник с правильным поведением (я иду с поведением де-факто, так как спецификация неясна в этом вопросе)?