netcat
アクセス権がないため、特殊ファイルを使用してポートをテストしてみnmap
ました。bash
/dev/udp/
次のようにできます。
echo "" > /dev/udp/example.com/8000
ただし、UDPを使用するときは常にそうです$?
。私はこれがコマンドの戻り値0
のためであると仮定します。そうですか?echo ""
私は基本的にnmap
私ができることを複製しようとしていますnetcat
。
nmap -sU -p 8000 example.com | grep open >/dev/null && echo 'open'
nc -z -u example.com 8000 && echo 'open'
どうすればいいですか/dev/udp
?
答え1
TCPの場合、$?
接続が失敗した場合は、$?
次の点を確認してください0
。
$ >/dev/tcp/google.com/81
bash: connect: Network is unreachable
bash: /dev/tcp/google.com/81: Network is unreachable
$ echo $?
1
bash
接続が失敗したことに気づくのに時間がかかります。あなたはそれを使用することができます停止する原因bash
:
$ timeout 1 bash -c '>/dev/tcp/google.com/80' &&
echo Port open ||
echo Port close
Port open
UDPポートテストはより複雑です。
厳密に言うとない。開いている状態(もちろんudpは無国籍プロトコル)udpを使用します。 2週間だけudpがあります。聞くまたはいいえ。状態が次の場合いいえ、あなたは得るでしょうICMPターゲットに接続できない。
残念ながら、ファイアウォールまたはルータはしばしばこれらのICMPパケットを破棄するため、UDPポートのステータスを確認できません。
答え2
一般的に言えばできません。
TCPとは異なり、UDPには接続がありません。何もしないポートに接続するだけでは、TCPのようにポートが開いているかどうかを検出できません。代わりに、データをポートに送信し、何が起こっているのかを調べると、実際のUDP実装の詳細が原因で結果を解釈することは困難です。高度なパケットレベルツールでも、プログラムnmap
が特定のUDPポートでリッスンしているかどうかを判断できません。 nmap
UDPポートを3つのグループに分けます。
- 絶対オープンです。ポートにパケットを送信すると、ターゲットコンピュータでデータ応答が発生します。
- 閉じてください。ポートにパケットを送信すると、ターゲットコンピュータが「ICMPターゲットに接続できません」というメッセージが表示されます。
- 開くかフィルタリングします。ポートにパケットを送信しても応答はありません。おそらく、パケットを破棄するファイアウォールがあるかもしれませんし、聞いていますが、応答を
nmap
取得する方法がわからないプログラムがあるかもしれません。