[英]PHP: How to get the IP address of a specific VLAN
背景:頁面應顯示來自mgmt vlan中各種設備的SNMP數據,以循環訪問網絡中的所有IP地址。 我需要知道IP地址/網絡,該接口已打開。
在Bash中,這很完美:
/sbin/ip addr show dev eth0.1100 | /usr/bin/awk '/global/ { $2=substr($2, 1, length($2)-7); print $2 }'
但是在PHP中,我找不到找到mgmt vlan的IP地址/網絡的方法。 我試過了:
$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
。 它返回最后一行,沒有換行符,因此您不需要修剪它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.