if data.find('!scan') != -1:
nick = data.split('!')[ 0 ].replace(':','')
targetip = str(socket.gethostbyname(args))
sck.send('PRIVMSG ' + chan + " :" ' scanning host' + " " + targetip + '\r\n')
for i in range(20, 1025):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = s.connect_ex((targetip, i))
if (result == 0) :
s.send('PRIVMSG ' + chan + " :" 'port %d: OPEN' % (i,) + '\r\n')
s.close()
该脚本可以工作,但是在它可以获得一个开放端口之前ping超时,我怎么能这样做它可以扫描几个端口然后从服务器检查ping并发送一个pong然后再扫描几个端口所以它不会ping超时。
答案 0 :(得分:1)
最好的解决方案是使用多个线程,主线程解析来自IRC的输入并响应PING,而其他线程执行实际的命令处理以及任何可能需要很长时间的事情。
skybot,我的IRC机器人,每当发出命令时都会生成一个新线程,并使用线程安全队列在它们之间传递消息。