bash — PHP: как получить IP-адрес конкретной VLAN

Фон: страница должна отображать данные 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 }' ");

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, Возвращает последнюю строку без новой строки, поэтому вам не нужно ее обрезать.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector