当前位置: 首页 > article >正文

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>
}

效果:
在这里插入图片描述


http://www.kler.cn/news/137140.html

相关文章:

  • Nova-Admin:基于Vue3、Vite、TypeScript和NaiveUI的开源简洁灵活管理模板
  • 【Qt】Windows下Qt连接DM数据库
  • 构建后端为etcd的CoreDNS的容器集群(二)、下载最新的etcd容器镜像
  • bash之基本运算符
  • 由云智慧发起的《数字政府统一运维 第1部分:运维平台建设指南》团标正式发布
  • 数据结构与算法:贪心算法与应用场景
  • Rockchip Clock
  • 外卖小程序系统:数字化餐饮的编码之道
  • 1. 基础语法
  • java发送媒体类型为multipart/form-data的请求
  • 2022最新版-李宏毅机器学习深度学习课程-P51 BERT的各种变体
  • 基于Cortex®-M4F的TM4C123GH6NMRT7R 32位MCU,LM74900QRGERQ1、LM74930QRGERQ1汽车类理想二极管
  • 计算机网络的发展
  • 获取所有非manager的员工emp_no
  • mac添加Chrome插件的方法
  • 【华为OD题库-026】通过软盘拷贝文件-java
  • DITTEL控制器维修SENSITRON6-2AE
  • chrome 插件 Mobile simulator
  • 没收到Win11 23H2正式版的推送怎么升级到23H2
  • 第1关:图的邻接表存储及求邻接点操作
  • 让别人访问电脑本地
  • java算法学习索引之数组矩阵问题
  • 第2关:图的深度优先遍历
  • 重装系统后如何恢复以前的文件?详细教程大揭秘!
  • 进程和线程( Process and Thread)
  • python -opencv形态学操作