专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

C#通过第三方API接口查询IP来源

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 1:14:56       共计:3630 浏览

可以借助第三方API接口,参考网址:https://ipapi.co/8.8.8.8/country/ , C# 代码如下:



using System;

using System.Net;

using System.IO;

using System.Text;



public class Program

{

    public static void Main()

    {


      ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;


      HttpWebRequest request   = (HttpWebRequest)WebRequest.Create("https://ipapi.co/8.8.8.8/country/");

      HttpWebResponse response = (HttpWebResponse)request.GetResponse();


      var reader = new System.IO.StreamReader(response.GetResponseStream(), ASCIIEncoding.ASCII);

      Console.WriteLine(reader.ReadToEnd());


    }

}


   Vlam


有一个离线的 IP地区库,可以实现完全的离线查询,下载链接:https://lite.ip2location.com/database/ip-country


   创建表并导入



CREATE DATABASE ip2location

GO


USE ip2location

GO


CREATE TABLE [ip2location].[dbo].[ip2location_db1](

    [ip_from] float NOT NULL,

    [ip_to] float NOT NULL,

    [country_code] nvarchar(2) NOT NULL,

    [country_name] nvarchar(64) NOT NULL,

) ON [PRIMARY]

GO


CREATE INDEX [ip_from] ON [ip2location].[dbo].[ip2location_db1]([ip_from]) ON [PRIMARY]

GO


CREATE INDEX [ip_to] ON [ip2location].[dbo].[ip2location_db1]([ip_to]) ON [PRIMARY]

GO


BULK INSERT [ip2location].[dbo].[ip2location_db1]

    FROM 'C:\[path to your CSV file]\IP2LOCATION-LITE-DB1.CSV'

    WITH

    (

        FORMATFILE = 'C:\[path to your DB1.FMT file]\DB1.FMT'

    )

GO


   代码查询


数据库有了,接下来就可以用 C# 查询了。



public class Form1 {


    private void Form1_Load(object sender, System.EventArgs e) {

        string ip = "8.8.8.8";

        this.IP2Location(ip);

    }


    private void IP2Location(string myip) {

        IPAddress address = null;

        if (IPAddress.TryParse(myip, address)) {

            byte[] addrBytes = address.GetAddressBytes();

            this.LittleEndian(addrBytes);

            UInt32 ipno = 0;

            ipno = BitConverter.ToUInt32(addrBytes, 0);

            string sql = "SELECT TOP 1 * FROM ip2location_db1 WHERE ip_to >= \'" + ipno.ToString() + "\'";

            object conn = new SqlConnection("Server=yourserver;Database=yourdatabase;User Id=youruserid;Password=yourpassword;");

            object comm = new SqlCommand(sql, conn);

            SqlDataReader reader;

            comm.Connection.Open();

            reader = comm.ExecuteReader(CommandBehavior.CloseConnection);

            int x = 0;

            object sb = new StringBuilder(250);

            if (reader.HasRows) {

                if (reader.Read()) {

                    for (x = 0; (x <= (reader.FieldCount() - 1)); x++) {

                        sb.Append((reader.GetName(x) + (": " + (reader.GetValue(x) + "\r\n"))));

                    }

                }

            }


            reader.Close();

            MsgBox(sb.ToString());

        }


    }


    private void LittleEndian(ref byte[] byteArr) {

        if (BitConverter.IsLittleEndian) {

            List<byte> byteList = new List<byte>(byteArr);

            byteList.Reverse();

            byteArr = byteList.ToArray();

        }


    }

}


版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:C#开发中Chrome版本查看及升级chromedriver.exe | ·下一条:在.NET Core中如何通过用户IP地址获取国家/地区?

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有