c# を使用して、特定の IP アドレスの発信元の国を特定する方法を教えてください。これを使用して、接続が特定の国から発信されているかどうかを確認する必要があります。
12 に答える
プロジェクトでこの SQL データを使用して、次のことを判断できます。 IP アドレス ジオロケーション SQL データベース。そのデータをダウンロードしてデータベースにインポートし、ローカルでチェックを実行します。
または、国コードと国名を含む XML を返す無料の API を使用することもできます。次の例に示すように、確認したい IP アドレスを使用して次の URL にリクエストを送信します。
http://ipinfodb.com/ip_query_country.php?ip=74.125.45.100
戻り値:
<Response>
<Ip>74.125.45.100</Ip>
<Status>OK</Status>
<CountryCode>US</CountryCode>
<CountryName>United States</CountryName>
</Response>
単純な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());
}
}
Google に依頼することができます。
必要な料金を支払うことができるサービスもあります。
これは国データベースへの無料のIP アドレスです。
ip2cc - 最新の公式データからデータベースを作成するためのスクリプトを備えた Python モジュール.
このユーティリティは、ソースに示されているように、 Regional Internet Registryサイト ( 、、、)Pythonから最新の情報を (好きなだけ頻繁に) ロードします。arinripenccapniclacnicafrinic
url_template = 'ftp://ftp.ripe.net/pub/stats/%s/delegated-%s-latest'
sources = {}
for name in ('arin', 'ripencc', 'apnic', 'lacnic', 'afrinic'):
sources[name] = url_template % (name, name)
データがロードされると、クエリはオフラインで非常に迅速に回答できます。元の質問に直接回答するように簡単に変更したり、コマンド ラインから使用して国を返すことができIP addressます。
おそらく hostip.info のような API を使用したくない場合は、maxmind にサブスクライブし、ローカルでホスト ルックアップ データベースを実行することをお勧めします。
使用できる別のサービスは、場所、組織、およびその他の情報を返す、私自身のhttp://ipinfo.ioです。
$ curl ipinfo.io/8.8.8.8
{
"ip": "8.8.8.8",
"hostname": "google-public-dns-a.google.com",
"loc": "37.385999999999996,-122.0838",
"org": "AS15169 Google Inc.",
"city": "Mountain View",
"region": "California",
"country": "US",
"phone": 650
}
詳細については、 http://ipinfo.io/developersを参照してください。
IPAddress を UInt32 に変換するための拡張クラスを次に示します。@vlamの回答からリファクタリングされたコード
using System.Net;
namespace Module.IP2Location.Core.Extensions;
public static class IPAddressExtensions
{
public static UInt32 ToUInt(this IPAddress address)
{
byte[] addrBytes = address.GetAddressBytes();
if (BitConverter.IsLittleEndian)
{
List<byte> byteList = new List<byte>(addrBytes);
byteList.Reverse();
addrBytes = byteList.ToArray();
}
UInt32 ipno = 0;
ipno = BitConverter.ToUInt32(addrBytes, 0);
return ipno;
}
}
これは、 IP Geolocation APIを使用して簡単に行うことができます。
国、州、都市、タイムゾーン、および郵便番号を返します。また、https://geo.ipify.org/docsにアクセスして、無料でお試しください。それがどうなるか教えてください。