64 lines
1.9 KiB
C#
64 lines
1.9 KiB
C#
using IP2Region.Net.XDB;
|
|
using System;
|
|
using System.IO;
|
|
using DOAN.Infrastructure.IPTools.Model;
|
|
|
|
namespace DOAN.Infrastructure.IPTools
|
|
{
|
|
public class IpTool
|
|
{
|
|
private static readonly string DbPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ip2region.xdb");
|
|
private static readonly Searcher Searcher;
|
|
static IpTool()
|
|
{
|
|
if (!File.Exists(DbPath))
|
|
{
|
|
throw new Exception($"IP initialize failed. Can not find database file from {DbPath}. Please download the file to your application root directory, then set it can be copied to the output directory. Url: https://gitee.com/lionsoul/ip2region/blob/master/data/ip2region.xdb");
|
|
}
|
|
|
|
Searcher = new Searcher(CachePolicy.File, DbPath);
|
|
}
|
|
|
|
public static string GetRegion(string ip)
|
|
{
|
|
if (string.IsNullOrEmpty(ip))
|
|
{
|
|
throw new ArgumentException("IP为空", nameof(ip));
|
|
}
|
|
|
|
try
|
|
{
|
|
var region = Searcher.Search(ip);
|
|
return region;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine(ex.Message);
|
|
throw new Exception($"搜索IP异常IP={ip}", ex);
|
|
}
|
|
}
|
|
|
|
public static IpInfo Search(string ip)
|
|
{
|
|
try
|
|
{
|
|
var region = GetRegion(ip);
|
|
var array = region.Split("|");
|
|
var info = new IpInfo()
|
|
{
|
|
Country = array[0],
|
|
Province = array[2],
|
|
City = array[3],
|
|
NetworkOperator = array[4],
|
|
IpAddress = ip
|
|
};
|
|
return info;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
throw new Exception("Error converting ip address information to ipinfo object", e);
|
|
}
|
|
}
|
|
}
|
|
}
|