2017-08-15 85 views
1

我基本上想要做的是this question中描述的內容,而不是來自stdin的後續數據來自另一個文件。如何在接收到響應後通過netcat發送文件?

如果我這樣做:

cat file.txt | netcat 192.168.121.15

netcat的(似乎)簡單地關閉傳輸文件後的連接。什麼是上面提到的後建議是這樣的:

cat file.txt - | netcat 192.168.121.15

然而,這只是保持開放從標準輸入連接,而我希望能夠接收關於第一檔響應之後,發送第二個文件從服務器返回。

因此,我不能只發送一堆文件一次,所以the answer to this question是不是我要找的,因爲我不能改變服務器使用焦油。

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 /一對工作是通過連接標準輸入到文件。

netcat是一個很好的工具,用於你想要做的只要打開一個原始管道到另一個端口。我認爲對你來說更好的問題是,從cat管道輸出正確的工具?

剛剛使用cat ... | netcat ...的問題在於它是單向交易。 cat的輸出用作netcat的輸入,但輸出將轉到stdout,管道不是雙向的,需要交互性。

如果您希望基於服務器在您的netcat管道上的響應交互式執行操作,則可以通過編程方式與管道進行交互。

例如,您可以使用readexpect

如果你願意擴展您的工具箱我建議使用ncat這是一個更現代的實行netcat,具有方便的選項-e,它允許一個命令或腳本來netcat管的附着一點點。如果您無法通過-enetcat握手,您可能需要了解一些關於命名管道的內容,並獲得相同的效果I/O Redirection

我想要寫這個答案之前測試的一些這方面的東西,請參閱下面的測試/例子

我沒寫處理通過netcat發送多個文件監聽的服務器,我只是去假設你有這樣的工作,但我可以模擬客戶端的一些程序化交互,並手動執行服務器。

我的虛擬「客戶」 /「服務器」互動這裏是基於seting up 2 ncat sessions to talk to each other

  1. 這個有趣的活動,我寫了這個簡單的交互式腳本:

    #!/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 
    
  2. 我開始了我的「服務器「ncat -l -p 1337

  3. 我開始由交互式腳本控制的我的」客戶端「ncat localhost 1337 -e ./interact.sh
  4. 我用手操作 「服務器」(因爲NCAT沒有清楚地顯示我VS O I所譜寫的輸入與i:和產量o:):

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

哇!非常感謝!!由於某種原因,這不適用於我的實際服務器,但它完全適用於通過ncat進行的測試,因此我可能正面臨着其他一些奇怪的問題。 – user124384

+0

使用「睡眠」而不是「讀線」工作。不知道爲什麼它無法讀取一行... – user124384

+1

我在測試過程中注意到,while循環內讀取不處理沒有輸入。這就是預期可能派上用場的地方,或者你已經發現,睡覺然後閱讀 –

相關問題