Netcatを使用したUDPによる一方向通信

Netcatを使用したUDPによる一方向通信

私は、多くの「スマート」デバイスがUDPを介して私にデータを送信する状況に直面しました。送信側では何も変更できません。

nc(またはnetcat)をテストしていますが、次のことを通過できません。

終了コマンドの受信:

nc -l -u 8123

テスト転送コマンド:

echo "test" | nc -u 127.0.0.1 8123

最初のパケットはうまく機能しますが、両端がある種のスリープ状態に入っているようで、CTRL再試行する必要がありますC。動作すると、受信側で「継続リスニング」(-k) を行い、パケットを処理します。

答え1

答えは次のとおりです。 netcatはこのように使用すると明らかにいくつかの問題があります。 socatはソリューションを提供します。

受け取る:

socat -u udp4-recv:8123 - 

送る:

echo "test" | socat - udp4-sendto:127.0.0.1:8123

答え2

サーバー側:nc -ul 127.0.0.1 1234- ポート1234でUDP接続をリッスンします。

返品:nc -l 1234

クライアント:nc -u 127.0.0.1 1234- UDP、ポート1234を使用して127.0.0.1に接続する

これで、クライアント側に何かを入力すると、サーバー側でこれを見ることができます。 (サーバー側で入力することもでき、クライアントに送信されます。)

これにより、echo "test" | nc -u 127.0.0.1 8123サーバー側は以前と同じままになりますが、ncクライアントの標準入力がパイプ記述子にバインドされます。キーボードを入力すると、行く場所はありません。ncパイプからの入力を待っており、パイプは送信する必要があるすべてを送信しました。今nc「凍結」されました。

答え3

マニュアルページによると、完了時に終了するように-q0フラグを渡す必要があります。nc

答え4

いくつかのDNS関連エントリをテストしようとしていますが、欠けているのはflagsです-dncBSDを使用してUbuntu 22.04で完全なコマンド:

nc -d -l -q 0 -u 127.0.0.1 8123

stderrを介したデバッグ用に追加されました-v

関連情報