1
運行腳本,我運行一個隧道是這樣的:Socat:在雙向隧道
socat TCP-LISTEN:9090,fork TCP:192.168.1.3:9090
我想運行一個腳本通過隧道的字符串來執行代碼。
該腳本不會更改字符串,只能獨立處理字符串,但允許在兩端之間不發生更改而通過。
這可能嗎?
運行腳本,我運行一個隧道是這樣的:Socat:在雙向隧道
socat TCP-LISTEN:9090,fork TCP:192.168.1.3:9090
我想運行一個腳本通過隧道的字符串來執行代碼。
該腳本不會更改字符串,只能獨立處理字符串,但允許在兩端之間不發生更改而通過。
這可能嗎?
你應該能夠使用這種方法,甚至改變通信:
準備一個腳本helper.sh
它獲取的每個連接執行:
#!/bin/bash
./inFilter.sh | socat - TCP:192.168.1.3:9090 | ./outFilter.sh
,並開始利用監聽:
socat TCP-LISTEN:9090,fork EXEC:"./helper.sh"
腳本inFilter.sh
和outFilter.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可能是一個好主意。
祝你好運!