#python #sockets #irc
#python #сокеты #irc
Вопрос:
if data.find('!scan') != -1:
nick = data.split('!')[ 0 ].replace(':','')
targetip = str(socket.gethostbyname(args))
sck.send('PRIVMSG ' chan " :" ' scanning host' " " targetip 'rn')
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,) 'rn')
s.close()
Скрипт работает, но у него истекает время пинга, прежде чем он сможет открыть порт, как я могу сделать так, чтобы он мог сканировать несколько портов, затем проверять наличие пинга с сервера и отправлять pong, затем сканировать еще несколько портов, чтобы не было времени пинга.
Ответ №1:
Лучшее решение — использовать несколько потоков, при этом основной поток анализирует входные данные из IRC и отвечает на запросы, в то время как другие потоки выполняют фактическую обработку команд и все, что может занять много времени.
skybot, мой IRC-бот, создает новый поток всякий раз, когда выдается команда, и использует потокобезопасные очереди для передачи сообщений между ними.
Комментарии:
1. Потокобезопасная очередь — хорошая идея для бота. Я должен добавить это в свой бот на основе плагинов.