簡體   English   中英

讀取和寫入相同的netcat tcp連接

[英]Read and write to the same netcat tcp connection

假設我寫了一個netcat連接:

tail -f ${file} | nc localhost 7050 | do_whatever | nc localhost 7050

這里發生的是我們有兩個套接字連接,以執行一些請求/響應。 但是由於某些原因,這並不理想。

我想要做的是重用相同的連接,以進行讀取和寫入。

有誰知道我只能重用一個netcat連接嗎?

在UNIX中執行此操作的正確方法是使用反向管道。 您可以按照以下方式進行操作:

首先,創建一個管道: mknod bkpipe p

這將創建一個名為bkpipe的類型為pipe的文件。

接下來,弄清楚您需要做什么。 這是兩個有用的方案。 在這些服務器中,將主機/地址和端口號替換為適合您的中繼的端口。

要將發送到本地端口的數據轉發到另一台計算機上的遠程端口,請執行以下操作:

 nc -l -p 9999 0<bkpipe | nc remotehost 7000 | tee bkpipe

要連接到另一台計算機,然后將該連接中的數據中繼到另一台計算機:

 nc leftHost 6000 0<bkpipe | nc rightHost 6000 | tee bkpipe

但是,如果只需要在單個主機中處理基本IPC,則可以完全放棄netcat,而只需使用mknod創建的FIFO管道即可。 如果您通過一個進程將東西填充到FIFO中,它們將一直掛在那里,直到其他人將它們讀出為止。

作為初學者,使用ncat更加容易並且易於理解;)

prompt$> ncat -lk 5087 -c ' while true; do read i && echo [You entered:] $i; done'

使用telnet(或nc)連接到本地主機端口5087,您鍵入的所有內容都會回顯給您;)使用-lk選項來偵聽和保持/維護(多個)連接。

您可以使用反斜杠像這樣從中制作一個bash腳本,但它會調用多個bash,在資源使用上並不便宜:

#!/bin/bash
# title          : ncat-listener-bidirectional.sh
# description    : This script will listen for text entered by a client 
#                  like for instance telnet
#                  and echo back the key strokes
#
ncat -lk 5087 -c ' \
#!/bin/bash \
while true; do  \
  read i && echo [You entered:] $i; \
done'

是的,我認為最簡單的方法是使用以下方法:

tail -f ${file} | nc localhost 7050 | do_whatever > ${file}

只需寫回同一文件(這是一個“命名管道”)即可。

只要您的消息少於500個字節,它們就不會交織。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM