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;
它的工作原理。当我回显$结果我可以看到许多设置像这样:
sys ddns display DDNS Status state = 0,flags = 1 pauseTime = 0,timerID = 0 startcnt = 2,stopcnt = 1 retrycnt = 0,eventqcnt = 0 socketID = -1 DomainName =电子邮件地址=更新IP = XXX.XXX.XXX.XXX更新时间= 00:00:00星期四1970年1月1日RETCODE =好
因为我只得到XXX.XXX.XXX.XXX(WAN IP)intrested我做的preg_match从$结果得到IP地址。问题来了。我总是得到这个错误:
Undefined offset: 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显示',$结果)附带的$结果;只能回显但不能用作字符串。为什么?这是什么意思?我怎样才能真正获得Telnet响应作为真正的变量?
+0
首先在'[^ \“]'似乎没有任何裸露相关性要搜索的数据(没有双引号你展示字符串中的任何,这样就匹配任何东西),其次,正则表达式中的主要反斜杠也没有意义(没有什么可以逃脱),第三,这似乎是一个不必要的复杂方式来找到你的公共IP,当你可以使用像http://whatismyipaddress.com/api(有很多免费提供相同功能的服务) –
+0
我知道正则表达式制作得不好,我只是为了测试目的而回收它,只是为了快速理解脚本是否真的可以工作。无论如何,大声笑我知道如何获得我的公共IP地址:D我做的是一个更复杂的事情,我有一个家庭服务器在动态ip下,每60个secon ds通过telnet脚本获取当前的公共IP地址,如果通过API更改,它还会更新我与注册商的真实域的A记录。通过这种方式,我总是可以通过访问home.mydomain.com访问我的家庭服务器,我的所有PC甚至手机。 –