如何使用PHP获取客户端IP地址?
我想记录通过他/她的IP地址登录我网站的用户.
我想获得使用我的网站的客户端IP地址.我正在使用PHP $_SERVER超全局:
$_SERVER['REMOTE_ADDR'];
Run Code Online (Sandbox Code Playgroud)
但我发现使用它无法提供正确的IP地址.我得到了我的IP地址,看到它与我的IP地址不同,我也可以在某些网站上看到我的IP地址,例如:
http://whatismyipaddress.com/
Run Code Online (Sandbox Code Playgroud)
我粘贴了我的PHP函数的IP地址,但是这个网站没有显示结果.这个问题是如何产生的,如何获得客户端的IP地址?
换句话说,如何判断使用我的Web应用程序的人是否在其所在的服务器上?如果我没记错的话,PHPMyAdmin出于安全原因做了类似的事情.
在这里我可以使用这两种方法中的任何一种.有什么区别,我应该使用哪一个?
方法1:
string srUserIp = "";
try
{
srUserIp = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
}
catch
{
}
Run Code Online (Sandbox Code Playgroud)
方法2:
string srUserIp = "";
try
{
srUserIp = Request.UserHostAddress.ToString();
}
catch
{
}
Run Code Online (Sandbox Code Playgroud) 我有我的网站,它记录了访问者的数量,IP和访问时间......
我想识别每个访问者...我认为这可能记录IP地址...但是当IP是动态的时,我的系统会失败.所以我认为我可以解决它录制MAC地址...是否可能?应该使用什么语言?PHP,ASP,Javascript?
谢谢
编辑:我可以用来识别每个用户而无需登录信息(用户名和密码).
在PHP中有没有更好的功能来获取用户的IP地址?这就是我目前使用的
function GetIP()
{
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return($ip);
}
Run Code Online (Sandbox Code Playgroud) 如何使用HTML为我的网站检测访客IP地址?我有一个contactform.html和一个formsent.html.当formsent.html将联系信息发送到我的电子邮件时,我也希望看到他们的IP地址!
今天我遇到了一个基于php的应用程序的非常奇怪的行为.在系统的某个部分,有一个UI利用AJAX调用来填充列表框,其中包含来自后端的内容.
现在,AJAX侦听器对所有传入请求执行安全检查,确保只有有效的客户端IP才能获得响应.有效的IP也存储在后端.
为了获得客户端的IP,我使用了普通的旧版本
$_SERVER['REMOTE_ADDR']
Run Code Online (Sandbox Code Playgroud)
这适用于大多数客户.今天我遇到了一个安装,其中remote_addr包含一个网络适配器的IP,它不是为我的应用程序执行实际通信的那个.
谷歌浏览我的Roshan的博客条目:
function getRealIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))//check ip is pass from prxy
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
Run Code Online (Sandbox Code Playgroud)
可悲的是,问题仍然存在.
有没有人偶然发现这类问题(实际上我不认为我发现了一个完全新问题^^)并且有一个想法让我如何解决这个问题?
编辑:
我上线了
通过常规LAN卡进行通信.现在,actuall客户端有更多设备.VMNet适配器等.
我想知道客户端配置如何"打扰"Web服务器那么多......
TIA
ķ
可能重复:
在PHP中检索用户正确IP地址的最准确方法是什么?
$ _SERVER ['REMOTE_ADDR']总是isset()吗?
好吧,我想知道是否$_SERVER['REMOTE_ADDR']总是包含http请求的发送器的IP?不管它是代理,vpn还是真正的客户端IP,这个var总是包含有效的IP地址,还是客户可以以任何方式改变它?
我想知道,我们如何检查假的流量点击:
如果来自IP转换器软件的流量;
如果流量来自代理IP;
如果有人在浏览器中设置了referer url;
如果流量来自流量生成软件;
如果流量来自流量生成服务/网站.
要检查代理,我们可以使用:
$_SERVER['HTTP_X_FORWARDED_FOR']
$_SERVER['HTTP_VIA']
$_SERVER['HTTP_PROXY_connection']
$_SERVER['HTTP_CLIENT_IP']
Run Code Online (Sandbox Code Playgroud)
要检查引用,我们可以使用:
$_SERVER['HTTP_REFERER']
Run Code Online (Sandbox Code Playgroud)
但上面的方法很容易被骗!
请建议更多可能的方法来检查虚假交通/点击!?
php ×7
ip-address ×3
ajax ×1
asp.net ×1
c# ×1
client-side ×1
detection ×1
html ×1
localhost ×1
mac-address ×1
networking ×1
request ×1
web ×1