UDPポート接続のテスト


37

UDP経由でリモートサーバー(両方にアクセスできる)上の特定のポートにアクセスできるかどうかをテストしようとしています。

両方のサーバーはインターネットに直接接続されています。netcatを使用して特定のポートをリッスンしています。

次に、nmapを使用して、そのポートが開いているかどうかを確認しますが、開いていないようです。

Iptablesはオフになっています。

なぜこれが可能性がありますか?最終的にはVPNトンネルをセットアップしますが、私はトンネルを初めて使用するため、進む前にポートUDP 1194に接続できることを確認したいと思います。


「UDPポート接続のテスト」の質問に回答しました。しかし、より具体的な「OpenVPNがUDPパケットを受信することを確認する」部分に集中することをお勧めします。これは、OpenVPNログを調べることで簡単に達成できます。
ルーク404

回答:


46

少なくともほとんどの人が考えるのに慣れているという意味では、「開いた」UDPポートのようなものはありません(「OK、接続を受け入れました」のようなものに答えています)。UDPはセッションレスであるため、「ポート」(読み取り:オペレーティングシステムIPスタック内のUDPプロトコル)は、それ自体では「成功」に応答しません。

UDPポートには、リスニング状態かそうでないかの2つの状態しかありません。これは通常、「プロセスによってソケットが開かれている」または「ソケットが開かれていない」という意味です。システムはcode = 3(ポート到達不能)のICMP Destination Unreachableパケットで応答する必要があるため、後者のケースは簡単に検出できるはずです。残念ながら、多くのファイアウォールはこれらのパケットをドロップする可能性があるため、何も返されない場合、ポートがこの状態にあるかどうかはわかりません。ICMPもセッションレスであり、再送信を行わないことを忘れないでください。PortUnreachableパケットは、ネット上のどこかで非常によく失われる可能性があります。

「リスニング」状態のA UDPポートよく、またはプロセスが受信時に行為をした場合、それは(何かのバックを送ることができ、すべての(それだけでパケットを受信し、送信何もしないで、プロセスのリスニング)でない応答し、それがすることによって作用する場合UDPを介して元の送信者IP:portに応答する)。繰り返しになりますが、何も返されない場合、どのような状態であるかは確実にわかりません。

あなたが受け取るホストの制御を持つことができると言う:UDPポートの到達可能性をチェックするために、独自のプロトコルを構築するあなたができるようになり、その:ただ与えられたUDPポートをリッスンよ受信ホスト上のプロセスを置く応答バック(またはあなたを送ります電子メール、または単に驚いてunlink()ホストファイルシステム上のすべて...あなたの注意を引くものは何でもします)。


今理解していると思います。したがって、リッスンしているudpポートを持つサーバー上のnetstatはリモートホストを表示しません... tcpdumpのみがリモート要求を表示しますか?
ロック

netstatとtcpdumpの両方には、ユーザーにデータをダンプする機能があり、後者はより人間が読める形式になっています。詳細については、マニュアルページをご覧ください。
ルーク404

56

udpポートが応答しているかどうかをテストするには、を使用しますnetcat

manページの例:

nc -v -u -z -w 3 example.host 20-30
    Send UDP packets to ports 20-30 of example.host, and report which ones
    did not respond with an ICMP packet after three seconds.

もちろん、ファイアウォールがDROP接続されている場合(通常、インターネットに接続されたゲートウェイを処理する場合)、ICMP応答は受信されません。


1
この反応は私に偽陽性を与えました。対照的に、サーシャの答えは私が期待することを示しています。
テキサスブロニウス

テキサス・bronius @あなたが他のサーバへのアクセス権を持っている場合、それはサーシャの方法を行うために、より良いおそらくです
motobói

27
  1. クライアントとサーバーの両方にncをインストール: yum install nc(centosの場合)
  2. サーバーのリッスンUDPポート: nc -ul 6111
  3. クライアントで nc -u <server> 6111
  4. クライアントで何かを入力してEnterキーを押します-サーバーにこのテキストが表示されます

注:nc -ulサーバーでコマンドを実行すると、最初の接続でのみ接続されます。私が知ったように、停止して再起動せずにpingするサーバー間で切り替えることはできませんnc -ul。実際、^ Cでクライアントを停止すると(nc -u ...)、最初にサーバーリスナーを再起動しない限り、クライアントを再起動することもできません。


1
UDPが「送信して忘れる」という自分自身の理解(および誤解!)を与え、すべての確認は適切な構成からしか得られないため、この賢明な答えが好きです。要因が多すぎます。この応答は、動作するか動作しないかの非常に単純で決定的な呼び出しと応答を提供し、構成を変更し、すすぎ、繰り返します。
テキサスブロニウス

10

nmapを使用して開いているUDPポートをテストするのは危険です。開いていることを示す3方向のハンドシェイクはありません。リスニングプロセスがnmapが送信するものに応答しない限り、nmapが応答していない開いているポートとフィルターされたポートを区別する方法はありません。

はるかに簡単には、一方の端でnetcatをリッスンし、もう一方の端でnetcatを使用してパケットを送信し、それらがもう一方の端に到着するのを確認するだけです。両方の方法で実行してください。またtcpdump、パケットがどこに行く必要があるかを確認することもできます。


なるほど.. nmapはどのようにして開いているポートを正確に知るのでしょうか?そのポートにデータを送信し、応答を受信した場合、オープンと見なされますか?tcpdumpとnetcatの組み合わせを使用します。よく説明された答えをありがとう。
ロック



1

ネットワークの外部でテストする別のマシンがあるnetcat場合iperf、(nc)またはでこれを行うことができます。私の選択はnmap、環境外のシステムからのUDPスキャンです。nmapコマンドラインは何でしたか?ハードウェアファイアウォールやその他のデバイスが混在していますか?


1

私は単純なアプローチをしています。UDPサーバーが予期したデータを返さない場合、ダウンしたと仮定して、dgramの収集を停止します。

LINE: while(1)
{
    my $line;
    my $flags;

    local $SIG{ALRM} = sub {die "exceeded timeout for recv"};
    alarm 5;
    eval {
        $socket->recv($line,2024,$flags);
    };

    unless($line =~ /\{.*\}/){
        if($verbose){
            print STDERR "Invalid or empty dgram:\n",'"', $line, '"',"\n";
        }

        last LINE;
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.