PHP獲取IP與連接數,并獲取IP所在地址

6e72 9年前發布 | 2K 次閱讀 PHP

php-cli下執行 windows下的運維工具,改成linux也很方便 用PHP獲取IP與連接數,并獲取IP所在地址,主要針對80端口,其他端口也能看到 開啟反解ip可判斷是否是蜘蛛。

<?php
//獲取連接數最高的ip的詳細信息
$top = 10;
//獲取ip的詳細信息
$get_location = true;
//反解ip,用于獲取蜘蛛,開啟后速度較慢
$reverse = FALSE;
//$reverse = TRUE;

ini_set('extension_dir',dirname(FILE)); ini_set('enable_dl',TRUE); if(!dl("php_curl.dll")){ exit('Can\'t load curl.'); } $content = netstat -an -p TCP; $regex = "/\s+TCP\s+\d+.\d+.\d+.\d+:(\d+)\s+(\d+.\d+.\d+.\d+):\d+\s+/sm";

$table = array(); //1、連接數/2、本機ip/3、對方ip /**

  • 端口/ip是唯一的 */ if(preg_match_all($regex,$content,$result)){ foreach($result[1] as $i=>$port){

     if(isset($table[$port.':'.$result[2][$i]]))
         $table[$port.':'.$result[2][$i]]++;
     else
         $table[$port.':'.$result[2][$i]] = 1;
    

    } $curl = curl_init(); curl_setopt($curl,CURLOPT_TIMEOUT,5); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);

    $i = 0; $count = 0; if(asort($table))

     foreach($table as $key=>$times){
         $ip = substr(strstr($key,':'),1);
         $port = substr($key,0,strpos($key,':'));
         $i++;
         echo "\r\n連接數:",$times,' - ',$key;
         if(!$get_location || $i<count($table)-$top){
             continue;
         }
         if($port=='80') $count += $times;
         if($ip!=='127.0.0.1' || $ip!=='0.0.0.0'){
             $host = $reverse ? gethostbyaddr($ip) : $ip;
             if($host==$ip){
                 curl_setopt($curl,CURLOPT_URL, "http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=txt&ip=".$ip);
                 $location = curl_exec($curl);
                 echo "(".preg_replace('/(\s|\d|\.)/','',$location).")";
             } else {
                 echo "(".$host.")";
             }
         }
     }
    

    echo "\r\n",'All(80):',$count; }</pre>

 本文由用戶 6e72 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!