This is a mirror of official site: http://jasper-net.blogspot.com/

Краткое описание протокола IRC и пример бота

| Wednesday, December 1, 2010
Вот решил написать небольшой пост о протоколе IRC. Во-первых, что-то я давно не пополнял свою коллекцию описаний сетевых протоколов, а во-вторых это в тему про ботнеты, о которых недавно шла речь.

Вообще-то IRC прекрасно описан в RFC, русском переводе этого RFC и Википедии. Потому я решил не ограничиваться одним его описанием и выложить пример простенького бота. Бот этот заходит на канал и ждет команду:

!google [запрос]

Получив ее, бот посылает запрос поисковику, кидает первую ссылку из выдачи в чат и ждет следующих команд.

#!/usr/bin/perl

# Googler IRC Bot
# (c) 2010 Alexandr A Alexeev
# http://eax.me/

use IO::Socket::INET;
use URI::Escape;
use Text::Iconv;
use strict;

my ($server, $port, $botnick, $charset) =
 qw/irc.dalnet.ru 6667 googler cp1251/;
my $pass = "";
my @channels = qw/googlertest/;

my $opt  = "--timeout=10 --no-check-certificate --user-agent='Mozilla/5.0 (X11; U; FreeBSD i386; ru-RU; rv:1.9.1.10) Gecko/20100625 Firefox/3.5.10'";
my $conv = Text::Iconv->new($charset, "utf-8");

while(1) {
 print "CONNECTING: server = $server, port = $port...\n";
 my $irc = IO::Socket::INET->new(
   PeerAddr => $server,
   PeerPort => $port,
   Proto => 'tcp',
   Type => SOCK_STREAM,
   Timeout => 10
 );

 if(defined $irc) {
   print $irc "USER $botnick localhost localhost $botnick\r\n";
   print $irc "NICK $botnick\r\n";
   print $irc "PASS $pass\r\n" if($pass);


Read more: Записки программиста

Posted via email from .NET Info

0 comments: