ros插件php,刚在网上看了个PHP,说是能与ROS API连接的,谁懂?

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

a5c8472a48d4f918f99fd9d27bb47814.gif

x

本帖最后由 weikun444 于 2010-12-2 08:49 编辑

刚上网看到的,PHP,能不能再这个基础上改造一下,达到注册用户、用户自行更改密码、或找回密码的页面?

例子中的文件是返回全部PPPPOE用户信息的功能。

附上2个PHP文件内容:

index.php文件内容:

require('routeROS_api.class.php');

$API = new RouterOS_api();

$API->debug = false;

if ($API->connect('192.168.1.1', 'admin', 'admin')) {

$API->write('/int/eth/getall');

$ARRAY = $API->read();

print_r($ARRAY);

$API->disconnect();

}

?>

routeros_api.class.php文件内容:

//

// RouterOS API class

// Author: Denis Basta

//

// read() function altered by Nick Barnes to take into account the placing

// of the "!done" reply and also correct calculation of the reply length.

///

// read() function altered by Ben Menking (ben@infotechsc.com); removed

// echo statement that dumped byte data to screen

//

///

// Revised by: Jeremy Jefferson (http://jeremyj.com)

// January 8, 2010

//

//        Fixed write function in order to allow for queries to be executed

//

class routeros_api {

var $debug = false;                        // Show debug information

var $error_no;                                // Variable for storing connection error number, if any

var $error_str;                                // Variable for storing connection error text, if any

var $attempts = 5;                        // Connection attempt count

var $connected = false;                // Connection state

var $delay = 3;                                // Delay between connection attempts in seconds

var $port = 8728;                        // Port to connect to

var $timeout = 3;                        // Connection attempt timeout and data read timeout

var $socket;                                // Variable for storing socket resource

/**************************************************

*

*************************************************/

function debug($text) {

if ($this->debug)

echo $text . "\n";

}

/**************************************************

*

*************************************************/

function encode_length($length) {

if ($length < 0x80) {

$length = chr($length);

}

else

if ($length < 0x4000) {

$length |= 0x8000;

$length = chr( ($length >> 8) & 0xFF) . chr($length & 0xFF);

}

else

if ($length < 0x200000) {

$length |= 0xC00000;

$length = chr( ($length >> 8) & 0xFF) . chr( ($length >> 8) & 0xFF) . chr($length & 0xFF);

}

else

if ($length < 0x10000000) {

$length |= 0xE0000000;

$length = chr( ($length >> 8) & 0xFF) . chr( ($length >> 8) & 0xFF) . chr( ($length >> 8) & 0xFF) . chr($length & 0xFF);

}

else

if ($length >= 0x10000000)

$length = chr(0xF0) . chr( ($length >> 8) & 0xFF) . chr( ($length >> 8) & 0xFF) . chr( ($length >> 8) & 0xFF) . chr($length & 0xFF);

return $length;

}

/**************************************************

*

*************************************************/

function connect($ip, $login, $password) {

for ($ATTEMPT = 1; $ATTEMPT <= $this->attempts; $ATTEMPT++) {

$this->connected = false;

$this->debug('Connection attempt #' . $ATTEMPT . ' to ' . $ip . ':' . $this->port . '...');

if ($this->socket = @fsockopen($ip, $this->port, $this->error_no, $this->error_str, $this->timeout) ) {

socket_set_timeout($this->socket, $this->timeout);

$this->write('/login');

$RESPONSE = $this->read(false);

if ($RESPONSE[0] == '!done') {

if (preg_match_all('/[^=]+/i', $RESPONSE[1], $MATCHES) ) {

if ($MATCHES[0][0] == 'ret' && strlen($MATCHES[0][1]) == 32) {

$this->write('/login', false);

$this->write('=name=' . $login, false);

$this->write('=response=00' . md5(chr(0) . $password . pack('H*', $MATCHES[0][1]) ) );

$RESPONSE = $this->read(false);

if ($RESPONSE[0] == '!done') {

$this->connected = true;

break;

}

}

}

}

fclose($this->socket);

}

sleep($this->delay);

}

if ($this->connected)

$this->debug('Connected...');

else

$this->debug('Error...');

return $this->connected;

}

/**************************************************

*

*************************************************/

function disconnect() {

fclose($this->socket);

$this->connected = false;

$this->debug('Disconnected...');

}

/**************************************************

*

*************************************************/

function parse_response($response) {

if (is_array($response) ) {

$PARSED = array();

$CURRENT = null;

for ($i = 0, $imax = count($response); $i < $imax; $i++) {

if (in_array($response[$i], array('!fatal', '!re', '!trap') ) ) {

if ($response[$i] == '!re')

$CURRENT = &$PARSED[];

else

$CURRENT = &$PARSED[$response[$i]][];

}

else

if ($response[$i] != '!done') {

if (preg_match_all('/[^=]+/i', $response[$i], $MATCHES) )

$CURRENT[$MATCHES[0][0]] = (isset($MATCHES[0][1]) ? $MATCHES[0][1] : '');

}

}

return $PARSED;

}

else

return array();

}

/**************************************************

*

*************************************************/

function array_change_key_name(&$array) {

if (is_array($array) ) {

foreach ($array as $k => $v) {

$tmp = "";

$tmp = str_replace("-","_",$k);

$tmp = str_replace("/","_",$tmp);

if ($tmp) {

$array_new[$tmp] = $v;

} else {

$array_new[$k] = $v;

}

}

return $array_new;

} else {

return $array;

}

}

/**************************************************

*

*************************************************/

function parse_response4smarty($response) {

if (is_array($response) ) {

$PARSED = array();

$CURRENT = null;

for ($i = 0, $imax = count($response); $i < $imax; $i++) {

if (in_array($response[$i], array('!fatal', '!re', '!trap') ) ) {

if ($response[$i] == '!re')

$CURRENT = &$PARSED[];

else

$CURRENT = &$PARSED[$response[$i]][];

}

else

if ($response[$i] != '!done') {

if (preg_match_all('/[^=]+/i', $response[$i], $MATCHES) )

$CURRENT[$MATCHES[0][0]] = (isset($MATCHES[0][1]) ? $MATCHES[0][1] : '');

}

}

foreach ($PARSED as $key => $value) {

$PARSED[$key] = $this->array_change_key_name($PARSED[$key]);

}

return $PARSED;

}

else {

return array();

}

}

/**************************************************

*

*************************************************/

function read($parse = true) {

$RESPONSE = array();

while (true) {

// Read the first byte of input which gives us some or all of the length

// of the remaining reply.

$BYTE = ord(fread($this->socket, 1) );

$LENGTH = 0;

// If the first bit is set then we need to remove the first four bits, shift left 8

// and then read another byte in.

// We repeat this for the second and third bits.

// If the fourth bit is set, we need to remove anything left in the first byte

// and then read in yet another byte.

if ($BYTE & 128) {

if (($BYTE & 192) == 128) {

$LENGTH = (($BYTE & 63) << 8 ) + ord(fread($this->socket, 1)) ;

} else {

if (($BYTE & 224) == 192) {

$LENGTH = (($BYTE & 31) << 8 ) + ord(fread($this->socket, 1)) ;

$LENGTH = ($LENGTH << 8 ) + ord(fread($this->socket, 1)) ;

} else {

if (($BYTE & 240) == 224) {

$LENGTH = (($BYTE & 15) << 8 ) + ord(fread($this->socket, 1)) ;

$LENGTH = ($LENGTH << 8 ) + ord(fread($this->socket, 1)) ;

$LENGTH = ($LENGTH << 8 ) + ord(fread($this->socket, 1)) ;

} else {

$LENGTH = ord(fread($this->socket, 1)) ;

$LENGTH = ($LENGTH << 8 ) + ord(fread($this->socket, 1)) ;

$LENGTH = ($LENGTH << 8 ) + ord(fread($this->socket, 1)) ;

$LENGTH = ($LENGTH << 8 ) + ord(fread($this->socket, 1)) ;

}

}

}

} else {

$LENGTH = $BYTE;

}

// If we have got more characters to read, read them in.

if ($LENGTH > 0) {

$_ = "";

$retlen=0;

while ($retlen < $LENGTH) {

$toread = $LENGTH - $retlen ;

$_ .= fread($this->socket, $toread);

$retlen = strlen($_);

}

$RESPONSE[] = $_ ;

$this->debug('>>> [' . $retlen . '/' . $LENGTH . ' bytes read.');

}

// If we get a !done, make a note of it.

if ($_ == "!done")

$receiveddone=true;

$STATUS = socket_get_status($this->socket);

if ($LENGTH > 0)

$this->debug('>>> [' . $LENGTH . ', ' . $STATUS['unread_bytes'] . '] ' . $_);

if ( (!$this->connected && !$STATUS['unread_bytes']) ||

($this->connected && !$STATUS['unread_bytes'] && $receiveddone) )

break;

}

if ($parse)

$RESPONSE = $this->parse_response($RESPONSE);

return $RESPONSE;

}

/**************************************************

*

*************************************************/

function write($command, $param2 = true) {

if ($command) {

$data = explode("\n",$command);

foreach ($data as $com) {

$com = trim($com);

fwrite($this->socket, $this->encode_length(strlen($com) ) . $com);

$this->debug('<<< [' . strlen($com) . '] ' . $com);

}

if (gettype($param2) == 'integer') {

fwrite($this->socket, $this->encode_length(strlen('.tag=' . $param2) ) . '.tag=' . $param2 . chr(0) );

$this->debug('<<< [' . strlen('.tag=' . $param2) . '] .tag=' . $param2);

}

else

if (gettype($param2) == 'boolean')

fwrite($this->socket, ($param2 ? chr(0) : '') );

return true;

}

else

return false;

}

}

?>

两个文件打包下载:

89051de8c79fac255405831855309561.gif

ros_php.rar

(2.76 KB, 下载次数: 136)

2010-12-2 08:48 上传

点击文件名下载附件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值