Какой у DLINK-2500U IP
Встала задача узнать IP DSL раутера DLINK-2500U (модем сам устанавливает PPPoE соединение).
Можно, конечно, воспользоваться сервисами, типа этого checkip.dyndns.org, но хотелось в пёрвую очередь определить ip своим силами.

У модема есть telnet сервис. Можно подключиться, и "узнать" нужную информацию у модема.
В результате был написал php скрипт, который работает на web сервере.

Исходник: <? $ip = "172.16.19.27"; //modem ip $user = "admin"; $pass = "admin"; $conn = "ppp_0_33_1"; set_time_limit(6); //Modem not answered? function read_search($sock, $search) { $str = ""; while(!feof($sock)) { $cur_str = fread($sock, 65536); // echo $cur_str; $str .= $cur_str; if(@strstr($cur_str, $search) != false) break; } return $str; } $sock = fsockopen($ip, 23, $errno, $errstr, 5); if(!$sock) { echo "Error: ". $errstr . "(" . $errno . ")<br />\n"; } else { read_search($sock, "ogin:"); fwrite($sock, $user . "\n"); read_search($sock, "assword:"); fwrite($sock, $pass . "\n"); read_search($sock, "#"); fwrite($sock, "ifconfig\n"); $str = read_search($sock, $conn); $str = explode("\n", $str); //search $conn_len = strlen($conn); $found = 0; for($i = 0; $i < count($str); $i++) { if(substr($str[$i], 0, $conn_len) == $conn) { $found = 1; break; } } if($found == 1) { $strs1 = split(" ", trim($str[$i + 1])); $strs2 = split(":", $strs1[1]); $modem_ip = $strs2[1]; } //end //Logout fwrite($sock, "exit\n"); read_search($sock, ""); //end } //Like http://checkip.dyndns.org/ ?> <html><head><title>Current IP Check</title></head> <body> <?= "Current IP Address: " . $modem_ip . "\n"; ?> </body></html>
Вот что происходит при работе скрипта: BCM96338 ADSL Router (none) login: admin Password: BusyBox v1.00 (2005.04.12-18:11+0000) Built-in shell (msh) Enter 'help' for a list of built-in commands. # ifconfig br0 Link encap:Ethernet HWaddr 00:19:5B:11:56:D1 inet addr:172.16.19.27 Bcast:172.16.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING ALLMULTI MULTICAST MTU:1500 Metric:1 RX packets:102008 errors:0 dropped:0 overruns:0 frame:0 TX packets:92566 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:40975551 (39.0 MiB) TX bytes:58218590 (55.5 MiB) eth0 Link encap:Ethernet HWaddr 00:19:5B:11:56:D1 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:102334 errors:1 dropped:0 overruns:0 frame:0 TX packets:95240 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:42835240 (40.8 MiB) TX bytes:61273089 (58.4 MiB) Interrupt:23 Base address:0x2800 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:2 errors:0 dropped:0 overruns:0 frame:0 TX packets:2 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:272 (272.0 B) TX bytes:272 (272.0 B) nas_0_33 Link encap:Ethernet HWaddr 02:19:5B:11:56:D1 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:90231 errors:0 dropped:0 overruns:0 frame:0 TX packets:97359 errors:0 dropped:20 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:58885326 (56.1 MiB) TX bytes:43629570 (41.6 MiB) ppp_0_33_1 Link encap:Point-Point Protocol inet addr:88.147.186.207 P-t-P:88.147.128.92 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1 RX packets:87329 errors:0 dropped:0 overruns:0 frame:0 TX packets:96802 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:55778156 (53.1 MiB) TX bytes:40488721 (38.6 MiB) # exit <html><head><title>Current IP Check</title></head> <body> Current IP Address: 88.147.186.207 </body></html>
Думаю всё тут понятно - скрипт просто парсит вывод команды ifconfig...
 
Pekлamкa