在bash脚本中使用PONG回复IRC PING

时间:2017-04-18 14:22:26

标签: bash shell

到目前为止,我有一个基本的IRC Bot,我希望能够成功地使用PRIVMSG,但在我测试的服务器上需要PING对PING的响应。

我完全不知道如何解决这个问题。我如何回复PING?

我目前的代码:

    #!/bin/bash

function ircpreamble {
echo "NICK ${1}"
}

function privmsg {
TARGET=$1
sed -re "s/^(.*)\$/PRIVMSG ${TARGET} :\1/"
}

function delay {
while read LINE; do
sleep 2
echo $LINE
done
}

function messages {
msg=`cat pmmsg.txt`
echo $msg
}

function disconnect {
echo "QUIT goodbye :)"
}


(   
nick=`cat randnick.txt`
pms=`cat pmnickname.txt`
ircpreamble "$nick";
messages | privmsg "$pms";
disconnect;
) | delay | nc irc.seersirc.net 6667

1 个答案:

答案 0 :(得分:1)

首先需要“捕获”服务器响应。这可以这样做:

$ nc irc.seersirc.net 6667 |while read res;do echo "==>$res";done
==>:irc.seersirc.net NOTICE AUTH :*** Looking up your hostname...
==>:irc.seersirc.net NOTICE AUTH :*** Couldn't resolve your hostname; using your IP address instead

从现在开始捕获变量中的响应,您可以过滤掉这些响应并将相应的命令发送回服务器。

问题是当从脚本运行netcat / telnet时,一个简单的echo "PONG"不会将消息发送回服务器,但echo会在终端本地打印消息。

要向服务器发送消息,您需要在开始时将这些消息传递给netcat(您已经使用的技术),或者使用某种期望脚本或使用文件来提供netcat。

关于PONG响应,请注意,为了使服务器接受pong,它必须包括服务器发送的消息及其ping请求。 您的服务器发送类似PING :D7AA1D1D的内容(每次都不同),因此正确的乒乓响应为PONG :D7AA1D1D

因此,您不能在开头发送给netcat的第一封邮件中包含pong响应,因为您不知道服务器将与ping请求一起发送给您的ID。

这是一个使用文件连续提供netcat的工作草稿脚本:

rm .ircbot
touch .ircbot
prmnick="gv"
tail -f .ircbot |nc irc.seersirc.net 6667 |while read res
do 
echo "==>$res"
if [[ "$res" == *"Couldn't resolve your hostname; using your IP address instead"* ]];then  
    sleep 2
    echo "NICK gvgv" >>.ircbot
    tail -n1 .ircbot  #used just to display the last line of the helper file in my screen. 
elif [[ "$res" == *"PING"* ]]; then
    sleep 2
    echo "$res" |sed 's/PING/PONG/' >>.ircbot
    tail -n1 .ircbot
    sleep 2
    echo "USER gvgv 8 * :gvgv " >>.ircbot
    tail -n1 .ircbot
    sleep 2
    echo "PRIVMSG $prmnick : hello from bot" >>.ircbot
    tail -n1 .ircbot

fi
done

提示:通过打开第二个终端,您可以通过向.ircbot文件(即$ echo "JOIN #channel" >>.ircbot)发送更多命令来手动“控制”机器人,这也将被提供给netcat。

顺便说一下,关于bash irc bots的一些网络搜索会返回一些有用的结果 这是一个简单的bash脚本,可用作irc bot:https://github.com/Newbrict/bash-irc-bot/blob/master/bot.sh

此外,我发现这个有用的IRC Over Telnet指南:http://archive.oreilly.com/pub/h/1963

最后,这是直接使用/ dev / tcp的替代方法:https://gist.github.com/Wollw/3330337