Сканер портов MIRC

#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. Потокобезопасная очередь — хорошая идея для бота. Я должен добавить это в свой бот на основе плагинов.