Created
February 8, 2013 17:01
-
-
Save cschaba/4740380 to your computer and use it in GitHub Desktop.
PHP: parse output of ifconfig (tested with Ubuntu Linux)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// from http://www.highonphp.com/regex-pattern-parsing-ifconfig | |
$data = <<<EOF | |
eth0 Link encap:Ethernet HWaddr 00:50:56:33:B6:D2 | |
inet addr:192.168.12.103 Bcast:192.168.12.255 Mask:255.255.255.0 | |
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 | |
RX packets:1337 errors:0 dropped:0 overruns:0 frame:0 | |
TX packets:985 errors:0 dropped:0 overruns:0 carrier:0 | |
collisions:0 txqueuelen:1000 | |
RX bytes:1657887 (1.5 MiB) TX bytes:104418 (101.9 KiB) | |
ra0 Link encap:Ethernet HWaddr 00:50:56:33:B6:D3 | |
inet addr:192.168.12.103 Bcast:192.168.12.255 Mask:255.255.255.0 | |
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 | |
RX packets:1337 errors:0 dropped:0 overruns:0 frame:0 | |
TX packets:985 errors:0 dropped:0 overruns:0 carrier:0 | |
collisions:0 txqueuelen:1000 | |
RX bytes:1657887 (1.5 MiB) TX bytes:104418 (101.9 KiB) | |
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:291 errors:0 dropped:0 overruns:0 frame:0 | |
TX packets:291 errors:0 dropped:0 overruns:0 carrier:0 | |
collisions:0 txqueuelen:0 | |
RX bytes:1243639 (1.1 MiB) TX bytes:1243639 (1.1 MiB) | |
EOF; | |
$interfaces = array(); | |
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['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'] = (int) $regex[9]; | |
$interface['rx']['errors'] = (int) $regex[10]; | |
$interface['rx']['dropped'] = (int) $regex[11]; | |
$interface['rx']['overruns'] = (int) $regex[12]; | |
$interface['rx']['frame'] = (int) $regex[13]; | |
$interface['rx']['bytes'] = (int) $regex[19]; | |
$interface['rx']['hbytes'] = (int) $regex[20]; | |
$interface['tx']['packets'] = (int) $regex[14]; | |
$interface['tx']['errors'] = (int) $regex[15]; | |
$interface['tx']['dropped'] = (int) $regex[16]; | |
$interface['tx']['overruns'] = (int) $regex[17]; | |
$interface['tx']['carrier'] = (int) $regex[18]; | |
$interface['tx']['bytes'] = (int) $regex[21]; | |
$interface['tx']['hbytes'] = (int) $regex[22]; | |
$interfaces[] = $interface; | |
} | |
} | |
print_r($interfaces); |
Change the preg_split regex to:
preg_split("/\r?\n\r?\n/s", $data)
Should solve the issue.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
it only parses eth0, how come ra0 does not show in $interfaces output?