问题描述
|
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超时。
解决方法
最好的解决方案是使用多个线程,其中主线程解析来自IRC的输入并响应PING,而其他线程则进行实际的命令处理以及任何可能花费很长时间的事情。
我的IRC机器人skybot每当发出命令时都会生成一个新线程,并使用线程安全队列在它们之间传递消息。