各位老铁们好,相信很多人对在.NET Core环境中高效读取IP地址纯真库的方法都不是特别的了解,因此呢,今天就来为大家分享下关于在.NET Core环境中高效读取IP地址纯真库的方法以及的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
///
///构造函数
///
///无辜IP数据库路径
公共IPSearch(字符串ipfilePath)
{
this.ipfilePath=ipfilePath;
}
///
///地理位置,包括国家和地区
///
公共结构IPLocation
{
公共字符串国家、地区;
}
///
///获取指定IP的地理位置
///
///要查询的IP地址
///
公共IPLocation GetIPLocation(字符串strIP)
{
ip=IPToLong(strIP);
ipFile=new FileStream(ipfilePath, FileMode.Open, FileAccess.Read);
long[] ipArray=BlockToArray(ReadIPBlock());
长偏移=SearchIP(ipArray, 0, ipArray.Length - 1) * 7 + 4;
ipFile.Position +=offset;//跳过起始IP
ipFile.Position=ReadLongX(3) + 4;//跳过结尾IP
IPLocation loc=new IPLocation();
int flag=ipFile.ReadByte();//读取标志位
if (flag==1)//表示重定向国家和地区
{
ipFile.Position=ReadLongX(3);
flag=ipFile.ReadByte();//再次读取标志
}
长国家偏移=ipFile.Position;
loc.country=ReadString(flag);
如果(标志==2)
{
ipFile.Position=国家偏移量+ 3;
}
标志=ipFile.ReadByte();
loc.area=ReadString(flag);
ipFile.Close();
ipFile=空;
返回本地地址;
}
///
///将字符串形式的IP转换为long
///
///
///
公共长IPToLong(字符串strIP)
{
byte[] ip_bytes=新字节[8];
string[] strArr=strIP.Split(new char[] { "." });
for (int i=0; i 4; i++)
{
ip_bytes[i]=byte.Parse(strArr[3 - i]);
}
返回BitConverter.ToInt64(ip_bytes, 0);
}
///
///将索引区字节块中的起始IP转换为Long数组
///
///
long[] BlockToArray(byte[] ipBlock)
{
long[] ipArray=new long[ipBlock.Length/7];
int ipIndex=0;
字节[]临时=新字节[8];
for (int i=0; i ipBlock.Length; i +=7)
{
Array.Copy(ipBlock, i, temp, 0, 4);
ipArray[ipIndex]=BitConverter.ToInt64(temp, 0);
ipIndex++;
}
返回ipArray;
}
///
///从IP数组中查找指定IP并返回其索引
///
///IP数组
///指定搜索的起始位置
///指定搜索的结束位置
///
int SearchIP(long[] ipArray, int start, int end)
{
int middle=(开始+结束)/2;
if (中间==开始)
返回中间;
else if (ip ipArray[中])
返回SearchIP(ipArray,开始,中间);
别的
return SearchIP(ipArray, 中间, 结束);
}
///
///读取IP文件中的索引块
///
///
byte[] ReadIPBlock()
{
长起始位置=ReadLongX(4);
长结束位置=ReadLongX(4);
长计数=(结束位置- 开始位置)/7 + 1; //记录总数
ipFile.Position=起始位置;
byte[] ipBlock=新字节[count * 7];
ipFile.Read(ipBlock, 0, ipBlock.Length);
ipFile.Position=起始位置;
返回ip块;
}
///
///从IP文件中读取指定字节并转换为long
///
///需要转换的字节数不要超过8个字节。
///
长ReadLongX(int bytesCount)
{
byte[] _bytes=新字节[8];
ipFile.Read(_bytes, 0, bytesCount);
返回BitConverter.ToInt64(_bytes, 0);
}
///
///从IP文件中读取字符串
///
///转向标志
///
字符串ReadString(int 标志)
{
if (flag==1 || flag==2)//转flag
ipFile.Position=ReadLongX(3);
别的
ipFile.Position -=1;
【在.NET Core环境中高效读取IP地址纯真库的方法】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
这篇文章应该介绍如何在 .NET CORE 应用中使用 IP 纯真库来获取地址信息吧?
有17位网友表示赞同!
最近在学习 ASP.NET CORE,这个 IP 库挺实用的,希望能详细讲解一下怎么用。
有20位网友表示赞同!
.NET CORE 的网络开发真是越来越方便了!学习一波这个 IP 库可以更丰富我的工具箱.
有18位网友表示赞同!
有没有推荐一些比较靠谱的 .NET CORE IP 纯真库?
有18位网友表示赞同!
想知道这个 IP 库可以解析哪些信息,例如地理位置、运营商等等。
有7位网友表示赞同!
我平常开发用的还是旧版本的 .NET,想了解一下这个新的框架里IP库的使用方式.
有5位网友表示赞同!
对于一个初学者来说学习这个库会不会太难?
有14位网友表示赞同!
文章能否分享一些使用示例代码,方便直接上手!
有6位网友表示赞同!
我正在开发一个项目需要用到 IP 的信息,这个库听起来还不错。
有15位网友表示赞同!
期待看到详细的介绍和使用教程,让我更快掌握这些知识!
有6位网友表示赞同!
.NET CORE 的生态越来越完善了,有这么好的工具库真是太好了.
有14位网友表示赞同!
学习新技术的乐趣在于探索未知!我很想尝试这个IP 库。
有8位网友表示赞同!
文章写得通顺易懂吗?对于新手来说,理解起来容易吗?
有6位网友表示赞同!
希望这篇文章能介绍不同 IP 库的优缺点,方便选择合适的一个。
有9位网友表示赞同!
.NET CORE 的发展速度真快! 我一直关注着它的最新更新。
有20位网友表示赞同!
这篇博客是否还会持续更新?比如最新的 .NET CORE 版本相关内容?
有15位网友表示赞同!
期待看到关于使用 IP 库解决实际问题的案例分析,更直观的了解其应用场景。
有19位网友表示赞同!
这个库的速度怎么样?有没有什么性能测试结果可以参考?
有15位网友表示赞同!
有没有一些安全方面的注意事项需要提醒?例如IP信息的敏感性等等。
有19位网友表示赞同!