C#使用MaxMind.GeoIP2数据库查询当前ip地址
GeoLite2-City.mmdb下载
因为比较简单,直接上代码,代码展示获取ip地址的国家和城市信息
using MaxMind.GeoIP2;
using MaxMind.GeoIP2.Model;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
namespace IP.Demo.API.Controllers
{
public class HomeController : Controller C#有偿Q群:927860652
{
List<string> ipList = new List<string>();
public ActionResult Index()
{
InitIplist();
var ips = GetIPInfos();
return View(ips);
}
private void InitIplist()
{
// 获取客户端请求的IP地址
var ipAddress = Request.UserHostAddress;
//湖南
var hn = "175.6.68.41";
//台湾
var tw = "210.61.221.0";
//香港
var hk = "58.176.0.0";
//伦敦
var ld = "165.3.120.76";
ipList.Add(hn);
ipList.Add(ipAddress);
ipList.Add(tw);
ipList.Add(hk);
ipList.Add(ld);
}
private List<IPInfo> GetIPInfos()
{
List < IPInfo > ips = new List<IPInfo>();
var reader = new DatabaseReader("D:\\C#\\IP.Demo.API\\IP.Demo.API\\bin\\GeoLite2-City.mmdb");
foreach (var ipAddress in ipList)
{
try
{
// 解析IP地址
var ipAddressObj = IPAddress.Parse(ipAddress);
var response = reader.City(ipAddressObj);
IPInfo iPInfo = new IPInfo();
iPInfo.ip = ipAddress;
iPInfo.Country = response.Country.Names["zh-CN"];
try
{
iPInfo.City = response.City.Names["zh-CN"];
}
catch
{
iPInfo.City = response.MostSpecificSubdivision.Names["zh-CN"];
}
if (iPInfo.Country.Equals("中国"))
{
if (iPInfo.City.Equals("台湾") || iPInfo.City.Equals("香港")) iPInfo.IsDomestic = false;
else iPInfo.IsDomestic = true;
}
else
iPInfo.IsDomestic = false;
if (iPInfo.Country.Equals("中华民国")) { iPInfo.Country = "中国"; iPInfo.City ="台湾"; }
if (iPInfo.Country.Equals("香港")) { iPInfo.Country = "中国"; iPInfo.City = "香港"; }
ips.Add(iPInfo);
}
catch
{
//处理本地127.0.0.1的请求
IPInfo iPInfo = new IPInfo();
iPInfo.ip = ipAddress;
iPInfo.Country = "未知";
iPInfo.City = "未知";
iPInfo.IsDomestic = false;
ips.Add(iPInfo);
}
}
reader.Dispose();
return ips;
}
}
public class IPInfo {
public string ip { get; set; }
public string Country { get; set; }
public string City { get; set; }
public bool IsDomestic { get; set; }
}
}
视图:
@using IP.Demo.API.Controllers;
@model List<IPInfo>
@foreach (var IPInfo in Model)
{
<div>
<p>IP: @IPInfo.ip</p>
<p>国家: @IPInfo.Country</p>
<p>城市: @IPInfo.City</p>
@if (IPInfo.IsDomestic)
{
<p>国内: 是</p>
}
else
{
<p>国内: 否</p>
}
</div>
}
效果: