簡體   English   中英

PHP:如何獲取特定VLAN的IP地址

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM