[英]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.