if(getenv('HTTP_CLIENT_IP') &&strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$ip = getenv('HTTP_CLIENT_IP')
} elseif(getenv('HTTP_X_FORWARDED_FOR') &&strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$ip = getenv('HTTP_X_FORWARDED_FOR')
} elseif(getenv('REMOTE_ADDR') &&strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$ip = getenv('REMOTE_ADDR')
} elseif(isset($_SERVER['REMOTE_ADDR']) &&$_SERVER['REMOTE_ADDR'] &&strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$ip = $_SERVER['REMOTE_ADDR']
}
return preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : ''
}
以上函数取自phpcms的获取ip方法
本文所述php实例可以完成获取局域网所有用户的电脑IP和主机名、及mac地址的功能,对于php程序设计人员有一定的参考借鉴价值。完整代码如下:<?php
$bIp = gethostbyname($_ENV['COMPUTERNAME'])//获取本机的局域网IP
echo "本机IP:",$bIp,"\n"
echo "本机主机名:",gethostbyaddr($bIp),"\n\n\n"//gethostbyaddr 函数可以根据局域网IP获取主机名
//默认网关IP
list($ipd1,$ipd2,$ipd3) = explode('.',$bIp)
$mask = $ipd1 . "." . $ipd2 . "." . $ipd3
exec('arp -a',$aIp)//获取局域网中的其他IP
foreach( $aIp as $ipv) {
if(strpos($ipv,'接口') !== false) {//一下显示的IP是否是当前局域网中的 而不是其他的类型 可以在cmd下试一下命令
$bool = false
preg_match('/(?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))/',$ipv,$arr)
if(strcmp($arr[0],$bIp) == 0) {
$bool = true
}
} else {
if($bool) {
$str = preg_replace('/\s+/', '|', $ipv)
$sArr = explode('|',$str)
if($sArr[1] == 'Internet' || empty($sArr[1])) {
continue
}
//去除默认网关
if(strcmp($mask . ".1", $sArr[1]) == 0) {
continue
}
//去除同网关下255的IP
if(strcmp($mask . ".255", $sArr[1]) == 0) {
continue
}
//去除组播IP
list($cIp) = explode('.', $sArr[1])
if($cIp >= 224 &&$cIp <= 239) {
continue
}
echo "IP地址:|",$sArr[1],"|\n"
echo "MAC地址:",$sArr[2],"\n"
echo "主机名:",gethostbyaddr($sArr[1]),"\n"
echo "\n\n"
}
}
}
ip地址分 IPv4和IPV6两个版本。
127.0.0.1或者192.168.0.1之类的,属于IPV4的格式
127.0.0.1转换为IPv6就是 ::1
IPv6具体的格式写法,你搜索一下了解一下。
另外 ,服务端获取ip地址,是相对的。比如你在局域网内建一个服务器,在程序里获取的ip地址,就是客户端在局域网的ip ,一般是类似 192.168.0.101 之类的,大公司的话可能 10.x.x.x
局域网的ip地址,可以直接在网络适配器上看到
而在inter网,也就是大网络上,服务端获取的ip地址,是你的连网设备获取到的公网ip ,一般一个局域网内的主机,相对于因特网上的服务器,显示的都是公网地址。
公网ip没有在本机电脑上直接显示。会显示在路由或者连网设备上。也可以通过百度搜索 ip地址,会显示你的公网ip
所以,假设一个局域网内,有两台电脑同时访问一个网上的服务器,服务器是没办法给两台电脑区分开ip地址的,显示的是一样的。只是可能得到的设备信息不一样(如:浏览器的useragent)
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)