ホームページ > バックエンド開発 > Golang > Golang での IP クエリのさまざまな方法の分析

Golang での IP クエリのさまざまな方法の分析

PHPz
リリース: 2023-03-30 14:00:24
オリジナル
1889 人が閲覧しました

IP Query Golang (Golang IP Lookup)

Golang は、プログラミングの効率と読みやすさを向上させるために、2007 年に Google によって開始されたオープンソース プログラミング言語です。その後、Golang は効率的な Web アプリケーションやサーバーサイドを構築するための非常に人気のあるプログラミング言語の 1 つになりました。

IP クエリはアプリケーションで非常に一般的なタスクの 1 つであり、訪問者の地理的位置を特定したり、悪意のあるアクセスを防止したりするために使用できます。この記事では、Golang を使用して IP クエリを実行する方法を説明します。まず IP の基本を説明し、次に Golang での IP クエリのさまざまな方法について説明します。

IP アドレスの基礎知識

IP アドレスはインターネット プロトコル (IP プロトコル) アドレスであり、ネットワーク上のデバイスの一意の識別子です。 IP アドレスは 32 ビットの 2 進数で表され、それぞれ 0 ~ 255 の数値をピリオドで区切った 4 つの 10 進数として記述することもできます。

IPv4 アドレス空間は制限されており、4294967296 個の異なるアドレスのみを表すことができます。インターネットの爆発的な成長により、このアドレス空間は間もなく枯渇してしまいます。したがって、IPv4 アドレス空間が使い果たされる前に、より大きなアドレス空間により多くのアドレスを提供するために、IPv6 アドレスが開発されました。

IP クエリ方法

Golang では、IP クエリには 2 つの方法があります。 1 つ目は、IP クエリにサードパーティのライブラリを使用することです。 2 番目の方法は、標準ライブラリの net パッケージを使用する方法です。このパッケージには、IP クエリを簡単に実行するためのいくつかの組み込み関数が含まれています。

サードパーティ ライブラリの使用

市場には、IP アドレスを通じて地理的位置情報を検索できる人気のあるサードパーティ ライブラリが多数存在します。最も広く使用されているもののいくつかを次に示します。

  1. GeoIP: https://github.com/oschwald/geoip2-golang

GeoIP は、人気のある 3 番目の IP です。 party library では、IP アドレスを通じて地理的位置情報を見つけることができます。これは、IP アドレスを迅速かつ正確に検索できるシンプルかつ強力な API を提供します。以下は簡単な使用例です。

import (
    "fmt"
    "github.com/oschwald/geoip2-golang"
    "net"
)

func main() {
    db, err := geoip2.Open("GeoLite2-City.mmdb")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    ip := net.ParseIP("81.2.69.160")

    record, err := db.City(ip)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("Country: %v\n", record.Country.Names["en"])
    fmt.Printf("City: %v\n", record.City.Names["en"])
    fmt.Printf("Latitude: %v\n", record.Location.Latitude)
    fmt.Printf("Longitude: %v\n", record.Location.Longitude)
}
ログイン後にコピー

この例では、まず「GeoLite2-City」という名前のデータベースを開き、次に net.ParseIP 関数を使用して IP アドレスを解析します。最後に、db.City(ip) 関数を使用して、この IP アドレスの都市情報をクエリします。

  1. IP2Location: https://github.com/ip2location/ip2location-go

IP2Location は、IP アドレスの場所によって地理を検索できる、もう 1 つの人気のある IP アドレス検索ライブラリです。情報。 IP アドレス、ISP、国、都市、緯度、経度などの詳細な IP アドレス情報を提供します。以下は簡単な使用例です:

import (
    "fmt"
    "github.com/ip2location/ip2location-go"
)

func main() {
    db, err := ip2location.OpenDB("IP2LOCATION-LITE-DB1.IPV6.BIN")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    result, err := db.Get_all("81.2.69.160")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("Country: %v\n", result.Country_long)
    fmt.Printf("City: %v\n", result.City)
    fmt.Printf("Latitude: %v\n", result.Latitude)
    fmt.Printf("Longitude: %v\n", result.Longitude)
}
ログイン後にコピー

この例では、まず「IP2LOCATION-LITE-DB1.IPV6.BIN」という名前のデータベースを開き、次に db.Get_all("81.2. 69.160") 関数を使用します。この IP アドレスの詳細情報を照会します。

標準ライブラリで net パッケージを使用する

サードパーティ ライブラリの使用に加えて、Golang 標準ライブラリの net パッケージには、IP クエリを簡単に実行できるいくつかの組み込み関数も提供されています。以下に、一般的な関数をいくつか示します。

  1. net.LookupIP:

この関数は、ホスト名の IP アドレスを検索します。簡単な例を次に示します。

ips, err := net.LookupIP("www.google.com")
if err != nil {
    log.Fatal(err)
}

for _, ip := range ips {
    fmt.Println(ip)
}
ログイン後にコピー

この例では、net.LookupIP("www.google.com") 関数を使用して、www.google.com の IP アドレスをクエリします。次に、ループを使用してこれらの IP アドレスを反復処理します。

  1. net.ParseIP:

この関数は、文字列形式の IP アドレスを net.IP 型の値に変換できます。以下に簡単な例を示します。

ip := net.ParseIP("81.2.69.160")
if ip == nil {
    log.Fatal("Invalid IP address")
}

fmt.Println(ip)
ログイン後にコピー

この例では、net.ParseIP("81.2.69.160") 関数を使用して IP アドレスをクエリし、それを net.IP 型の値に変換します。次に、fmt.Println 関数を使用して IP アドレスを出力します。

概要

IP クエリはアプリケーションで非常に一般的なタスクの 1 つで、訪問者の地理的位置を特定したり、悪意のあるアクセスを防止したりするために使用できます。この記事では、IP の基本を紹介し、Golang での IP クエリのさまざまな方法について説明しました。 GeoIP や IP2Location などのサードパーティ ライブラリを使用することも、Golang 標準ライブラリの net パッケージの組み込み関数を使用することもできます。これらの方法を使用すると、IP クエリを簡単に実行できるため、セキュリティと優れたユーザー エクスペリエンスが得られます。

以上がGolang での IP クエリのさまざまな方法の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート