#!/usr/local/bin/perl -w use Socket; use MIME::Base64 (); #--- どこから取得するか --- $mode = '0'; # '0':WarpStar WDR85FH、'1':ifconfigコマンド $debug = '0'; # '0':常用、'1':ルーターから抽出する時のデバッグ用 #-------------------------- #--- ifconfigで取得する時の情報 --- $adapter = '1'; # ifconfigで取得する時に、何枚目のEthernet adapterか指定 #---------------------------------- #--- ルーターから取得する時の情報 --- $connect_host = '192.168.0.1'; $doc_name = 'info_main.html'; #xxxxxにルーター操作用のパスワードを設定 $basic_pass = MIME::Base64::encode("admin:xxxxx"); $port = getservbyname('http', 'tcp'); # $port = "80"; #------------------------------------ $ip = ""; #IPアドレス if( $mode eq "0" ) { &get_from_router; } else { &get_from_command; } if( $ip ne "" ) { print "http://$ip/\r\n"; print "http://$ip:8080/\r\n"; print "http://$ip/cgi-bin/xxxxx/\r\n"; } else { print "IPアドレスが取得できませんでした\r\n"; } exit(0); # WarpStar WDR85FH から取得する sub get_from_router { $ip = ""; #IPアドレス $iaddr = inet_aton($connect_host) || die "$connect_hostは存在しないホストです。\r\n"; $sock_addr = pack_sockaddr_in($port, $iaddr); socket(SOCKET, PF_INET, SOCK_STREAM, 0) || die "ソケットを生成できません。\r\n"; connect(SOCKET, $sock_addr) || die "$connect_host の ポート$portに接続できません。\r\n"; # ファイルハンドルSOCKETをバッファリングしない select(SOCKET); $|=1; select(STDOUT); #--- HTTPリクエスト送信 --- print SOCKET "GET /$doc_name HTTP/1.0\r\n"; print SOCKET "User-Agent: ipchecker/1.00 (HTTP)\r\n"; print SOCKET "Authorization: Basic $basic_pass\r\n"; print SOCKET "\r\n"; #--- データ受信 --- # ヘッダスキップ while (){ m/^\r\n$/ && last; } if( $debug eq "0" ) { # IPアドレスを抽出する $n = 2; while (){ $i = index($_, 'WAN側 IPアドレス'); if( $i != -1 ) { $n--; if( $n == 0 && $i != -1 ) { $tp = ; #print $tp; $ip = ""; #IPアドレス for( $j=1;$j<=length($tp);$j++ ) { $k = substr($tp,$j,1); if( (($k ge "0") && ($k le "9")) || $k eq "." ) { $ip = $ip . $k; } } last; } } } } #--- 残りのデータを破棄 --- while (){ if( $debug ne "0" ) { print $_; } } } # ipconfig コマンドの結果から取得する sub get_from_command { $ip = ""; #IPアドレス $tp=`ipconfig`; while( $adapter > 0 && ($i = index($tp, 'IP Address')) != -1 ) { $adapter--; if( $adapter == 0 ) { # 数値を見つけるまで進める for( ;;$i++ ) { $k = substr($tp,$i,1); if( (($k ge "0") && ($k le "9")) ) { last; } } for( ;;$i++ ) { $k = substr($tp,$i,1); if( (($k ge "0") && ($k le "9")) || $k eq "." ) { $ip = $ip . $k; } else { last; } } last; } else { $tp = substr($tp,$i+1); } } }