6

我正在用 C 语言制作一个简单的 IRC 机器人。我终于让机器人连接并接收信息。我的代码也应该发送,但服务器的行为就像它没有发送任何东西一样。当机器人连接时,我收到:

已收到::roc.esper.net 通知身份验证:*** 正在查找您的主机名...

已收到::roc.esper.net 通知身份验证:*** 找到您的主机名

在这一点上我的代码发送这个:

发送:NICK Goo

发送:USER Goo * * :Goo

我通过使用 wireshark 确定这是您应该在初始连接后发送的注册。但是,我不确定数据是否实际发送,或者它可能以某种方式无效?因为大约 30 秒后我也收到了这个:

收到:错误:关闭链接:c-68-33-143-182.hsd1.md.comcast.net(注册超时)

然后我的程序关闭。

有没有其他人知道有关 irc 中的程序化身份验证/注册过程的任何信息?或者其他人有什么有用的想法吗?

谢谢

** 编辑 ** 已修复。我需要在每行的末尾发送行终止符。\r\n

4

3 回答 3

4

roc.esper.net 的 Telnet:

~$ telnet roc.esper.net 6667
Trying 198.247.173.216...
Connected to roc.esper.net.
Escape character is '^]'.
:roc.esper.net NOTICE AUTH :*** Looking up your hostname...
:roc.esper.net NOTICE AUTH :*** Found your hostname
NICK Goo
USER Goo * * :Goo
PING :268966433
PONG :268966433

NICK、USER 和 PONG 是我派来的。之后,欢迎信息如下:

:roc.esper.net 001 Goo :Welcome to the EsperNet Internet Relay Chat Network Goo
:roc.esper.net 002 Goo :Your host is roc.esper.net[198.247.173.216/6667], running version esphyb-1.0.1

等等...

因此,再次检查 PING-PONG 以及您的消息是否正确发送(尤其是 CR/LF 或末尾的 '\n')。

顺便说一句,如果我不发送任何消息,即使 PONG 丢失,我也会得到“注册超时”,但是一旦我回答了 PING,就不再有超时(至少在 30 秒后不会)。

于 2008-11-27T08:49:20.733 回答
2

尝试在 NICK 命令之前发送 USER 命令。您要连接到哪个 IRC 网络?

"
> telnet irc.freenode.net 6667
NOTICE AUTH :*** Looking up your hostname...
NOTICE AUTH :*** Checking ident
NOTICE AUTH :*** No identd (auth) response
NOTICE AUTH :*** Couldn't look up your hostname
USER x x x x
NICK hwjrh
:kubrick.freenode.net 001 hwjrh :Welcome to the freenode IRC Network hwjrh
:kubrick.freenode.net 002 hwjrh :Your host is kubrick.freenode.net[kubrick.freenode.net/6667], running version hyperion-1.0.2b
"

为我工作;我一直在远程登录到 Freenode、Undernet 和 Dalnet...

于 2008-11-27T08:29:05.967 回答
1

从我看过的教程(比如这个)来看,你似乎做对了,除了这个

USER Goo * * :Goo

USER Goo 0 * :Goo

在我看到的所有教程中。另外,以后不要忘记 PING-PONG,但这不应该用于注册(编辑:这似乎是错误的,在您发送 NICK 后立即需要 PONG)。

我猜你知道RFC 1459,它也会对你有很大帮助。

于 2008-11-27T08:17:15.570 回答