0
是否有可能在bash腳本中進行異步tcp偵聽?
請你可以提供一個簡單的例子或者描述相同事物的鏈接。如何在bash腳本中異步監聽?
是否有可能在bash腳本中進行異步tcp偵聽?
請你可以提供一個簡單的例子或者描述相同事物的鏈接。如何在bash腳本中異步監聽?
這裏是一個hacky irc客戶端(我們將它稱爲stackirc)作爲一個例子(使用telnet,但您可以輕鬆選擇使用netcat或bash的內置/ dev/tcp處理)您將需要telnet和Xdialog使用它,但它基本上只是產生一個子shell來觀看一個文件(使用Xdialog --tailbox ...),這個文件稍後通過telnet進行更新。在這個例子中,我使用了標準管道,但如果使用了命名管道,它可能更具適應性和清晰度。
#!/bin/sh
echo starting irc > $HOME/.irclog
eval `Xdialog --stdout --separator " " --3inputsbox "setup" 0 0 \
"USER=" "stackuser-$RANDOM" \
"SERVER=" "irc.freenode.net" \
"CHANNEL=" "#stackoverflow" \
|while read USER SERVER CHANNEL; do
echo SERVER=\"$SERVER\" USER=\"$USER\" CHANNEL=\"$CHANNEL\"
break
done`
#this is where we will get our asynchronous data
Xdialog --title "$CHANNEL irc" --tailbox $HOME/.irclog 30 99 &
XDPID=$!
A='NICK '$USER'
USER '$USER' +iw '$USER' :ashirc
JOIN '$CHANNEL' '$USER
while ([ "$A" ]) do echo "$A" #this sends the data to the pipe at the end
A=`Xdialog --timeout 200 --stdout --title "AshIRC message dialog" \
--inputbox "Enter an IRC message for $CHANNEL" 0 0`
case $? in
255)A=PONG;;
1)kill $XDPID;;
0)echo $USER:$A >> $HOME/.irclog #see our messages too
A='PRIVMSG '"$CHANNEL"' :'"$A"'.';;
esac
done | telnet $SERVER 6667 | while read LINE; do
echo ${LINE%%!*}:${LINE#:*:}
done>> $HOME/.irclog
你想做什麼? – Mat 2012-02-08 13:32:49
試圖在任何端口異步偵聽,'netcat'是否順便這樣做?或者它是同步的? – 2012-02-08 13:41:48
爲什麼你想在bash中做到這一點?異步偵聽本身是無用的,如果你想捕獲一個傳入的SYN,你需要一個套接字的持久綁定。也許你應該看看xinetd? – Mat 2012-02-08 13:53:10