Bash

簡單的 netcat 響應程序

  • October 27, 2021

嘗試創建一個簡單的 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

引用自:https://serverfault.com/questions/980541