2016-06-14 4 views
3

次のコードは私のためだけにローカルで動作します。私は別のプログラムで同じマシンで受け取ることができます。 wiresharkのトラフィックは見えません(Windowsの場合)。 10.10.10.10のような既存のアドレスにマルチキャストアドレスを変更すると、wiresharkにUDPパケットが表示されます。DatagramSocketがマルチキャストアドレスを持つネットワーク経由で送信しないのはなぜですか?

私は== 5353 udp.portフィルタを使用するのwiresharkで

私は私の事私のwiresharkの設定が正しいことをマルチキャストアドレスに他のいくつかのパケットを見ることができます。

ファイアウォールは無効です。

public static void main(String[] args) throws Exception { 
    byte[] buf = "some data".getBytes(); 
    DatagramSocket socket = new DatagramSocket(); 
    InetAddress address = InetAddress.getByName("224.0.0.251"); 
    socket.send(new DatagramPacket(buf, buf.length, address, 5353)); 
} 

EDIT:ループバックアダプター(Microsoft LoopbackadapterfürKM-TEST)のようです。ループバック・アダプターを取り外すと、それは機能します。別のシステムには、同等の問題を引き起こすVMwareアダプタがあります。

パケットがすべてのネットワークアダプタに送信されないのはなぜですか?正しいアダプタに送るにはどうすればいいですか?

+1

ネットワーク設定は何ですか?ネットマスクとは何ですか? –

+0

@BoristheSpider私の編集を参照してください。 – Horcrux7

答えて

1

ユニキャストデータグラムを送信するとき、ルーティングテーブルはパケットを送信するために使用されるネットワークインターフェイスを指定します。マルチキャストの場合は、インターフェイスを指定する必要があります。あなたはMulticastSocketでそれを行うことができます。

あなたが送信するインターフェイスのIPは、あなたが次のことを行うだろう、10.10.10.1であると仮定すると:

public static void main(String[] args) throws Exception { 
    byte[] buf = "some data".getBytes(); 
    MulticastSocket socket = new MulticastSocket(); 
    socket.setNetworkInterface(NetworkInterface.getByInetAddress(
           InetAddress.getByName("10.10.10.1"))); 
    InetAddress address = InetAddress.getByName("224.0.0.251"); 
    socket.send(new DatagramPacket(buf, buf.length, address, 5353)); 
} 
+0

マルチキャストアドレスの範囲へのデフォルトルートでない場合は、インターフェイスを指定する必要があります。 – EJP

+0

@EJPマルチキャストの場合、通常はデフォルトルートはありません。 – Horcrux7

+0

@dbushありがとう、私は今それをすべての有効なネットワークインターフェイスに送信し、それが動作します。 – Horcrux7

1

224.0.0/24 reservedある:

ローカルネットワーク制御ブロック(224.0.0/24)ローカルネットワーク制御ブロックで

アドレスがされていないプロトコル 制御トラフィックのために使用されますリンクから転送されます。

あなたはそれを使用することはできません。

+0

はい、これはマルチキャストアドレスの範囲です。 – Horcrux7

+1

@ Horcrux7いいえ、これはマルチキャストアドレスのローカルネットワーク制御ブロック*サブ*範囲の範囲です。 – EJP

1

@EJPは正しいです。そのアドレスをマルチキャストアドレスとして使用することはできません。

224.0.0.0と224.0.0.255、までの間のアドレスの範囲は、 は、ゲートウェイ発見 とグループメンバーシップなどのルーティングプロトコルおよび他の低レベル トポロジー発見または保守プロトコルの使用のために予約されています報告。 マルチキャストルータは、 この範囲内の宛先アドレスを持つマルチキャストデータグラム(そのTTLに関係なく)を に転送しないでください。

出典:IANA - つまりIPv4 Multicast Address Space Registry

、選択したマルチキャストアドレスないはず仕事、それはマルチキャストアドレスの範囲内にあるにもかかわらず。

+0

マルチキャストDNSのアドレスです。しかし、これは別の話題であり、問​​題には関係しません。https://en.wikipedia.org/wiki/Multicast_DNS – Horcrux7

+1

@ Horcrux7 RFCに対してウィキペディアを引用することはできません。そして、[Wikipediaは信頼できるリソースではありません](https://en.m.wikipedia.org/wiki/Wikipedia:Wikipedia_is_not_a_reliable_source)。 mDNSを使用しようとしている場合は、MACアドレスを設定する方法を理解する必要があります.MacアドレスはJavaではできません。 – EJP

+0

@EJPあなたはMACアドレスの設定で何を意味しますか?それは今働いている。 – Horcrux7

関連する問題