Sapete come posso creare un piccolo bot in php che riesca ad entrare in un hub della rete dc?.
In modo da poter avere la lista degli user presenti nell'hub su pagina.
Grazie anticipatamente.
Io ho un piccolo script per lo più una classe di funzioni che tramite socks si connette,solo che non sò come fare ad interpretare i risultati.
Codice PHP:
<?php
error_reporting("");
class DC_Stats {
var $hub = array();
var $config = array();
var $bot = array();
var $socket;
var $address;
var $open_sock = FALSE;
var $S_DATA;
var $reading = 0;
var $max_read = 30;
function open($o_hub, $o_config, $o_bot) {
$this->open_sock = TRUE;
$this->hub = $o_hub;
$this->config = $o_config;
$this->bot = $o_bot;
$this->debuglog("----- ".date("d/m/Y")." ".date("H:i:s")." -----\r\n");
$this->printex("----- ".date("d/m/Y")." ".date("H:i:s")." -----<br>", 1);
$this->debuglog("Aperta la connessione al socket");
$this->printex("Aperta la connessione al socket", 1);
}
function connect() {
if (!$this->open_sock) {
$this->debuglog("Non è stata aperta la connessione al socket");
$this->printex("Non è stata aperta la connessione al socket", 0);
die();
}
if (array_search("sockets", get_loaded_extensions()) != "") { # Controlla se è attivi sockets
$this->address = gethostbyname($this->hub['host']); # Ritorna IP del Indirizzo Hub
$this->socket = socket_create(AF_INET, SOCK_STREAM, 0);
if (!$this->socket) {
$this->debuglog("Creazione di socket fallita");
$this->printex("Creazione di socket fallita", 0);
$this->debuglog("Descrizione errore: ".socket_strerror(socket_last_error()));
$this->printex("Descrizione errore: ".socket_strerror(socket_last_error()), 0);
$this->debuglog("Numero errore: ".socket_last_error());
$this->printex("Numero errore: ".socket_last_error(), 0);
die();
} elseif (!socket_connect($this->socket, $this->address, $this->hub['port'])) {
$this->debuglog("Connesione fallita all'indirizzo ".$this->hub['host'].":".$this->hub['port']."
(".$this->address.":".$this->hub['port'].")");
$this->printex("Connesione fallita all'indirizzo ".$this->hub['host'].":".$this->hub['port']." (".$this->address.":".$this->hub['port'].")",
0);
$this->debuglog("Descrizione errore: ".socket_strerror(socket_last_error()));
$this->printex("Descrizione errore: ".socket_strerror(socket_last_error()), 0);
$this->debuglog("Numero errore: ".socket_last_error());
$this->printex("Numero errore: ".socket_last_error(), 0);
die();
} else {
$this->debuglog("Connessione avvenuta con successo");
$this->printex("Connessione avvenuta con successo", 1);
$this->printex("<font style='font-weight:bold'>HOST: </font>".$this->hub['host'], 1);
$this->debuglog("HOST: ".$this->hub['host']);
$this->printex("<font style='font-weight:bold'>IP: </font>".$this->address, 1);
$this->debuglog("IP: ".$this->address);
$this->printex("<font style='font-weight:bold'>PORTA: </font>".$this->hub['port'], 1);
$this->debuglog("PORT: ".$this->hub['port']);
}
} else {
$this->printex("Sockets non attivi", 0);
$this->debuglog("Sockets non attivi");
die();
}
}
function close() {
socket_close($this->socket);
$this->debuglog("Connessione chiusa.");
$this->printex("Connessione chiusa.", 1);
}
function listen() {
$this->debuglog("Ricezzione dati in corso...");
$this->printex("Ricezzione dati in corso...", 1);
$this->read();
}
function read() {
if ($this->reading > $this->max_read) {
$this->debuglog("");
$this->printex("", 1);
$this->close();
die();
}
if (substr($this->S_DATA, -1) != "|") {
if (strlen($this->S_DATA) < 50000) {
$this->S_DATA .= socket_read($this->socket, 5000);
$this->reading++;
if ($this->S_DATA != "") {
$this->debuglog("Dati ricevuti.");
$this->printex("Dati ricevuti.", 1);
}
$this->command();
} else {
$this->command();
}
} else {
$this->command();
}
}
function command() {
$list_arr = explode(" ", $this->S_DATA);
$cmd = strtoupper(substr($list_arr[0], 1));
$this->debuglog("Ricevuto: ".$this->S_DATA);
$this->printex("Ricevuto: ".$this->S_DATA, 1);
array_shift($list_arr);
$params = implode(" ", $list_arr);
$params = explode("|", $params);
$params = $params[0];
switch ($cmd) {
case "LOCK":
$this->write("\$Key ".$this->lock2key($params)."|");
$this->S_DATA = "";
$this->read();
break;
case "HUBNAME":
$this->write("\$ValidateNick ".$this->bot['nick']."|");
$this->S_DATA = "";
$this->read();
break;
case "GETPASS":
$this->debuglog("Nick registrato.");
$this->printex("Nick registrato.", 1);
break;
case "LOGEDIN":
$this->debuglog("LOGIN SUCCESSFUL! (USER: ".$this->bot['nick']." - PASS: ".$this->config['password'].")");
$this->printex("LOGIN SUCCESSFUL! (USER: ".$this->bot['nick']." - PASS: ".$this->config['password'].")", 1);
$this->S_DATA = "";
$this->read();
break;
case "HELLO":
if ($params == $this->bot['nick']) {
$this->write("\$Version 2.0|");
$this->write("\$MyINFO \$ALL ".$this->bot['nick']." ".$this->bot['description']." <++ V:2.0,M:A,H:1/0/0,S:3>\$
\$".$this->bot['speed'].chr(1)."\$".$this->bot['email']."\$".$this->bot['share']."\$|");
$this->write("\$GetNickList|");
}
$this->S_DATA = "";
$this->read();
break;
case "NICKLIST":
$nick_list = explode('$$', $params);
$this->debuglog("Totale user nel hub: ".count($nick_list));
$this->printex("Totale user nel hub: ".count($nick_list), 1);
break;
case "OPLIST":
$op_list = explode('$$', $params);
$this->debuglog("Totale operatori nel hub: ".count($op_list));
$this->printex("Totale operatori nel hub: ".count($op_list), 1);
$this->S_DATA = "";
$this->read();
break;
case "MYINFO":
$this->S_DATA = "";
$this->read();
break;
case "QUIT":
$this->S_DATA = "";
$this->read();
break;
case "SEARCH":
$this->S_DATA = "";
$this->read();
break;
case "FORCEMOVE":
$this->debuglog("Redirect non supportato");
$this->printex("Redirect non supportato", 0);
break;
default:
$this->S_DATA = "";
$this->read();
break;
}
}
function write($data) {
$result = socket_write($this->socket, $data, strlen($data));
$this->debuglog("INVIO: ".$data);
$this->printex("INVIO: ".$data, 1);
}
function printex($txt, $type) {
if ($type == 1) { # Stampa informazioni
echo "<font color='".$this->config['color_text']."'>".$txt."</font><br>";
} elseif ($type == 0) { # Stampa errore
echo "<font color='".$this->config['color_error']."'>".$txt."</font><br>";
}
}
function debuglog($data) {
if ($this->config['debug'] = 1) {
if ($data != "") {
$data .= "\r\n";
$file = fopen("logs/".$this->config['log'], "a");
fwrite($file, $data);
fclose($file);
}
}
}
function lock2key($_LOCK) {
$pk = stristr ($_LOCK, 'Pk=');
$_LOCK = str_replace ($pk, '', $_LOCK);
$_LOCK = substr ($_LOCK, 0, -1);
$lockLength = strlen ($_LOCK);
$h = ord($_LOCK{0}) ^ ord( $_LOCK{ $lockLength - 1} ) ^ ord( $_LOCK{ $lockLength - 2} ) ^ 5;
while ($h > 255) {
$h = $h - 256;
}
$h = (($h<<4) & 240) | (($h>>4) & 15);
$a = $h;
if ($a == '126' or $a == '124' or $a == '96' or $a == '36' or $a == '5' or $a == '0') {
$LockToKey = "/%DCN";
if ($a < 100)
$LockToKey .="0";
if ($a < 10)
$LockToKey .="0";
$LockToKey .= $a;
$LockToKey .= "%/";
} else {
$LockToKey = chr ($a);
}
for ($j = 1; $j < strlen($_LOCK); $j++) {
$h = ord($_LOCK{$j}) ^ ord($_LOCK{$j-1});
while ($h > 255) {
$h = $h - 256;
}
$h = (($h<<4) & 240) | (($h>>4) & 15);
$a = $h;
if ($a == '126' or $a == '124' or $a == '96' or $a == '36' or $a == '5' or $a == '0') {
$LockToKey .= "/%DCN";
if ($a < 100)
$LockToKey .="0";
if ($a < 10)
$LockToKey .="0";
$LockToKey .= $a;
$LockToKey .= "%/";
} else {
$LockToKey .= chr ($a);
}
}
return $LockToKey;
}
}
?>
File di configurazione
Codice PHP:
<?php
$config['debug'] = 1; #0=disattivo, 1=attivo
$config['password'] = "flooder"; # pass bot
$config['log'] = "debug(".date("d-m-Y H-i-s").").log"; #Nome log
$config['color_text'] = "#000000"; #Colore testo
$config['color_error'] = "#FF0000"; #Colore errore
$bot['nick'] = ""; #Nome bot
$bot['description'] = "Bot"; #Descrizione bot
$bot['email'] = "nessuna@nessuna.it"; #Email bot
$bot['speed'] = "$nickname"; #Tipo connessione del bot. Es. DSL, LAN(T1), LAN(T3), Cable, 56k, ecc...
$bot['share'] = 42212254720; #Share bot. 1kb=1024 - 1mb=1024*1024 1gb=1024*1024*1024 - 1tb=1024*1024*1024*1024
$hub['host'] = ""; #Indirizzo del hub
$hub['port'] = "411"; #Porta del hub
#########################################
############ NON MODIFICARE #############
/**/ include("DC_Stats.Class.php"); /**/
/**/ $dc = new DC_Stats; /**/
/**/ $dc->open($hub, $config, $bot); /**/
/**/ $dc->connect(); /**/
/**/ $dc->listen(); /**/
/**/ /**/
#########################################
#########################################
?>
Se potete modificare questo non sò,in modo che mi dia un risultato a mò di client gui.
edit: sposto in livello3!! Faber