首页新闻找找看学习计划

求:C#获取用户真实外网ip方法,非调用其他平台接口的方法

0
[已解决问题] 解决于 2019-12-25 10:15

C#获取用户真实外网ip方法,非调用其他平台接口的方法

大da脸的主页 大da脸 | 初学一级 | 园豆:117
提问于:2019-12-22 15:50
< >
分享
最佳答案
0

/// <summary>
/// 获取客户端IP地址
/// </summary>
/// <returns>若失败则返回回送地址</returns>
public static string GetIP()
{
//如果客户端使用了代理服务器,则利用HTTP_X_FORWARDED_FOR找到客户端IP地址
string userHostAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString().Split(',')[0].Trim();
//否则直接读取REMOTE_ADDR获取客户端IP地址
if (string.IsNullOrEmpty(userHostAddress))
{
userHostAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
//前两者均失败,则利用Request.UserHostAddress属性获取IP地址,但此时无法确定该IP是客户端IP还是代理IP
if (string.IsNullOrEmpty(userHostAddress))
{
userHostAddress = HttpContext.Current.Request.UserHostAddress;
}
//最后判断获取是否成功,并检查IP地址的格式(检查其格式非常重要)
if (!string.IsNullOrEmpty(userHostAddress) && IsIP(userHostAddress))
{
return userHostAddress;
}
return "127.0.0.1";
}

奖励园豆:5
风浪 | 老鸟四级 |园豆:2754 | 2019-12-23 12:55
其他回答(3)
0

Request.Headers.FirstOrDefault(t =>
t.Key.Equals("X-Forwarded-For", StringComparison.InvariantCultureIgnoreCase))

也不太真实

通信的搞程序 | 园豆:897 (小虾三级) | 2019-12-23 09:06
0

var context = (HttpContextBase)Request.Properties["MS_HttpContext"];//获取传统context
var clientIp=context.Request.UserHostAddress;

wwr01 | 园豆:593 (小虾三级) | 2019-12-23 09:35
0

这个和你的服务部署有关。如果你的服务部署在F5或者Nginx后面,则需要 F5/Nginx 获取外部的IP,放到Header里面,约定好KEY,服务从key中获取真实IP

xiaogui340 | 园豆:309 (菜鸟二级) | 2019-12-25 09:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册