2012-02-15 43 views
0

我有具有2個IP地址的單個網絡適配器Windows XP機器(基本上有2個子網在相同的物理網絡上的):設置上的多播UDP數據報的源加入

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規範有點沉默),但是我看不出有什麼方法可以實際影響到目前爲止我看過的任何套接字API中的數據報的源IP。一切似乎都發生在網絡接口上,而不考慮使用的實際子網。

奇怪的是,似乎數據報上的源IP實際上被選爲最高IP號碼,我猜測它是可預測的,但並不完全直觀。所以這裏是我的問題:

  • 有什麼辦法在Java或任何本地Windows庫設置在IGMP請求的UDP數據報上的源IP?
  • 事實上,網關忽略了連接,因爲它不能識別源的正確行爲(我正在與事實上的行爲,因爲規範在這一點上是模糊的)?

回答

0

關於一個way to actually influence the source IP of the datagram

SocketOptions.setOption(IP_MULTICAST_IF,InetAddress類);

OR

MulticastSocket.setInterface(InetAddress類)