建立与IRC的连接

时间:2012-09-29 19:51:53

标签: c linux unix

是否可以使用标准GCC库连接到IRC?

据我所知,IRC协议是一个非常简单的TCP协议,它不应该比连接到另一个控制台困难得多。

但是,与只需要IP和IP的控制台连接相比,连接到IRC时昵称和频道将是额外的要求。端口。

有人能告诉我一个如何做到这一点的例子吗?

1 个答案:

答案 0 :(得分:12)

当然,这很容易!这是一个非常基本的TCP协议。

GCC只是一个编译器(和一个链接器)。 GCC与IRC之间没有直接联系 要连接到服务器并与之通信,您只需要sys/socket.h;我不会详细介绍,有很多关于服务器 - 客户端Linux C / C ++程序的示例和教程。

让我们看看并尝试使用telnet(命令行telnet客户端程序)来理解IRC协议。

首先,我们需要建立与服务器的连接(假设irc.freenode.net与默认端口6667):

$ telnet irc.freenode.net 6667

服务器回复:

:sturgeon.freenode.net NOTICE * :*** Looking up your hostname...
:sturgeon.freenode.net NOTICE * :*** Checking Ident
:sturgeon.freenode.net NOTICE * :*** No Ident response
:sturgeon.freenode.net NOTICE * :*** Couldn't look up your hostname

现在我们需要发送三件事:PASSUSERNICK

PASS是一个发送连接密码的命令。在公共服务器(没有任何密码)上,您可以发送PASS none

USER是一个命令,告诉服务器您的用户名,主机名和真实姓名。比如,当你whois某人时,你会看到username@1.2.3.4和他的“真实姓名”。客户端在建立连接后立即发送的数据。

NICK是设置昵称的命令。当然服务器应该知道你的昵称,所以你应该在连接后立即发送它!

所以,我们建立了一个连接。现在你必须发送这些命令,只需将它们输入telnet:

PASS none
NICK sorandom29      
USER blah blah blah blah
哇哇,我们得到了答案!

:lindbohm.freenode.net 001 sorandom29 :Welcome to the freenode Internet Relay Chat Network sorandom29

另一个重要的事情 - 有PINGPONG命令,因此如果您长时间未使用PONG应答服务器,则会断开连接。

让我们看看它是如何完成的。我们收到PING请求:

PING :lindbohm.freenode.net

然后用相同的参数回答:

PONG :lindbohm.freenode.net

然后,您可能想知道如何加入频道。

JOIN #linux

是的,就是这样。

:lindbohm.freenode.net 470 sorandom29 #linux ##linux :Forwarding to another channel
:sorandom29!~blah JOIN ##linux
:lindbohm.freenode.net 332 sorandom29 ##linux :Welcome to ##Linux! Freenode's general Linux support/discussion channel.

另一个命令是PRIVMSG,它向频道或其他人发送实际消息:

PRIVMSG #linux :hello guys! i'm using telnet to connect to irc and that's such a stupid idea, i have to respond to PINGs manually!

所以#linux上的每个人都会看到:

<sorandom29> hello guys! i'm using telnet to connect to irc and that's such a stupid idea, i have to respond to PINGs manually!

请注意,:是邮件本身之前的前缀。

我想这足以进入IRC。您可以通过阅读IRC protocol本身,尝试使用telnetnc然后使用基本套接字编写程序来尝试其他所有其他内容。