2016-09-27 93 views
1

運行腳本,我運行一個隧道是這樣的:Socat:在雙向隧道

socat TCP-LISTEN:9090,fork TCP:192.168.1.3:9090 

我想運行一個腳本通過隧道的字符串來執行代碼。

該腳本不會更改字符串,只能獨立處理字符串,但允許在兩端之間不發生更改而通過。

這可能嗎?

回答

1

你應該能夠使用這種方法,甚至改變通信:

準備一個腳本helper.sh它獲取的每個連接執行:

#!/bin/bash 

./inFilter.sh | socat - TCP:192.168.1.3:9090 | ./outFilter.sh 

,並開始利用監聽:

socat TCP-LISTEN:9090,fork EXEC:"./helper.sh" 

腳本inFilter.shoutFilter.sh正在處理公司的客戶端和服務器部分mmunication。

inFilter.sh

#!/bin/bash 

while read -r l ; do echo "IN(${l})" ; done 

outFilter.sh

#!/bin/bash 

while read -r l ; do echo "OUT(${l})" ; done 

此方法應用於線基於文本的通信工作(如幾乎所有的是line-buffered)。

爲了使它適用於二進制協議,使用stdbuf -i0 -o0包裝所有進程可能會有所幫助(請參閱.e.g here),並且在這種情況下襬脫shell可能是一個好主意。

祝你好運!