
コンテキスト: ncコマンドを使用してUDPポートをテストしたい
何が起こったのか:
ncコマンドは出力に何も返さず、入力すると0を返します。echo $?
任意のコマンド:
nc -vzu <ip> <port>
echo $?
問題は何ですか:
結果を信頼できるかどうかを知りたいです。echo $?
バージョン:
- netcat:0.7.1-5.ph3.x86_64(vCenterから)。
- tcpdump-uw: バージョン 4.9.1-PRE-GIT_2017_09_22
私の考え:
UDPはパケットを検証しないことを知っています。
ターゲットサーバーで試しましたが、何も受信されませんecho "something" | nc -vu <ip> <port>
。tcpdump -i vmk0 -en udp
UDP パケットが正常に送信されたが宛先に到達できなかったようです。
どう思いますか?
答え1
バージョンや実装によってnc
動作が異なる場合があります。nc
特定のコマンドを理解し、結果が信頼できることを確認するには、特定のコマンドの特定の動作をテストする必要があります。
たとえば、私のnc
バージョンでは、開いているUDPポートに接続しようとすると、次のように記録されます。
$ nc -vzu <ip> <port>; echo exit status is: $?
Connection to <ip> <port> port [udp/*] succeeded!
exit status is: 0
終了ステータスを返します。0。
ただし、何もリッスンしていないポートに接続しようとすると、終了ステータスのみが返されます。1。
$ nc -vzu <ip> <port>; echo exit status is: $?
exit status is: 1
特定の終了ステータスnc
コマンドの終了ステータスを信頼できることを確認するには、閉じたUDPポートに接続してみてください。有効なUDPポート範囲は次のとおりです。4096-65535。
存在するあなたの状況、報告したように接続しようとするとUDPポートを閉じる有効な範囲内で、nc
コマンドは終了ステータスを返します。0(成功)これは、特定のバージョン/実装の終了ステータスを信頼できないことを意味しますnc
。