2017-08-15 18 views
1

基本的には、this questionに記載されているものを実行したいが、後続のデータはstdinから来て、別のファイルから来るようにする。レスポンスを受け取った後にnetcat経由でファイルを送信するには?

私はこれを行う場合は、次の(それはそう)

cat file.txt | netcat 192.168.121.15

のnetcatを単純にファイルを送信した後、接続をシャットダウンします。私は最初のファイルについての応答を受信した後に第2のファイルを送信できるようにしたいのに対し、

cat file.txt - | netcat 192.168.121.15しかし、これは単に、標準入力からの入力のためのオープンな接続を保持します:どのような上記参照記事が示唆することはこれですサーバーから戻します。

したがって、一度にたくさんのファイルを送信することはできません。したがって、the answer to this questionは、サーバーをtarを使用するように変更できないため、私が探しているものではありません。

netcatでもこれを行うことができますか、私は使用しなければならない他のツールがありますか?

+0

これは必ず[のように思えますXYの問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)ここで、実際にはファイル転送ではないのに、ソリューションが 'netcat'であると判断したツール。 –

+0

問題の解決を試みるために私たちが試みたこと(https://mattgemmell.com/what-have-you-tried/)を奨励したと思いました。 – user124384

答えて

2

TL; DR:はい、しかし、あなたはパイプで連結されたcat

catより賢く何かが単にそれに与えられたすべてのファイルを連結し、stdoutにそれらをダンプし、道ご参照Qので-は、標準入力を表し必要があります/ stdinをファイルに連結することで作業しました。

netcatは、未加工のパイプを他のポートに開く限り、何をしようとしているかのための優れたツールです。私はあなたのためのより良い質問は、cat正しいツールからのパイプ出力ですか? No.

ちょうどcat ... | netcat ...を使用している問題はその一方的な方法です。 catの出力はnetcatへの入力として使用されますが、出力はstdoutになります。パイプは双方向ではなく、対話性が必要です。

netcatパイプを介してサーバーからの応答に基づいて対話的にアクションを実行する場合は、プログラムでパイプとやりとりするためのさまざまな方法があります。

たとえば、read、またはexpectを使用できます。

あなたの道具箱を展開するために喜んでいる場合、私はnetcatのより近代的な実装であり、netcatパイプにコマンドやスクリプトの装着を可能に便利なオプション-eを持ってncatを使用することをお勧め少し。 netcatを手に入れることができない場合は、-eと同じ効果を得るには、名前付きパイプとI/O Redirectionについていくつか学ぶ必要があります。私はnetcatを経由して送信された複数のファイルを扱っリスニングサーバを書いていないテスト/例

は下記を参照してください、この答えを書く前にこのようなもののいくつかをテストしたい

は、私は行きますよあなたはそれが動作していると仮定することができますが、私はクライアント側からのプログラム的なやりとりをシミュレートし、手作業でサーバを実行することができます。私は、「サーバを起動

#!/bin/bash 
i=0 
while true; do 
    read line 
    if [[ $line == "goose" ]]; then 
    echo "zoom" 
    exit 0 
    else 
    i=$(expr $i + 1) 
    echo "$i ..." 
    fi 
done 
  • マイダミー「クライアント」/「サーバー」対話は、ここで私はこの単純な対話型のスクリプトを書いたseting up 2 ncat sessions to talk to each other

    1. のこの楽しいアクティビティに基づいています"ncat -l -p 1337

    2. インタラクティブスクリプトによって制御される"クライアント "を開始します。ncat localhost 1337 -e ./interact.sh
    3. そして(NCATは明らかに私はo:i:と出力と入力を表記しましたO対示していないので)私は手で「サーバー」を操作する:

      i:duck 
      o:1 ... 
      i:duck 
      o:2 ... 
      i:duck 
      o:3 ... 
      i:goose 
      o:zoom 
      
  • +0

    うわー!!どうもありがとうございます!!これは私の実際のサーバでは何らかの理由で動作していませんが、ncatを使ったテストと全く同じように動作します。おそらく私は別の奇妙な問題に直面しています。 – user124384

    +0

    "read line"の代わりに "sleep"を使用しました。なぜそれが行を読み取ることができないのか分かりません... – user124384

    +1

    テスト中にwhileループを読み込むと入力がうまくいきませんでした。これは、期待が手元に来るか、あなたが見つけたように、眠ってから読んでいるところです。 –

    関連する問題