netcatを使用してテキストファイルの内容をサーバーに送信しますか?


13

ポート5144でリッスンしているデーモンプロセスがあり、変更できません。

netcatを使用してテキストファイルの内容をサーバーに送信したいのですが、これにより+ netcatを押すまで端末がハングします。CtrlC

cat file.txt | nc -u 127.0.0.1 5144

私がそれを機能させることができる唯一の方法nc -u 127.0.0.1 5144は、ファイルの内容を手動で実行してコピー/貼り付けすることです。

何か案は?


また注意してください:

  1. cat file.txt | ...につながりbash: ...: command not found、端末を使い続けることができます
  2. を使用nc -u 127.0.0.1 5144 < file.txtすると、|を使用した場合と同じ動作になります。上

あなたが言うとcat file.txt | …どうなりますか?どうnc -u 127.0.0.1 5144 < file.txt
スコット

-uを使用する必要がありますか?また、反対側のnc -l -pを試しましたか?nc -pを試しましたか?(-l -pを使用するncと、-lなしで-pを使用するncがあります)。クライアント/開始側の片方のみを表示しました。サーバー側で何をしていますか?ncをポート1234でリッスンさせ、cat ... | nc ...動作します。私は前にそれを見たことがありませんので、これはおそらく弱いかもしれませんが、多分それはこの特定のデーモンに特有のものであり、キャッチされたものを受け入れません。
-barlop

デーモンを変更できません。@Scott:bash: ...: command not found「<file.txt」を使用すると、|と同じことが行われます。オペレータ(netcatをしたばかりハング)
AMIL

もっと正確にお願いできますか?「bash: ...: command not found」と表示されますか?または、「bash: cat: command not found」または「bash: nc: command not found」と言いますか?それからシェルプロンプトに終了しますか、それともハングしますか?(質問を編集してこれらの詳細を追加することをお勧めします。これにより、目覚めたばかりのオーストラリアの人々は、これらのコメントをすべて読んで自分の症状を知る必要はありません。)
Scott

@Scott:ありがとう、私はあなたの質問に対する答えを元の質問に統合しました。何か案は?
アミル

回答:


7

netcatのGNUバージョンを使用している場合は、-cフラグを使用してEOFで接続を閉じることができます。

-c、-stdinからEOFの接続を閉じる

ツールの元のバージョンを使用している場合は、-qフラグを使用できます。

-q secsは、stdinのEOFおよびsecsの遅延後に終了します

元のバージョンの例は次のとおりです。

cat file.txt | nc -u -q 0 127.0.0.1 5144

元のコマンドに「-q 0」を追加しました。これにより、ファイルが送信された後に接続が閉じられます。


区別するために、元のバージョンは-l -p <port>リスニングを指定する必要があるバージョンです。GNUバージョンはただ必要-l <port>です。
tueftl

1

EOF接続を送信した後、アイドル状態のままになると仮定すると、-w timeoutオプションを使用できます。これは、timeoutゼロに等しくなるように機能します(愚かな-qオプションとは異なります...)

cat file.text | nc -u localhost 4300 -w0

0

FreeBSDからWindowsに移行する場合:

FreeBSD: cat file.txt | nc -N 10.0.0.5 5144

-N EOF後にネットワークソケットをシャットダウンします

Windows: nc -l -p 5144 > output.txt

-l接続が閉じられるとリッスンを停止します(とは異なります-L

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