2013-07-02 2 views
0

PHP знает собственный IP-адрес в $_SERVER["SERVER_ADDR"], но как я могу прочитать остальную сетевую маску сетевой конфигурации, трансляцию и т. Д.?Прочитайте сетевую конфигурацию с помощью PHP

Одним из решений было бы получить информацию с Exec на моем сервере Linux, но это будет довольно сложным регулярное выражение, чтобы сократить эту информацию, кроме

ответ

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; 
    } 
} 

Источник: Regular Expression Pattern Синтаксический Ifconfig

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

+0

круто спасибо, что работает – rubo77

0

Вы можете использовать функцию exec() запустить IPCONFIG или Ifconfig в зависимости от ваш сервер и если у вас есть разрешение или нет. Затем вам нужно будет очистить результаты от возвращаемого массива строк.

exec('ifconfig',$output); //use ipconfig for windows 
print_r($output); 

Если вы не хотите нам ifconfig вы можете создать собственный сценарий, который вы можете использовать exec() с но имеет более чистый выход для облегчения манипуляций.

+0

Вы можете указать на опасность использования 'Exec()' и тот факт, что если сервер является общим хостом, у которого, скорее всего, не будет доступа к нему – RMcLeod

+0

@RMcLeod Да, я полностью согласен, поэтому я сказал: «Если у вас есть разрешение». – Pitchinnate

+0

http://stackoverflow.com/questions/6197845/how-should-i-or-should-i-use-php-functions-considered-dangerous – Pitchinnate

Смежные вопросы