【发布时间】:2013-09-17 09:10:13
【问题描述】:
当我的计算机在网络上时,我需要帮助来查找它的 IP 地址。我正在构建一个信息亭类型的系统,该系统将被放置在不同的位置,并且我需要能够使用 Web 浏览器在本地网络上查找该计算机的 IP 地址。
如果我使用$_SERVER['SERVER_ADDR'],我会通过该机器上的本地浏览器 (127.0.0.1) 获得要连接的 IP 地址。
我无法呼叫并获取公共 IP,因为这些设备可能位于路由器后面,并且我不想要路由器的公共 IP 地址。
我需要在服务器上找到那个盒子的IP地址(例如:192.168.0.xxx)
我确实知道,当我从终端执行“ip addr show”时,我会得到 p>
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 61:a6:4d:63:a2:80 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.211/24 brd 192.168.0.255 scope global em1
inet6 fe80::62a4:4cff:fe64:a399/64 scope link
valid_lft forever preferred_lft forever
当我尝试时:
$command="ip addr show";
$localIP = exec ($command);
$localIP 出现“valid_lft forever preferred_lft forever”,但没有其他信息。如果我可以将整个内容放入$localIP,那么我可以过滤掉 inet IP 地址,但它不会给我所有内容。
在尝试执行“ip addr show”命令时是否有更简单的方法或我缺少的东西?另外,我在用户 apache 下运行,无法以 root 身份运行此应用程序。
【问题讨论】:
-
apache 以什么用户身份运行?您的用户可能无权执行“ip addr show”并返回结果。
-
为什么需要主机的IPv4?不能只使用 DNS 吗?
-
请记住,一台机器可能有多个网络接口,每个接口上可能有任意数量的 IP,包括零个。
标签: php linux networking