【发布时间】:2015-09-04 13:27:44
【问题描述】:
背景:页面应显示来自管理 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 不喜欢pipe in 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,管道对我来说工作得很好。 -
你用 ip addr 试过我的例子了吗?使用像 eth0 这样的任何其他接口而不是 $mgmtiface 应该显示其 ipaddress 的前三个部分
-
我在 OS X 上,我没有
ip addr命令。 -
我测试了
shell_exec("echo foobar | grep -o ba");并且管道正常工作。 -
对,似乎是变量而不是管道在制造麻烦。我更新了问题