
<php
echo getip();
function getip() {
if (getenv("><php
function getip() {
if (getenv ( ";
具体的话,可以去这里详细了解>
<php
echo "当前脚本服务器的主机名 " gethostbyaddr($_SERVER[ REMOTE_ADDR ]) "<br /><hr />"; echo "获得当前运行PHP脚本(页面)所在的服务器的 IP 地址:" $_SERVER[ SERVER_ADDR ] "<br /><hr />"; echo "获得当前运行PHP脚本(页面)所在的服务器的 主机名:" $_SERVER[ SERVER_NAME ]; echo <hr> ; echo 客户端ip $_SERVER[ REMOTE_ADDR ]; echo <br> ; echo 客户端ip getenv( REMOTE_ADDR ); echo "<br>"; echo 服务器主机ip gethostbyname(" qq "); >
lishixinzhi/Article/program/PHP/201311/20917
这个跟你的路由设置和访问方式有关。
假设你的服务端在1010501,公网IP都是8888。
假设你的客户端在 101050100-199,出口公网IP是4444
如果你的客户端以公网的形式访问,如>
/
获取客户端IP地址
/
static public function getClientIP() {
static $ip = NULL;
if ( $ip !== NULL )
return $ip;
if ( isset( $_SERVER['>
本文所述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";
}
}
}
该程序是在cli模式下运行的,在浏览器上应该也可以
php获取局域网中的用户ip功能就完成了,主要用到的是php的exec函数
和window的arp
-a
命令
其中获取本机IP:gethostbyname($_ENV['COMPUTERNAME'])
有别于以往的写法,感兴趣的朋友可以继续深入研究一下。
获取主机名函数:gethostbyaddr(IPd)
这个函数功能也很强大。
爬虫时,为了避免自己的IP被封,有时候需要设置反向代理,用其他的IP去爬。那么这里说的IP到底是电脑的什么IP呢?
首先看下 localhost 、 127001 、 192168xx 。
这里使用flask开启一个服务,这样本机可以通过 localhost 、 127001 、 192168xx (我的是 19216814 )等地址的5000端口(eg 19216814:5000 )访问服务器,而同一局域网的其它设备也可以通过 19216814:5000 访问我的服务器
这里的 localhost 一般默认指向 127001 ,所以只需要看IP
127001 是只能自己对自己使用的IP
192168xx 则是局域网下任何设备都可以访问其他设备使用的IP(包括自己对自己)
然后,如果我访问在线网站,或者爬虫,使用的IP并不是上面那两个IP,而是我的运营商分配给我的外网IP(public ip),作为我使用的这个网络的一个身份标识,一般反爬虫封的IP,也就是这个IP了
python版本:
nodejs版本:
参考链接:
ip地址分 IPv4和IPV6两个版本。
127001或者19216801之类的,属于IPV4的格式
127001转换为IPv6就是 ::1
IPv6具体的格式写法,你搜索一下了解一下。
另外 ,服务端获取ip地址,是相对的。比如你在局域网内建一个服务器,在程序里获取的ip地址,就是客户端在局域网的ip ,一般是类似 1921680101 之类的,大公司的话可能 10xxx
局域网的ip地址,可以直接在网络适配器上看到
而在inter网,也就是大网络上,服务端获取的ip地址,是你的连网设备获取到的公网ip ,一般一个局域网内的主机,相对于因特网上的服务器,显示的都是公网地址。
公网ip没有在本机电脑上直接显示。会显示在路由或者连网设备上。也可以通过百度搜索 ip地址,会显示你的公网ip
所以,假设一个局域网内,有两台电脑同时访问一个网上的服务器,服务器是没办法给两台电脑区分开ip地址的,显示的是一样的。只是可能得到的设备信息不一样(如:浏览器的useragent)
以上就是关于网站获取IP的代码全部的内容,包括:网站获取IP的代码、如何用php获取客户端正确的ip地址、用php来获得客户端服务器ip的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)