1

UDPパケットを使用してネットワーク上の他のプログラムと通信しているJavaプログラムがあります。Windows XPマシンでは、受信パケットを受信できないことに気づきました。調査の結果、問題の原因はファイアウォールであることがわかりました。

Javaプログラムのファイアウォール例外を追加する方法はありますか?グーグルはこれについて何も明らかにしません。

例外を追加するインストール時に実行できるDOSシェルコマンドはありますか?(また、そのためにグーグルで何も見つけることができません。)

インバウンドパケットが要求されていることをWindowsに知らせる方法でそれを回避する方法はありますか?たとえば、ブロードキャストパケットを送信していると、他のシステムが応答します。応答パケットを許可するブロードキャストに使用するポートに関して、私にできることはありますか?

応答を受け取るためのまったく異なる方法はありますか?これは必ずしもDNSを備えていないネットワークで実行されるため、まだブロードキャストする必要があります。そのため、Zeroconf(Javaで利用できる優れたZeroconfサポートがないという事実は言うまでもありません)のようなものに頼ることはできません。ネットワーク上の他のマシン。

ありがとう。

4

1 に答える 1

3

ファイアウォールに関して考慮すべきことが3つあります。

  1. ファイアウォールのポートを「開く」最も簡単な方法は、ファイアウォールの背後にあるプログラムにデータグラムをピアに送信させることです。これにより(通常)、ピアからローカルプログラムにデータグラムを返すことを許可する一時的なルールが作成されます。ただし、WindowsVistaおよびWindows7は、ローカルプログラムがネットワーク上での通信を許可されている場合にのみこれを実行します。プログラムを最初に実行すると、ネットワークとの通信を許可するかどうかを尋ねるダイアログボックスが表示されます。「アクセスを許可」以外をクリックすると、プログラムは永久にブロックされます。

  2. 最善の方法は、管理者権限を持つユーザーが、プログラムがリッスンおよび/または送信しているポート番号を手動で開くことです。

  3. ポートを開いても、一部のファイアウォールがデータグラムをブロックする場合があります。これは、ペイロードの最初の数バイトがファイアウォールが好まないパターンと偶然に一致するなど、あいまいなものが原因である可能性があります。たとえば、Symantic Antivirusは
    、最初の数バイトが0x20 0x01 0x00 0x00Teredoトンネルであると想定しているUDPデータグラムをブロックする場合があります。同様に、データグラムがパスMTUよりもわずか数バイト大きい場合、一部のファイアウォールは小さなIPフラグメントを認識し、それをドロップして、古いDoS攻撃ベクトルを防ぎます。

アプリケーションのニーズに基づいて1または2を選択し、各データグラムの最初の数バイトを一定に設定し、データグラムをそれぞれ1400バイト未満に保つことで、3を回避することをお勧めします。

于 2012-01-10T17:21:37.977 に答える