如何获取客户端真实IP
您好,XXXXXXX系列IP,而这个函数获取的是局域网网关出口的IP地址,如果访问者使用代理服务器,将不获取代理服务器的IP,而是获取访问者网关的真实IP。如果将这个函数应用到限IP访问的网页中,别人即使通过限IP访问段中的代理服务器,也不能访问该页面。
下面提供一个函数:<php
// 定义一个函数getIP()
function getIP(){global $ip;
if (getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");else$ip = "Unknow";
return $ip;}
// 使用方法:
echo getIP();>
getenv("REMOTE_ADDR")用来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 getenv("HTTP_X_FORWARDED_FOR") 来读取。
但是如果客户端没有通过代理服务器来访问,那么用getenv("HTTP_X_FORWARDED_FOR") 取到的值将是空的。
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
表示如果getenv("HTTP_X_FORWARDED_FOR") 取到的值存在不为空(即客户端使用代理服务器的情况下),则变量$ip等于getenv("HTTP_X_FORWARDED_FOR") 取到的真实IP值。
如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值为空(即没有使用代理服务器),则不会执行下面的$ip = getenv("HTTP_X_FORWARDED_FOR");这一行语句。
这种情况下已经确认客户端没有使用代理服务器,从而通过
else if(getenv("REMOTE_ADDR"))
这两行语句获得客户端的IP地址也是真实的IP地址。
如果客户端IP指的是一个局域网内服务器和客户端这个的软件的话那是一样的IP,如果是互联网上的服务器和客户端,那IP就是你登陆互联网电信分配给你的ip,有些服务器是电信给的固定的ip,一般上网的公众用户的iP都是随机分配的
客户端IP地址指的是用户机所使用的IP地址;
服务器IP地址是指提供各项服务的服务器的Ip地址,即网络服务器的IP地址。
客户端IP地址和服务器IP地址的分配没有具体要求,但是在同一个网内IP地址不能重复,否则系统会提示IP地址冲突。
不一样,要分别看待~
如果你是上网的方式是通过路由器或者代理服务器,那么必然使用静态IP(企业级),而如果在这个IP下一级是一个LAN在分享上网资源,那么LAN会使用特有的内网地址段,默认为SERVER 127.0.0.1,客户端为192.168.0.1~255
但如果是个人ADSL用户上网,则被分配以动态IP地址(个人级),这个地址是每次变动的,你每拨号一次,IP地址就会自动变更,至于网段,都是公网IP,根据国家和地区不同,地址段也不一样,但是一旦上网,只要不断开连接,被赋予的IP地址就不会变动,直到连接被断开至下次登陆连接~
至于你所说的IP显示问题,如果是通过路由器或者代理服务器上网,那么静态IP是唯一的,即使下面带着一个庞大的LAN,但是LAN内所有用户在公网内现实的IP是唯一的,而且是永久不变的~
但如果是个人ADSL用户上网,除非你一次拨号就永不下线,否则每次被显示的IP地址都是不一致的~
IP地址标识一台因特网上唯一的主机,唯一所以才能确保不会"走错门"
服务器就有因特网上的"门",就是服务器IP,它是人为固定下来的,确保这个门不会乱跑
客户端IP就是你自己的IP,每次上网可能都不一样,但是你从这个门出去都是可以进服务器的固定"门"的
百度贴吧匿名发言时显示的是客户端IP,IP地址知道了,可以根据全国IP分布来大致确定一个人的位置的
0条评论