C#使用MaxMind.GeoIP2数据库查询当前ip地址

2023-11-21 17:28

本文主要是介绍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;}elseiPInfo.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>
}

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

这篇关于C#使用MaxMind.GeoIP2数据库查询当前ip地址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/403887

相关文章

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也