/** * Implements Net_Finger::query() function using PEAR's socket functions * * @param string $server The finger-server to query * @param string $query The finger database object to lookup * @return mixed The data returned from the finger-server as string * or a PEAR_Error ( see Net_Socket for error codes) */ function query($server, $query) { $socket = new Net_Socket(); if (PEAR::isError($sockerror = $socket->connect($server, 79))) { $data = new PEAR_Error("Error connecting to {$server} ( Net_Socket says: " . $sockerror->getMessage() . ")", $sockerror->getCode()); } else { $query .= "\n"; $socket->write($query); $data = $socket->read(16384); $socket->disconnect(); } return $data; }
function sendCommand($address, $command) { $socket = new Net_Socket(); // open connection $socket->connect("{$address}", 23, true, 3); $socket->writeLine($command); echo "\naddress:: {$address} command {$comando}"; sleep(1); $respuesta = trim($socket->read(200)); echo "\n respuesta: {$respuesta}\n"; $socket->disconnect(); echo "\ndisconnect..\n"; }
function get_gg_status($numer_gg, $haslo_gg, $szukany_numer, &$error, &$gg_status_widocznosc) { define("GG_WELCOME", 0x1); define("GG_LOGIN", 0xc); define("GG_LOGIN60", 0x15); define("GG_LOGIN_OK", 0x3); define("GG_LOGIN_FAILED", 0x9); define("GG_NEW_STATUS", 0x2); define("GG_STATUS", 0x2); define("GG_STATUS_NOT_AVAIL", 0x1); define("GG_STATUS_NOT_AVAIL_DESCR", 0x15); define("GG_STATUS_AVAIL", 0x2); define("GG_STATUS_AVAIL_DESCR", 0x4); define("GG_STATUS_BUSY", 0x3); define("GG_STATUS_BUSY_DESCR", 0x5); define("GG_STATUS_INVISIBLE", 0x14); define("GG_NOTIFY", 0x10); define("GG_NOTIFY_REPLY", 0xc); define("GG_NOTIFY_REPLY60", 0x11); define("GG_USER_NORMAL", 0x3); define("GG_USER_BLOCKED", 0x4); define("GG_SEND_MSG", 0xb); define("GG_CLASS_MSG", 0x4); define("GG_CLASS_CHAT", 0x8); define("GG_CLASS_ACK", 0x20); define("GG_SEND_MSG_ACK", 0x5); define("GG_ACK_DELIVERED", 0x2); define("GG_ACK_QUEUED", 0x3); define("GG_RECV_MSG", 0xa); define("GG_LOGIN_FAILED2", 0xb); define("GG_ACK_MBOXFULL", 0x4); define("DISCONNECTED", 0x100); define("GG_PUBDIR50_REQUEST", 0x14); define("GG_PUBDIR50_REPLY", 0xe); define("GG_PUBDIR50_SEARCH", 0x3); // // Getting a logon server // require_once S9Y_PEAR_PATH . 'HTTP/Request.php'; serendipity_request_start(); $req = new HTTP_Request('http://appmsg.gadu-gadu.pl:80/appsvc/appmsg.asp?fmnumber=<' . $numer_gg . '>'); if (PEAR::isError($req->sendRequest()) || $req->getResponseCode() != '200') { $error = PLUGIN_GGOPIS_MSG_NOCONNTOAPPMSG . $errno . " - " . $errstr . "\n"; serendipity_request_end(); return false; } else { $buf = $req->getResponseBody(); preg_match("/\\s([\\d\\.]{8,16})\\:([\\d]{1,5})\\s/", $buf, $adres); $host = $adres[1]; $port = $adres[2]; serendipity_request_end(); } // // Connecting to a server // require_once S9Y_PEAR_PATH . 'Net/Socket.php'; $conn = new Net_Socket(); if (!$conn->connect($host, $port, null, 10)) { $error = PLUGIN_GGOPIS_MSG_CONNERROR . ": {$errno} - {$errstr}\n\n"; return false; } // // Getting data from a server - // receiving a key needed to calculate // a hash from your password // if (!($data = $conn->read(12))) { $error = PLUGIN_GGOPIS_MSG_CONNUNEXPCLOSED . "\n\n"; $conn->disconnect(); return false; } $tab = unpack("Vtyp/Vrozmiar/Vklucz", $data); // Calculating a password hash $hash = $this->calculate_hash($haslo_gg, $tab['klucz']); $data = pack("VVVVVVvVvVvCCa" . strlen(""), GG_LOGIN60, 0x20 + strlen(""), $numer_gg, $hash, GG_STATUS_AVAIL, 0x20, 0, 0, 0, 0, 0, 0x14, 0xbe, ""); // Sending a password hash - logging to a GG server $conn->write($data); if (!($data1 = $conn->read(8))) { $error = PLUGIN_GGOPIS_MSG_UNKNOWNERROR . "\n"; $conn->disconnect(); return false; } // Checking a login status $tab = unpack("Vlogin_status/Vrozmiar", $data1); if ($tab['login_status'] != GG_LOGIN_OK) { $error = PLUGIN_GGOPIS_MSG_INCORRPASSWD . "\n\n"; $conn->disconnect(); return false; } // Sending a contact list with one contact $data = pack("VVVC", GG_NOTIFY, 5, $szukany_numer, GG_USER_NORMAL); if (!$conn->write($data)) { $error = PLUGIN_GGOPIS_MSG_SENDCONTACTSERROR . "\n\n"; $conn->disconnect(); return false; } // Receiving a packet with the next packet specification $gg_opis = ''; $data = $conn->read(8); if (strlen($data) > 0) { $tab = unpack("Vtyp/Vrozmiar", $data); // Pobranie pakietu opisu // DEBUG: echo $tab['rozmiar']; $data = $conn->read($tab['rozmiar']); if ($tab['rozmiar'] > 14) { $tablica = unpack("Iuin/Cstatus/Iremoteip/Sremoteport/Cversion/Cimagesize/Cunknown/Cdescription_size/a*description", $data); // Getting a status description, and converting it from CP1250 (that's how it's encoded) to UTF8 $gg_opis = $this->cp1250_to_utf8($tablica['description']); // Getting a status itself $gg_status_flaga = $tablica['status']; } else { $tablica = unpack("Iuin/Cstatus", $data); // Getting a status $gg_status_flaga = $tablica['status']; } if (empty($gg_opis)) { $gg_opis = PLUGIN_GGOPIS_MSG_NOSTATUSDESC; } // Choosing a status icon to display switch ($gg_status_flaga) { case GG_STATUS_NOT_AVAIL: case GG_STATUS_NOT_AVAIL_DESCR: $gg_status_widocznosc = 'gg11'; break; case GG_STATUS_AVAIL: case GG_STATUS_AVAIL_DESCR: $gg_status_widocznosc = 'gg12'; break; case GG_STATUS_BUSY: case GG_STATUS_BUSY_DESCR: $gg_status_widocznosc = 'gg13'; break; default: $gg_status_widocznosc = 'gg11'; } } else { $gg_opis = PLUGIN_GGOPIS_MSG_NOSTATUSDESC; } // Closing a connection to the server $conn->disconnect(); return $gg_opis; }
/** * Read a part of response body encoded with chunked Transfer-Encoding * * @access private * @return string */ function _readChunked() { // at start of the next chunk? if (0 == $this->_chunkLength) { $line = $this->_sock->readLine(); if (preg_match('/^([0-9a-f]+)/i', $line, $matches)) { $this->_chunkLength = hexdec($matches[1]); // Chunk with zero length indicates the end if (0 == $this->_chunkLength) { $this->_sock->readLine(); // make this an eof() return ''; } } else { return ''; } } $data = $this->_sock->read($this->_chunkLength); $this->_chunkLength -= HTTP_REQUEST_MBSTRING? mb_strlen($data, 'iso-8859-1'): strlen($data); if (0 == $this->_chunkLength) { $this->_sock->readLine(); // Trailing CRLF } return $data; }
function sendCommand($address, $command, $port = 23) { if (empty($address)) { return; } $socket = new Net_Socket(); // open connection $respuesta = ''; if ($socket->connect("{$address}", $port, true, 1)) { $socket->writeLine($command); //usleep(1000000); sleep(1); $respuesta = trim($socket->read(200)); $socket->disconnect(); } return $respuesta; }
/** * @brief * @param string $data_file Saveするファイルのパス * @param string $url データのURL * @retval bool */ function fetchTgzFile($data_file, $url) { /* exec('which wget || which curl', $which, $status); $command = strpos($which[0], 'wget')!==false ? sprintf('%s -O %s %s', $which[0], $data_file, $_url) : sprintf('%s -o %s %s', $which[0], $data_file, $_url); exec($command, $result, $status); return $status === 0; */ if ($fp = fopen($data_file, 'w')) { $url = parse_url($url); if (isset($url['port']) && $url['port']) { $port = $url['port']; } else { $port = $url['scheme'] == 'https' ? '443' : '80'; } $path = isset($url['path']) && $url['path'] ? $url['path'] : '/'; $path .= isset($url['query']) && $url['query'] ? $url['query'] : ''; require_once 'Net/Socket.php'; $sock = new Net_Socket(); $connect = $sock->connect($url['host'], $port); if ($connect) { $sock->writeLine("GET {$path} HTTP/1.1"); $sock->writeLine("Host: " . $url['host']); $sock->writeLine("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)"); $sock->writeLine("Keep-Alive: 1000"); $sock->writeLine("Connection: keep-alive"); $sock->writeLine(""); $null_line = false; while (!$sock->eof()) { if ($null_line === false) { $_sock_d = $sock->readLine(); if ($_sock_d == "") { $null_line = true; } } if ($null_line === true) { $_sock_d = $sock->read(1024); fputs($fp, $_sock_d); } } $sock->disconnect(); } fclose($fp); return true; } return false; }