使用PHP进行Telnet - 它只适用于echo?

时间:2013-07-06 23:49:07

标签: php string variables telnet

我正在使用PHPTelnet.php类(http://www.geckotribe.com/php-telnet/)通过telnet命令从我的路由器获取WAN IP。它是这样的:

require_once "PHPTelnet.php";

$telnet = new PHPTelnet();
$telnet->show_connect_error=0;

$result = $telnet->Connect('192.168.0.1','username','password');

switch ($result) {
case 0:
$telnet->DoCommand('sys ddns display', $result);
echo $result;
$telnet->DoCommand('exit', $exit);
echo $exit;
$telnet->Disconnect();
break;

有效。当我回显$ result时,我可以看到许多这样的设置:

sys ddns display DDNS Status state = 0,flags = 1 pauseTime = 0,timerID = 0 startcnt = 2,stopcnt = 1 retrycnt = 0,eventqcnt = 0 socketID = -1 DomainName = eMail Address = update IP = XXX.XXX.XXX.XXX 更新时间= 00:00:00周四1970年1月1日retCode = good

由于我只对获得 XXX.XXX.XXX.XXX (WAN IP)感兴趣,我会使用preg_match从$ result获取IP。这就是问题所在。我总是得到这个错误:

  

未定义的偏移量:1

基本上这意味着preg_match找不到任何匹配项。我使用此代码来匹配IP:

$regex = '/\IP = ([^\"]*?)\ /';
preg_match($regex, $result, $matches);

它正确匹配IP。事实上,如果我尝试使用这样的东西,它就会起作用。

$result = "sys ddns display DDNS Status state = 0, flags = 1 pauseTime = 0, timerID = 0 startcnt = 2, stopcnt = 1 retrycnt = 0, eventqcnt = 0 socketID = -1 DomainName = eMail Address = update IP = XXX.XXX.XXX.XXX update time = 00:00:00 Thu. Jan. 01, 1970 retCode = good tc> ";
$regex = '/\IP = ([^\"]*?)\ /';
preg_match($regex, $result, $matches);
print_r($matches);

问题似乎直接来自 $ telnet-> DoCommand('sys ddns display',$ result); 的$ result只能被回显但不能用作字符串。为什么?这有什么意义?我怎样才能真正将telnet响应作为真正的变量?

1 个答案:

答案 0 :(得分:0)

固定。这是我的懒惰正则表达式的一个问题。它适用于此:

function GetIP($string)
{
    preg_match("/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/", $string, $matches);
    $ip = $matches[0];
    return $ip;
}