C# 获取IP及判断IP是否在区间
作者:MX雪碧 时间:2021-10-06 23:44:50
话不多说,请看代码:
/// <summary>
/// 获取客户端IP
/// </summary>
/// <returns></returns>
public static string GetClientIpAddress()
{
var httpContext = HttpContext.Current;
if (httpContext.Request.ServerVariables == null)
{
return null;
}
var clientIp = httpContext.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? httpContext.Request.ServerVariables["REMOTE_ADDR"];
try
{
foreach (var hostAddress in Dns.GetHostAddresses(clientIp))
{
if (hostAddress.AddressFamily == AddressFamily.InterNetwork)
{
return hostAddress.ToString();
}
}
foreach (var hostAddress in Dns.GetHostAddresses(Dns.GetHostName()))
{
if (hostAddress.AddressFamily == AddressFamily.InterNetwork)
{
return hostAddress.ToString();
}
}
}
catch (Exception ex)
{
}
return clientIp;
}
/// <summary>
/// ip是否在ip空间内
/// </summary>
/// <param name="ip"></param>
/// <param name="ipSection"></param>
/// <returns></returns>
public static Boolean ipExistsInRange(String ip, String ipSection)
{
ipSection = ipSection.Trim();
ip = ip.Trim();
int idx = ipSection.IndexOf('-');
String beginIP = ipSection.Substring(0, idx);
String endIP = ipSection.Substring(idx + 1);
return getIp2long(beginIP) <= getIp2long(ip) && getIp2long(ip) <= getIp2long(endIP);
}
public static long getIp2long(String ip)
{
ip = ip.Trim();
String[] ips = ip.Split('.');
long ip2long = 0L;
for (int i = 0; i < 4; ++i)
{
ip2long = ip2long << 8 | Int64.Parse(ips[i]);
}
return ip2long;
}
public static long getIp2long2(String ip)
{
ip = ip.Trim();
String[] ips = ip.Split('.');
long ip1 = Int64.Parse(ips[0]);
long ip2 = Int64.Parse(ips[1]);
long ip3 = Int64.Parse(ips[2]);
long ip4 = Int64.Parse(ips[3]);
long ip2long = 1L * ip1 * 256 * 256 * 256 + ip2 * 256 * 256 + ip3 * 256 + ip4;
return ip2long;
}
来源:http://www.cnblogs.com/MrZheng/p/6407873.html
标签:C#,获取,判断,IP
0
投稿
猜你喜欢
OpenCV Java实现人脸识别和裁剪功能
2022-08-21 01:47:23
java基础的详细了解第五天
2023-06-02 16:54:04
SpringBoot整合jersey的示例代码
2021-08-28 05:23:12
web.xml SpringBoot打包可执行Jar运行SpringMVC加载流程
2023-11-24 07:40:52
基于Spring Boot使用JpaRepository删除数据时的注意事项
2023-04-03 09:05:39
使用Java桥接模式打破继承束缚优雅实现多维度变化
2023-08-23 09:00:34
SpringBoot+Jpa项目配置双数据源的实现
2022-11-01 14:05:04
java 命名空间 命名规则第1/2页
2021-06-06 14:20:19
Java中关于二叉树的概念以及搜索二叉树详解
2023-01-12 00:09:25
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2023-07-25 07:09:08
Java实现五子棋游戏
2022-07-08 12:50:27
Java解压和压缩带密码的zip文件过程详解
2023-07-16 15:32:16
SpringBoot之Json的序列化和反序列化问题
2021-11-12 07:17:29
SSM使用mybatis分页插件pagehepler实现分页示例
2022-04-02 00:20:53
java使用jacob实现word转pdf
2023-05-12 11:45:33
使用Java的Lucene搜索工具对检索结果进行分组和分页
2022-07-27 05:21:17
深入解析Java中ThreadLocal线程类的作用和用法
2022-01-12 09:03:15
SpringMVC 参数绑定相关知识总结
2022-06-05 12:50:54
java 使用异常的好处总结
2023-11-29 13:35:49
java如何通过IP解析地理位置
2021-09-11 08:01:07