获取客户端IP不是一项简单的
工作,因为存在IP欺骗和
代理问题,所以获得客户端的IP真实性会大打折扣,而不是100%准确。但是我们仍然试图找到一个完美的客户端来获得真正的IP。用PHP获取ip的
方法可以找到很多。
功能getip(){
如果(getenv(http_client_ip )strcasecmp(getenv(http_client_ip ),未知))
为IP = getenv(http_client_ip );
如果(getenv(http_x_forwarded_for )strcasecmp(getenv(http_x_forwarded_for ),未知)))
为IP = getenv(http_x_forwarded_for );
如果(getenv(remote_addr )strcasecmp(getenv(remote_addr ),未知)))
为IP = getenv(remote_addr );
else if(isset($ _server { 'remote_addr ' }){ } _server美元的'remote_addr strcasecmp(_server { } 'remote_addr美元,未知))
IP = _server美元美元'remote_addr'} {;
其他的
$未知;
返回(IP);
现在我们需要解释这个代码。这里我们使用getenv()和两个
函数strcasecmp(),前一个函数获取
系统的
环境变量,如果我们能得到的价值,我们的价值回归,我们不能返回假..
_server美元是
服务器超级全局变量数组,美元和_server { 'remote_addr}也可以获得IP
地址的客户端。两者的
区别是,getenv不
支持PHP。在IIS的ISAPI
模式运行。
的用法(strcasecmp string1,string2)字符串函数是比较string1和string2的平等,如果返回0,如果string1大于string2,返回大于0的数,小于然后返回小于0。
The function first uses the customer IP, if not the method of trying to use the agent, if not, then use REMOTE_ADDR.
您还看到了一个更
详细的IP
检测方法,考虑到IP欺骗和多代理代码。方法是相似的。
功能getip(){
未知的'unknown美元=;
如果(isset($ _server { 'http_x_forwarded_for ' }){ } _server美元的'http_x_forwarded_for strcasecmp(_server 'http_x_forwarded_for'} {美元,美元未知)){
IP = _server美元美元'http_x_forwarded_for'} {;
} elseif(isset($ _server { 'remote_addr ' }){ } _server美元的'remote_addr strcasecmp(_server 'remote_addr'} {美元,美元未知)){
IP = _server美元美元'remote_addr'} {;
}
*
处理多层代理
或使用常规方式:IP = preg_match美元( / { D 。} { 7、15 } /
* /
如果(假)!= strpos($ IP))
$ =重置(爆炸(,,IP));
返回ip;
}
首先,不要使用代理服务器的PHP来获取客户机IP
情况:
remote_addr =客户端IP
http_x_forwarded_for =没有价值或没有
显示 两。使用透明代理服务器的情况:透明代理
remote_addr =最后的代理服务器IP
http_x_forwarded_for =客户端真实IP(由多个代理服务器,这个值是相似的:221.5.252.160,203.98.182.163,203.129.72.215)
这种代理服务器也将客户端的真实IP发送给访问对象,不能隐藏真实身份。
三。使用普通匿名代理服务器的PHP获得客户端IP情况:匿名代理
remote_addr =最后的代理服务器IP
http_x_forwarded_for =代理服务器IP(当通过多个代理服务器,这个值是相似的:203.98.182.163,203.98.182.163,203.129.72.215)
在这种情况下,客户机的真正IP被隐藏,但它被显示给访问对象,客户机正在使用代理服务器访问它们。
四。使用欺骗性代理服务器:篡改代理
remote_addr =代理服务器IP
http_x_forwarded_for =随机IP(由多个代理服务器,这个值是相似的:220.4.251.159,203.98.182.163,203.129.72.215)
在这种情况下,它也表明,客户端使用代理服务器,但发明了一种伪随机的IP(220.4.251.159)而不是客户端的真实IP欺骗。
五,使用高匿名代理服务器的PHP获得客户端IP情况:高匿名代理(精英代理)
remote_addr =代理服务器IP
http_x_forwarded_for =没有价值或没有显示
无论是remote_addr或http_forwarded_for,新闻的头可能无法实现,因为不同的
网络设备不同的
浏览器会发送不同的IP报文头。所以_server美元{remote_addr 使用PHP,_server美元{http_x_forwarded_for}采集值可以是空的或未知的值。
以上是PHP向您
介绍的一种
解决方案,以获得
用户客户机的真正IP。希望能对你有所帮助。如果你有任何问题,请给我留言,萧边会及时给您回复。谢谢您支持
网站。