Bash
簡單的 netcat 響應程序
嘗試創建一個簡單的 netcat 響應器:
“伺服器”將是:
$ while true; do { ./secret.sh; } | sudo netcat -k -q -1 -l 123; done
secret.sh
是:#!/bin/bash read line if [ "$line" == "open" ]; then echo "sesame" fi
和客戶端連接:
$ echo "open" | netcat localhost 123
它沒有按預期工作。可以改變什麼來使這項工作?
在閱讀了其他地方的一些回饋後,建議進行以下更改:
mkfifo /tmp/pipe while true; do { cat /tmp/pipe | ./secret.sh 2>&1; } | netcat -kv -lp 123 > /tmp/pipe; done
這有效,但它只響應
secret.sh
第一次的結果。使用正確字元串的後續連接不會得到預期的響應。然而,我越來越近了。
弄清楚了。問題是循環不應該在命令行上,它需要在 shell 腳本中。該命令
read line
會阻塞,直到它從偵聽埠接收到數據。它所需要的只是被包裹在一個循環中。伺服器
mkfifo pipe nc -lk 123 0<pipe | ./secret.sh 1>pipe
腳本
#!/bin/bash while true do read line if [ "$line" == "open" ]; then echo "sesame" fi done
客戶
echo "open" | nc localhost 123
h/t to this answer here,我將其合併到上述內容中。
https://stackoverflow.com/questions/6269311/emulating-netcat-e