如何获取系统的本地 IP

我需要获得计算机的本地 IP,如192。 PHP 可以做到这一点吗?

I need IP address of system running the script, but I do not need the external IP, I need his local network card address.

266205 次浏览
$_SERVER['SERVER_ADDR']

这取决于你所说的“局部”是什么意思:

如果您所说的本地是指执行 PHP 代码的服务器/系统的地址,那么仍然有两种方法可以讨论。如果 PHP 是通过 Web 服务器运行的,那么您可以通过读取 $_SERVER['SERVER_ADDR']来获得服务器地址。如果 PHP 是通过命令行接口运行的,那么您可能必须执行 shell —— ipconfig(Windows)/ifconfig(* nix)并取出地址。

如果你说的本地是指网站访问者的远程地址,而不是他们的外部 IP 地址(因为你明确说了192。*) ,那你就不走运了。NAT 路由的关键就是隐藏那个地址。您无法识别 IP 地址后面的个别计算机的本地地址,但是有一些技巧(用户代理,可能是 Mac 地址)可以帮助区分是否有多台计算机从同一 IP 访问。

试试这个

$localIP = gethostbyname(trim('hostname'));

试试这个(如果你的服务器是 Linux) :

$command="/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'";
$localIP = exec ($command);
echo $localIP;

这是一篇老文章,但请看下面这篇文章:

function getLocalIp()
{ return gethostbyname(trim(`hostname`)); }

例如:

die( getLocalIp() );

发现它在另一个网站,不要删除修剪命令,因为否则你会得到计算机的名称。

背景(特别引用) : 它之所以能够工作,是因为 PHP 会尝试将这些“特殊引号”(反勾)之间的任何内容作为 shell 命令运行,并返回结果输出。

gethostbyname(trim(`hostname`));

与实际操作非常相似(但效率更高) :

$exec = exec("hostname"); //the "hostname" is a valid command in both windows and linux
$hostname = trim($exec); //remove any spaces before and after
$ip = gethostbyname($hostname); //resolves the hostname using local hosts resolver or DNS
$_SERVER['REMOTE_ADDR']
  • 返回当前脚本的文件名,其路径相对于根目录

  • SERVER_PROTOCOL Returns the name and revision of the page-requested protocol

  • 返回用于访问页的请求方法

  • 返回执行当前脚本的根目录

主机名(1)可以告诉 IP 地址: hostname --ip-address,或者像人们说的那样,最好使用 hostname --all-ip-addresses

You may try this as regular user in CLI on Linux host:

function get_local_ipv4() {
$out = split(PHP_EOL,shell_exec("/sbin/ifconfig"));
$local_addrs = array();
$ifname = 'unknown';
foreach($out as $str) {
$matches = array();
if(preg_match('/^([a-z0-9]+)(:\d{1,2})?(\s)+Link/',$str,$matches)) {
$ifname = $matches[1];
if(strlen($matches[2])>0) {
$ifname .= $matches[2];
}
} elseif(preg_match('/inet addr:((?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3})\s/',$str,$matches)) {
$local_addrs[$ifname] = $matches[1];
}
}
return $local_addrs;
}


$addrs = get_local_ipv4();
var_export($addrs);

产出:

array (
'eth0' => '192.168.1.1',
'eth0:0' => '192.168.2.1',
'lo' => '127.0.0.1',
'vboxnet0' => '192.168.56.1',
)

CLI 的

PHP < 5.3.0

$localIP = getHostByName(php_uname('n'));

PHP > = 5.3.0

$localIP = getHostByName(getHostName());

我在服务器端 php (从 Linux 终端运行)中试图解决这个问题

我把‘ ifconfig’解压缩到 IP 地址。

这就是:

$interface_to_detect = 'wlan0';
echo explode(' ',explode(':',explode('inet addr',explode($interface_to_detect,trim(`ifconfig`))[1])[1])[1])[0];

当然,还要将“ wlan0”更改为所需的网络设备。

我的输出是:

192.168.1.5
$localIP = gethostbyname(trim(exec("hostname")));

我尝试在 Windows PC 和它的工作,也认为将在 Linux 上工作。

获取本地机器外部 IP 地址的一种可靠方法是查询路由表,尽管在 PHP 中没有直接的方法。

然而,我们可以通过将一个 UDP 套接字绑定到一个公共地址,并获得它的地址来让系统为我们做到这一点:

$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_connect($sock, "8.8.8.8", 53);
socket_getsockname($sock, $name); // $name passed by reference


// This is the local machine's external IP address
$localAddr = $name;

socket_connect不会导致任何网络流量,因为它是一个 UDP 套接字。

如果你在 OS X 的开发环境中,通过 Wifi 连接:

echo exec("/sbin/ifconfig en1 | grep 'inet ' | cut -d ' ' -f2");

这是非常简单和上述答案是复杂的事情。简单地说,您可以使用这种方法获得本地和公共 ip 地址。

   <?php
$publicIP = file_get_contents("http://ipecho.net/plain");
echo $publicIP;


$localIp = gethostbyname(gethostname());
echo $localIp;


?>

这很简单,你可以通过这个简单的代码得到主机名。

$ip = getHostByName(getHostName());

Or you can also use $_SERVER['HTTP_HOST'] to get the hostname.

$_SERVER['SERVER_NAME']

这招对我很管用。

在窗户里

$exec = 'ipconfig | findstr /R /C:"IPv4.*"';
exec($exec, $output);
preg_match('/\d+\.\d+\.\d+\.\d+/', $output[0], $matches);
print_r($matches[0]);

视窗:

exec('arp -a',$sa);
$ipa = [];
foreach($sa as $s)
if (strpos($s,'Interface:')===0)
$ipa[] = explode(' ',$s)[1];


print_r($ipa);

$ipa数组返回系统的所有本地 IP

您可以使用下面的 php 代码:

$localIP = getHostByName(getHostName());
  

// Displaying the address
echo $localIP;

如果你想得到你系统的 ipv4,试试这个:

shell_exec("ip route get 1.2.3.4 | awk '{print $7}'")

要获取服务器的公共 IP:

$publicIP = getHostByName($_SERVER['HTTP_HOST']);
echo $publicIP;


// or


$publicIP = getHostByName($_SERVER['SERVER_NAME']);
echo $publicIP;

如果你的系统中没有这些全局变量,或者你在一个局域网中,你可以查询一个外部服务来获得你的公共 IP:

$publicIP = file_get_contents('https://api.ipify.org/');
echo $publicIP;


// or


$publicIP = file_get_contents('http://checkip.amazonaws.com/');
echo $publicIP;

函数获取 PHP/Windows 上的所有系统 ip。

function GetIPs(){
$sa = explode("\n",shell_exec('ipconfig'));
$ipa = [];
foreach($sa as $i){
if (strpos($i,'IPv4 Address')!==false){
$ipa[] = trim(explode(':', $i)[1]);
}
}
return($ipa);
}