Фон: страница должна отображать данные SNMP от различных устройств в vlan mgmt, чтобы пройти через все IP-адреса в сети. Мне нужно знать IP-адрес / сеть, интерфейс включен.
В удар это работает отлично:
/sbin/ip addr show dev eth0.1100 | /usr/bin/awk '/global/ { $2=substr($2, 1, length($2)-7); print $2 }'
Но в PHP я не могу найти способ получить IP-адрес / сеть в MGMT VLAN. Я старался:
$mgmtiface = shell_exec("/usr/bin/sudo /usr/bin/awk '$3 == 1100 {print $1}' /proc/net/vlan/config");
$mgmtnet = shell_exec("/sbin/ip addr show dev $mgmtiface | /usr/bin/awk '/global/ { $2=substr($2, 1, length($2)-7); print $2 }' ");
Но PHP не любит труба в shell_exec.
Как мне это решить?
Интересно, что определение интерфейса жестко запрограммировано, но как только я добавлю переменную с интерфейсом, она не будет работать:
$mgmtnet = shell_exec("/sbin/ip addr show dev eth0.1100 | /usr/bin/awk '/global/ { $2=substr($2, 1, length($2)-7); print $2 }' ");
shell_exec
возвращает весь вывод, включая завершающий перевод строки. Вы должны обрезать это, прежде чем подставить в следующую команду:
$mgmtiface = teim(shell_exec("/usr/bin/sudo /usr/bin/awk '$3 == 1100 {print $1}' /proc/net/vlan/config"));
$mgmtnet = trim(shell_exec("/sbin/ip addr show dev $mgmtiface | /usr/bin/awk '/global/ { $2=substr($2, 1, length($2)-7); print $2 }' "));
Если вы знаете, что команда возвращает только одну строку, вы можете использовать exec
вместо shell_exec
, Возвращает последнюю строку без новой строки, поэтому вам не нужно ее обрезать.
Других решений пока нет …