telnet 명령을 통해 내 라우터에서 WAN IP를 가져 오기 위해 PHPTelnet.php 클래스 (http://www.geckotribe.com/php-telnet/)를 사용하고 있습니다. 그것은 이렇게 간다 :PHP를 사용하는 텔넷 - echo와 함께 작동합니까?
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;
그것은 작동한다. 내가 $ 결과를 echo 할 때 다음과 같은 많은 설정을 볼 수있다.
sys ddns display DDNS 상태 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 1월 1일, 내가 XXX.XXX.XXX.XXX (WAN IP)을 받고 만에 intrested 해요 때문에
좋은 1970 RETCODE = 나는 $ 결과에서 IP를 얻을 수는 preg_match을한다. 여기에 문제가 온다. 나는 항상이 오류가 발생한다.
기본적으로 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 디스플레이', $ 결과)에서 직접 제공되는 $ 결과;은 에코 만 가능하지만 문자열로는 사용할 수 없습니다. 왜? 이것의 핵심은 무엇입니까? 실제 텔넷 응답을 어떻게 얻을 수 있습니까?
첫째로'[^ \ "]'은 검색하는 데이터와 관련이 없습니다. (표시되는 문자열에 이중 따옴표가 없습니다. 무엇이든 일치), 두 번째로 정규 표현식의 선두 백 슬래시도 의미가 없으며 (이스케이프 할 것이 없습니다) 셋째, http://whatismyipaddress.com과 같은 것을 사용할 수있을 때 공용 IP를 찾기 위해 불필요하게 복잡한 방법 인 것처럼 보입니다./api (무료로 동일한 기능을 제공하는 수많은 서비스가 있습니다) – DaveRandom
정규 표현식이 잘못 작성되었음을 알고 있습니다. 스크립트를 실제로 작동시킬 수 있는지 빨리 이해할 수 있도록 테스트 용으로 재활용했습니다. 내 공개 IP : D 내가하고있는 일은 더 복잡한 일이다. 나는 동적 인 IP하에 홈 서버를 가지고있다. 매 60 초마다 텔넷을 통해 ds 스크립트는 현재 공개 IP를 얻고, 변경된 경우 API를 통해 등록 기관과 연결된 실제 도메인의 A 레코드도 업데이트합니다. 이 방법으로 나는 home.mydomain.com을 방문하여 항상 내 홈 서버, 모든 PC 및 심지어 휴대폰에 액세스 할 수 있습니다. – user1274113