我需要得到像192这样的计算机的本地IP.*....这可能用PHP吗?
我需要运行脚本的系统的IP地址,但我不需要外部IP,我需要他的本地网卡地址.
$localIP = getHostByName(php_uname('n'));
$localIP = getHostByName(getHostName());
$_SERVER['SERVER_ADDR']
这是一篇很老的帖子,但是得到它:
function getLocalIp() { return gethostbyname(trim(`hostname`)); }
例如:
die( getLocalIp() );
在另一个站点上找到它,不要删除trim命令,否则你将获得计算机名称.
BACKTICKS(特殊引号):它的工作原理是因为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
试试这个(如果你的服务器是Linux):
$command="/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'"; $localIP = exec ($command); echo $localIP;
可以像下面这样获得本地计算机的默认外部IP地址:
$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 $localAddr = $name;
这个怎么运作:
由于这是UDP,因此socket_connect
不会在网络上传出.它仅为套接字分配本地地址和端口.这允许我们获取本地地址.
此解决方案无需任何网络流量,DNS或命令执行即可运行.
如果没有路由8.8.8.8
(例如,您没有互联网连接),它可能无法工作.
取决于当地人的意思:
如果本地是指执行PHP代码的服务器/系统的地址,那么仍有两种途径可供讨论.如果PHP正在通过Web服务器运行,那么您可以通过阅读获取服务器地址$_SERVER['SERVER_ADDR']
.如果PHP正在通过命令行界面运行,那么您可能必须shell执行ipconfig
(Windows)/ ifconfig
(*nix)并grep out the address.
如果在本地你的意思是网站访问者的远程地址,而不是他们的外部IP地址(因为你特别说192.*),那么你运气不好.NAT路由的重点是隐藏该地址.您无法识别IP地址后面的个人计算机的本地地址,但是有一些技巧(用户代理,可能是MAC地址)可以帮助区分是否有多台计算机从同一IP访问.
hostname(1)可以告诉IP地址:hostname --ip-address
或者正如man所说,最好使用它hostname --all-ip-addresses
您可以在Linux主机上的CLI中以常规用户身份尝试此操作:
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', )