php - 需要在 Ubuntu 上使用 PHP 查找网络接口(interface)的 IP 地址

标签 php linux networking

当我的计算机在网络上时,我需要帮助来查找它的 IP 地址。我正在构建一个信息亭类型的系统,该系统将被放置在不同的位置,并且我需要能够使用 Web 浏览器在本地网络上查找该计算机的 IP 地址。

如果我使用 $_SERVER['SERVER_ADDR']我通过该机器上的本地浏览器 (127.0.0.1) 获得了要连接的 IP 地址。

我无法调用并获取公共(public) IP,因为这些设备可能位于路由器后面,并且我不想要路由器的公共(public) IP 地址。

我需要在服务器上找到那个盒子的 IP 地址(例如:192.168.0.xxx)

我确实知道,当我从终端执行“ip addr show”时,我得到

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 身份运行此应用程序。

最佳答案

正如 exec() 所记录的那样, 函数只返回 exec'd 命令的最后一行输出。要捕获所有输出,您必须使用函数的可选第二个参数:

$last_line = exec('ip addr show', $full_output);
                                  ^^^^^^^^^^^^
$full_output将是 exec 程序的输出行数组。

关于php - 需要在 Ubuntu 上使用 PHP 查找网络接口(interface)的 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18773452/

相关文章:

php - 用于德语的 pspell 和 aspell with php

Linux 管道查找和 md5sum 不发送输出

c++ - 一般如何查明客户端是否分配了静态IP或者它是dhcp客户端

windows - 公开暴露本地[ASP Web-] API

android - 如何在我的应用程序 android 上检查我的互联网访问

c# - 从未收到 UDP 广播 - 代码有什么问题?

php,mysql - 从下拉列表和数据库中删除项目

php - 设置上次登录日期

javascript - 使用 JavaScript 创建 Stripe Charge

linux - awk strftime 返回时间