0

PHP は自分の IP を認識しています$_SERVER["SERVER_ADDR"]が、残りのネットワーク構成のネットマスク、ブロードキャストなどを読み取るにはどうすればよいですか?

1 つの解決策は、Linux サーバーで exec を使用して情報を取得することですが、その情報を切り分けるには非常に複雑な正規表現になります。

4

2 に答える 2

2

Ubuntu:

exec("/sbin/ifconfig", $data);
$data = implode($data, "\n");

foreach (preg_split("/\n\n/", $data) as $int) {
  preg_match("/^([A-z]*\d)\s+Link\s+encap:([A-z]*)\s+HWaddr\s+([A-z0-9:]*).*" .
    "inet addr:([0-9.]+).*Bcast:([0-9.]+).*Mask:([0-9.]+).*" .
     "MTU:([0-9.]+).*Metric:([0-9.]+).*" .
     "RX packets:([0-9.]+).*errors:([0-9.]+).*dropped:([0-9.]+).*overruns:([0-9.]+).*frame:([0-9.]+).*" .
     "TX packets:([0-9.]+).*errors:([0-9.]+).*dropped:([0-9.]+).*overruns:([0-9.]+).*carrier:([0-9.]+).*" .
     "RX bytes:([0-9.]+).*\((.*)\).*TX bytes:([0-9.]+).*\((.*)\)" .
     "/ims", $int, $regex);

    if (!empty($regex)) {
      $interface = array();

      $interface = array(); 
      $interface['name'] = $regex[1]; 
      $interface['type'] = $regex[2]; 
      $interface['mac'] = $regex[3]; 
      $interface['ip'] = $regex[4]; 
      $interface['broadcast'] = $regex[5]; 
      $interface['netmask'] = $regex[6]; 
      $interface['mtu'] = $regex[7]; 
      $interface['metric'] = $regex[8]; 

      $interface['rx']['packets'] = $regex\[9]; 
      $interface['rx']['errors'] = $regex\[10]; 
      $interface['rx']['dropped'] = $regex\[11]; 
      $interface['rx']['overruns'] = $regex\[12]; 
      $interface['rx']['frame'] = $regex\[13]; 
      $interface['rx']['bytes'] = $regex\[19]; 
      $interface['rx']['hbytes'] = $regex\[20]; 

      $interface['tx']['packets'] = $regex\[14]; 
      $interface['tx']['errors'] = $regex\[15]; 
      $interface['tx']['dropped'] = $regex\[16]; 
      $interface['tx']['overruns'] = $regex[17]; 
      $interface['tx']['carrier'] = $regex[18]; 
      $interface['tx']['bytes'] = $regex[21]; 
      $interface['tx']['hbytes'] = $regex[22];

      $interfaces[] = $interface;
    }
}

出典:正規表現パターンの解析 ifconfig

http://www.highonphp.com/regex-pattern-parsing-ifconfig

于 2013-07-02T15:19:43.060 に答える