Bashの `/dev/udp`を使ってポートが開いているかどうかはどうすればわかりますか?

Bashの `/dev/udp`を使ってポートが開いているかどうかはどうすればわかりますか?

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ポートのステータスを確認できません。

おすすめ記事