Current location - Recipe Complete Network - Take-out food franchise - ASP.NET怎么获取客户端的外网互联网协议(Internet Protocol)地址,急~
ASP.NET怎么获取客户端的外网互联网协议(Internet Protocol)地址,急~

在动态服务器页面中使用请求。服务器变量("远程_ADDR ")来取得客户端的互联网协议(Internet Protocol)地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的互联网协议(Internet Protocol)地址,而不是真正的客户端互联网协议(Internet Protocol)地址p

要想透过代理服务器取得客户端的真实互联网协议(Internet Protocol)地址,就要使用请求。服务器变量(" HTTP_X_FORWARDED_FOR ")来读取p

不过要注意的事,并不是每个代理服务器都能用请求。服务器变量(" HTTP_X_FORWARDED_FOR ")来读取客户端的真实IP,有些用此方法读取到的仍然是代理服务器的知识产权.

还有一点需要注意的是:如果客户端没有通过代理服务器来访问,那么用请求。服务器变量(" HTTP_X_FORWARDED_FOR ")取到的值将是空的。因此,如果要在程序中使用此方法,可以这样处理:

......

userip =请求。server variables(" HTTP _ X _ FORWARDED _ FOR ")

如果userip = " "那么userip = Request。服务器变量("远程_ADDR")

......

//方法一

HttpContext。current . request . userhostaddress;

//方法二

HttpContext。current . request . server variables["远程_ ADDR "];

//方法三

string strHostName = System。net . DNS . get hostname();

字符串clientIPAddress = System。net . DNS . gethostaddresses(strHostName)。GetValue(1)。ToString();

//方法四(无视代理)

HttpContext。current . request . server variables[" HTTP _ X _ FORWARDED _ FOR "];

客户端:

//方法五var ip = ' & lt!-# echo var = " REMOTE _ ADDR "->;';

alert("您的IP地址是"+IP ");

//方法六(无视代理)

函数GetLocalIPAddress()

{

var obj = null;

var rslt =请尝试使用obj = new ActiveXObject("rcbdyctl。设置”);rslt = obj。GetIPAddressobj = nullcatch(e)

{

//

}

return rslt;}

来自印度的MCT·莫里克·帕特尔提供了一种服务端的解决方案,很好:

if(上下文。request . server variables[" HTTP _ VIA "]!=null) //服务器,使用代理服务器得到真实的客户端地址

ip =上下文。request . server variables[" HTTP _ X _ FORWARDED _ FOR "]。ToString();//返回真实的客户端IP。}

else//如果没有使用代理服务器或者得不到客户端的ip未使用代理或无法获取客户端IP得到服务端的地址

ip =上下文。请求.服务器变量["远程_ADDR"]。ToString();//当它不能获得客户端IP时,它将返回代理IP。}

有些客户端会因为" header _拒绝访问"的安全设置而不发给我们互联网协议(Internet Protocol的缩写)