Python IRC бот не присоединится - PullRequest
4 голосов
/ 22 января 2011

Я получаю сообщение об ошибке

: irc.evilzone.org УВЕДОМЛЕНИЕ ОТ АВТОРА: * Поиск вашего имени хоста ...

: irc.evilzone.org УВЕДОМЛЕНИЕ ОБ АВТОР: * Найден ваш хост (кешируется)

PING: 7091A8FB

: irc.evilzone.org 451 ПРИСОЕДИНЯЙТЕСЬ: У вас есть не зарегистрирован

: irc.evilzone.org 451 PRIVMSG: Вы не зарегистрированы

server = "irc.evilzone.org" # Server 
port = 6667 #port connect through IRC standard is :(6667 or 9999)
irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc.connect ( ( server, port ) )
print irc.recv ( 4096 )
nick = 'Piebot' #bots name
chan = 'test' #channel
version= "1.0" #current version
irc.send ( 'NICK Pizebot\r\n' ) 
irc.send ( 'USER Pizebot Pibot Pibot :Python IRC\r\n' )
irc.send ( 'JOIN #test\r\n' ) # YOU MUST CHANGE THE CHANNEL HERE AND BELOW!!
irc.send ( 'PRIVMSG #test :Hello World.\r\n' )

while True:
    readbuffer= irc.recv(4096)

    temp=string.split(readbuffer, "\n")
    Check = readbuffer.split(':')
    print readbuffer

Помните, что для некоторых команд, которые я использую, нужна часть кода temp = string.split (readbuffer, "\ n"). Но с кодом, подобным этому

network = 'irc.evilzone.org'
port = 6667
irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc.connect ( ( network, port ) )
print irc.recv ( 4096 )
irc.send ( 'NICK ipbot\r\n' )
irc.send ( 'USER ipbot completely real :Jxxx\r\n' )
irc.send ( 'JOIN #test\r\n' )
irc.send ( 'PRIVMSG #test:Oh Hai.\r\n' )
while True:
   data = irc.recv ( 4096 )

Я могу успешно подключиться к каналу и т. Д. Есть идеи?

Ответы [ 5 ]

6 голосов
/ 24 января 2011

Я вижу две возможные причины для этого:

  • Вы отправляете команды рано.Обычно вам нужно подождать некоторое время, прежде чем соединение будет полностью установлено, и сервер примет ваши команды (особенно JOIN).Поэтому вам нужно сначала дождаться ответа сервера (после отправки команды NICK вы в какой-то момент получаете команду MODE; после этого вы можете вызывать обычные команды, включая JOIN).может не быть реальным решением здесь, но все же важно, если вы хотите остаться на IRC-сервере, это PING.Сервер случайным образом отправляет команду PING.Обычно требуется для ответа командой PONG (параметр совпадает с полученным PING).В противном случае сервер может ударить вас.
5 голосов
/ 28 сентября 2012

Я заметил, что вы не обрабатываете запросы PING, некоторые серверы не принимают никаких других команд, пока вы не ответите на запрос PING (следовательно, не зарегистрированы). Вы хотите подключиться, затем NICK, проверить PING, затем USER, снова проверить PING, если до USER не было ни одного.

Некоторые серверы любят отправлять его после NICK, другие - после USER.

PING :7091A8FB\r\n

Чтобы ответить на этот PING, просто отправьте:

PONG :7091A8FB\r\n

Между : и '\r\n будет случайная строка, которую нужно отправить обратно вместе с PONG, как показано выше.

3 голосов
/ 07 сентября 2012

Время между отправкой "USER ..." и "JOIN ..." должно быть увеличено. Я столкнулся с этой проблемой при выполнении того же кода в Bash. Вот как я это сделал:

#!/bin/bash
(
echo NICK bashscript
echo USER bashscript 8 \* : Centreon Notifier
sleep 2
# echo 'JOIN #netops'
echo 'PRIVMSG #netops' $1
echo QUIT
) | nc 127.0.0.1 6667
1 голос
/ 30 июня 2016

PING: 7091A8FB

Эта проблема не позволяет вам зарегистрироваться на сервере IRC.

Хотя вы (технически) должны иметь возможность зарегистрироваться на IRC скомбинация NICK / USER, PING, который вы получаете при входе в систему, является очень простым механизмом защиты от DoS, который используется большинством IRC-серверов в наши дни.

Вам необходимо ответить на пинг следующим образом:

PONG :7091A8FB

Строка должна меняться каждый раз, когда вы получаете PING.Позже вы также получите PING-запросы, чтобы убедиться, что соединение все еще живо, поэтому написание кода для ответа гарантирует, что сервер автоматически НЕ ВЫХОДИТ (время ожидания пинга)

Наконец, вам следует подождать, покаВы вошли в систему (вы будете знать, потому что вы получите необработанное число 001), прежде чем отправлять JOIN / PRIVMSG / другие команды.

0 голосов
/ 31 мая 2016

Возможно, это проблема вашего клиента. Вы можете перепроверить это подключившись к серверу с помощью telnet и выполнив команды, аналогичные это:

NICK aaron
USER aaron ignored ignored :Aaron
PONG <number>

(После выполнения команды «NICK» вы должны получить «PING» от клиент с номером; это число, которое вы должны заменить "" выше.)

Этот должен соединить вас с сервером, и вы должны получить MOTD и другие сообщения о подключении сразу после этого. Отсюда вы можете попробовать "JOIN # test-channel" и убедиться, что вы можете присоединиться к каналам. Предполагая, что все это работает, как я описал, ваша проблема, вероятно, с вашим IRC-клиентом.

 sec@irc:~/simple-irc-bot$ telnet 192.168.1.100 6667
 Trying 192.168.1.100...
 Connected to 192.168.1.100.
 Escape character is '^]'.
 NOTICE AUTH :*** Looking up your hostname
 NOTICE AUTH :*** Checking Ident
 NOTICE AUTH :*** Couldn't look up your hostname
 NICK TENOTICE AUTH :*** No ident response
 NICK testtest002
 PING :2153560274
 :loal.irc-server.com 461 TNICK USER :Not enough parameters
 USER test test 0 :sec
 PONG :2153560274
 :loal.irc-server.com 001 TNICK :Welcome IRC Network,
 :loal.irc-server.com 002 TNICK :Your host is loal.irc-server.com, running version u2.10.12.14

Пожалуйста, попробуйте PONG: 2153560274 позади USER команда.

...