mirror of
https://github.com/irssi/irssi.git
synced 2024-12-04 14:46:39 -05:00
Added botnet plans.
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@86 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
parent
fe930409b6
commit
fae6b600dd
@ -1,6 +1,7 @@
|
||||
EXTRA_DIST = \
|
||||
FAQ \
|
||||
COMMANDS \
|
||||
FORMATS
|
||||
FORMATS \
|
||||
botnet.txt
|
||||
|
||||
SUBDIRS = help
|
||||
|
163
docs/botnet.txt
Normal file
163
docs/botnet.txt
Normal file
@ -0,0 +1,163 @@
|
||||
|
||||
HISTORY
|
||||
|
||||
draft v0.1 : 21.8.1999
|
||||
|
||||
Just a first draft of my botnet design I did on a boring friday
|
||||
work afternoon :) I'll try to implement this to irssi some day, it
|
||||
feels pretty interesting now so it might be pretty soon even. Any
|
||||
comments are welcome :)
|
||||
|
||||
draft v0.2 : 21.11.1999
|
||||
|
||||
Exactly three months since the first draft :) Now I actually have
|
||||
some code done, just committed pretty simple botnet to irssi CVS.
|
||||
Made several changes to this document.. Still missing much details
|
||||
but the basic idea should be clear.
|
||||
|
||||
------
|
||||
|
||||
A small description of what botnet would do: A group of bots
|
||||
efficiently working together to perform their tasks. Like when
|
||||
someone's trying to take over your channel, bots will quickly decide
|
||||
who deops/kicks whom instead of multiple bots deopping or trying to
|
||||
kick the same people..
|
||||
|
||||
config file:
|
||||
|
||||
mybotnet =
|
||||
{
|
||||
priority=n;
|
||||
nick=mybot;
|
||||
bots=
|
||||
(
|
||||
{ host="another.org"; port=5567; password="blah";
|
||||
valid_addrs=("*.another.org"); },
|
||||
{ host="blah.ircnetthing.net"; password="blah";
|
||||
valid_addrs=("*.ircnetthing.net", "*.blah.org"); },
|
||||
{ host="some.thing.net"; password="blah";
|
||||
valid_addrs=("some.thing.net"); }
|
||||
);
|
||||
}
|
||||
|
||||
When connecting to botnet, it first tries to connect to the first bot
|
||||
in bots list, then the second, etc. Setting port to 0 will prevent
|
||||
connecting to the bot.
|
||||
|
||||
Login:
|
||||
|
||||
First host checks what client is connecting from bots' valid_addrs. If
|
||||
there's no matches it just disconnects the client.
|
||||
|
||||
CLIENT: PASS blah
|
||||
HOST : (if error, disconnect)
|
||||
CLIENT: NICK nick
|
||||
HOST : (if nick already in use) NICKERROR
|
||||
CLIENT: PRIORITY=n
|
||||
HOST : MASTER nick
|
||||
HOST : CONNECTED
|
||||
|
||||
Then host sends a list of all connected bots in botnet:
|
||||
BOTINFO nick connected-to-nick address priority
|
||||
|
||||
Now we're connected to botnet, rest of the commands will be send to
|
||||
everyone. Commands are the following format (I won't write the nick
|
||||
from now on):
|
||||
|
||||
nick COMMAND [command specific data..]
|
||||
|
||||
After connection is established with the client, host sends (except to
|
||||
the connected client):
|
||||
BOTNEW client_nick client_address client_priority
|
||||
|
||||
Master is the client with the highest priority, if there's multiple
|
||||
with the same priority, the one who's nick is the first in alphabet
|
||||
"wins" and says:
|
||||
|
||||
MASTER
|
||||
|
||||
Also after connecting, client could check if it's priority is bigger than
|
||||
current master's and make itself the master.
|
||||
|
||||
Bots should every now and then check if their connections are active by
|
||||
sending PING, the other side replies with PONG. If PONG isn't received
|
||||
for a while (3 min?), the connection should be closed. If there's more
|
||||
bots behind the lost bot, either side should try to reconnect to the
|
||||
other one. Also if there's too much lag (>30sec) for some bots, their
|
||||
priority could be temporarily lowered. When something urgent happens
|
||||
and there's a lot of lag, each subset of bots should try to behave
|
||||
independently.
|
||||
|
||||
When connection is closed to some bot, a notice is sent:
|
||||
BOTQUIT nick
|
||||
|
||||
After bot is (dis)connected to some irc network and is ready to take
|
||||
commands, it sends notice:
|
||||
BOTCONNECT ircnet (where ircnet is network's name, like IRCNet, EFNet, ..)
|
||||
BOTDISCONNECT ircnet
|
||||
|
||||
After joining/leaving channels, bot sends notice:
|
||||
BOTJOIN ircnet #channel
|
||||
BOTPART ircnet #channel
|
||||
|
||||
After BOTJOIN, master tries to op the bot. When bot receives +o, it replies:
|
||||
BOTOP ircnet #channel
|
||||
|
||||
If it's the first opped bot in channel, master orders the bot to op the rest
|
||||
of the bots.
|
||||
|
||||
Or after kicked or when being unable to join..:
|
||||
BOTKICK ircnet #channel
|
||||
BOTBANNED ircnet #channel
|
||||
BOTCANTJOIN ircnet #channel
|
||||
|
||||
When master notices that bot is kicked, it first checks if there's any other
|
||||
opped bots in channel. If not, it waits for a random pause, 5-10sec before
|
||||
joining (so it won't get autorejoin ban). When received BOTBANNED, master
|
||||
tries to unban bot, BOTCANTJOIN results as invite to channel.
|
||||
|
||||
When master notices that bot is the first one joined to channel, it asks bot
|
||||
for channel information:
|
||||
|
||||
BOTCMD nick ircnet NAMES #channel
|
||||
BOTCMD nick ircnet WHO #channel
|
||||
BOTCMD nick ircnet MODE #channel
|
||||
BOTCMD nick ircnet MODE b #channel
|
||||
BOTCMD nick ircnet MODE e #channel
|
||||
BOTCMD nick ircnet MODE I #channel
|
||||
|
||||
Next command is sent right after getting answer from the last query. It's also
|
||||
possible that if several bots join immediately after the first bot, the
|
||||
commands are shared between all the bots. After getting the results, the bot
|
||||
replies:
|
||||
|
||||
BOTREPLY ircnet <reply>
|
||||
|
||||
Bots should cache the information as much as possible, at least NAMES command.
|
||||
|
||||
Every channel has a priority: LOW, NORMAL, HIGH.
|
||||
|
||||
Normally LOW operates just as NORMAL channels, except when some channel
|
||||
has HIGH priority and bots are really busy, LOW channels just wait
|
||||
until there's time for them.
|
||||
|
||||
In NORMAL channels, the most urgent operations (kicks, ops, deops) are
|
||||
performed quite soon even while bots are busy handling HIGH priority
|
||||
commands.
|
||||
|
||||
Channels shouldn't normally be HIGH priority, but if attack against
|
||||
channel is detected (like someone comes from split, gets ops and gets
|
||||
to op someone else), it's priority is set to HIGH. When channel's
|
||||
priority is HIGH, botnet does everything it can to get rid of
|
||||
unauthorized opped people as fast as possible.
|
||||
|
||||
LOW channel's priority can also be raised to HIGH, but it's priority is
|
||||
dropped back to LOW if some NORMAL channel's priority is raised to HIGH
|
||||
too.
|
||||
|
||||
Channel's priority can also be set manually:
|
||||
CHPRIORITY ircnet #channel <LOW/NORMAL/HIGH>
|
||||
|
||||
------
|
||||
|
||||
Copyright (c) 1999 Timo Sirainen
|
Loading…
Reference in New Issue
Block a user