2011-09-13 12 views
3

私はDatagramSocketでブロードキャストメッセージを受信しないようにする方法を探しています。実装は宛先アドレスを隠すように見えるので、フィルタとして使用することはできません。 setBroadcastを設定することは何もしないようです。Windows上のJavaでDatagramSocketを使用してブロードキャストされたUDPメッセージを無視する方法はありますか?

私はローカルIPアドレスにバインドされたソケットを持っていますが、それはまだサブネットからのすべてのブロードキャストメッセージを受信します。

InetAddress addr = InetAddress.getByName("1.2.3.4"); 
InetSocketAddress sockaddr = new InetSocketAddress(addr, 12345); 
DatagramSocket socket = new DatagramSocket(sockaddr); 

ブロードキャストメッセージをフィルタリングし、自分のIPに直接送信されるメッセージのみを受信する最も簡単な方法は何ですか?

EDIT:短い答えはノーです。この質問は、UDPメッセージのカスタムルーティングがあり、サブネット内の一部のノードがブロードキャストに必ずしもブロードキャストや興味を持っていなかったアーキテクチャに起因しています。他にも問題があり、アーキテクチャを少し変更しました。

+0

は見えません。 (これはネイティブソケットでこれを行う方法です)。なぜちょうど*ブロードキャストトラフィックを除外したいのですか?これが何らかの「セキュリティのためのブロードキャストノイズをフィルタリングする」目的である場合は、権限のないノードからのダイレクトパケットを処理する必要があります。シナリオは何ですか? – selbie

答えて

0

DatagramPacketクラスを使用してUDPデータグラムを送受信し、送信者のIPアドレスなどのさまざまなフィールドを照会することを示しているsimple Java application using UDP packetsがあります。したがって、送信者のIPアドレスをメッセージの処理または無視の指示として使用できる場合は、これが役に立ちます。

あなたはクラスのDatagramSocketを使用している場合は、受信したUDPデータグラムは、ヘッダ情報が含まれており、あなたはこのDatagramSocket documentationに応じてそれを解析することができます。 wikipedia on User Datagram Protocolのこの記事では、UDPデータグラムの形式と構造について説明します。

そこで質問は、あなたがメッセージの許可する送信者リストまたは許可されていない送信者をフィルタリングするためにいくつかの方法を持つことができるかどうかです。

もう1つのオプションは、許可されたデータグラムと無視されるデータグラムを識別できるように、ある種の識別情報またはシグネチャをデータグラムに提供することです。あなたはブロードキャストの種類については言及していませんが、指定されたバイト数またはそれに類するものよりも小さいものは無視できます。あるいは、特定の範囲のポートからのデータグラムを無視したり、特定の範囲のポートからのデータグラムだけを許可したりすることができます。 JavaはIP_PKTINFOオプションまたはのrecvmsg()と同等に設定する方法を公開しますよう

関連する問題