Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengesahkan kesahihan alamat IP dalam golang

Bagaimana untuk mengesahkan kesahihan alamat IP dalam golang

WBOY
WBOYasal
2023-06-24 08:28:571500semak imbas

Dalam golang, mengesahkan kesahihan alamat IP biasanya memerlukan penggunaan beberapa fungsi dan struktur dalam pakej bersih. Dalam artikel ini, kami akan memperkenalkan cara menggunakan fungsi dan struktur ini untuk mengesahkan kesahihan alamat IP.

Pertama, kita perlu menggunakan fungsi net.ParseIP() untuk menghuraikan alamat IP dan menukarnya kepada jenis net.IP. Fungsi ini menerima parameter rentetan dan mengembalikan nilai jenis net.IP. Jika rentetan ialah alamat IP yang sah, mengembalikan nilai jenis net.IP untuk alamat IP tersebut. Jika rentetan itu bukan alamat IP yang sah, nilai nol dikembalikan.

Sebagai contoh, kod berikut menghuraikan rentetan "192.168.1.1" ke dalam nilai jenis net.IP dan menyerahkannya kepada ip pembolehubah:

ip := net.ParseIP("192.168.1.1")

Jika rentetan itu bukan sah Alamat IP , maka ip akan menjadi sifar. Oleh itu, apabila mengesahkan kesahihan alamat IP, kita perlu menyemak sama ada pembolehubah ip adalah sifar.

Seterusnya, kita boleh menggunakan fungsi net.IP.IsIPv4() dan net.IP.IsIPv6() untuk menentukan sama ada alamat IP ialah alamat IPv4 atau alamat IPv6. Jika alamat IP ialah alamat IPv4, fungsi IsIPv4() mengembalikan benar, manakala fungsi IsIPv6() mengembalikan palsu. Jika alamat IP ialah alamat IPv6, fungsi IsIPv4() mengembalikan palsu dan fungsi IsIPv6() mengembalikan benar.

Sebagai contoh, kod berikut menyemak sama ada ip pembolehubah ialah alamat IPv4 dan memberikan hasilnya kepada pembolehubah isIPv4:

isIPv4 := ip != nil && ip.IsIPv4()

Jika ip pembolehubah ialah alamat IPv4 yang sah, maka isIPv4 akan menjadi benar. Jika tidak, isIPv4 akan menjadi palsu.

Selain itu, apabila mengesahkan kesahihan alamat IP, kami juga perlu menyemak sama ada alamat IP berada dalam julat alamat IP tertentu. Dalam golang, kita boleh menggunakan jenis net.IPNet untuk mewakili julat alamat IP. net.IPNet terdiri daripada alamat IP dan topeng subnet, yang digunakan untuk mengenal pasti julat alamat IP.

Sebagai contoh, kod berikut menggunakan fungsi net.ParseCIDR() untuk menghuraikan rentetan "192.168.1.0/24" dan menukarnya kepada net.Jenis IPNet:

ip, subnet, _ := net.ParseCIDR("192.168.1.0/24")

where ip ialah nilai bersih A bagi jenis .IP, menunjukkan alamat IP "192.168.1.0". subnet ialah nilai jenis net.IPMask, mewakili topeng subnet. Fungsi ini juga mengembalikan nilai ralat jenis untuk menunjukkan sama ada ralat berlaku. Dalam contoh ini, kita mengabaikan nilai ini.

Seterusnya, kita boleh menggunakan fungsi net.IPNet.Contains() untuk menyemak sama ada alamat IP berada dalam julat alamat IP yang ditentukan. Sebagai contoh, kod berikut menyemak sama ada alamat IP "192.168.1.100" berada dalam julat 192.168.1.0/24:

isInRange := subnet.Contains(net.ParseIP("192.168.1.100"))

isInRange akan menjadi benar jika alamat IP berada dalam julat alamat IP yang ditentukan. Jika tidak, isInRange akan menjadi palsu.

Ringkasnya, kami boleh menggunakan fungsi dan struktur ini dalam pakej bersih untuk mengesahkan kesahihan alamat IP. Kod berikut menunjukkan cara menggunakannya bersama:

func validateIP(ipStr string) bool {
    ip := net.ParseIP(ipStr)
    if ip == nil {
        return false
    }

    if ip.IsIPv4() {
        subnet := net.IPv4(192, 168, 1, 0).Mask(net.CIDRMask(24, 32))
        return subnet.Contains(ip)
    }

    if ip.IsIPv6() {
        subnet := &net.IPNet{
            IP:   net.ParseIP("2001:db8::"),
            Mask: net.CIDRMask(64, 128),
        }
        return subnet.Contains(ip)
    }

    return false
}

Fungsi ini menerima parameter rentetan ipStr yang mewakili alamat IP untuk disahkan. Ia mula-mula menghuraikan rentetan dan menukarnya kepada nilai jenis net.IP. Jika nilainya sifar, ini bermakna alamat IP tidak sah dan fungsi mengembalikan palsu. Jika tidak, fungsi memilih julat alamat IP yang sepadan berdasarkan sama ada alamat IP ialah alamat IPv4 atau IPv6 dan menggunakan fungsi net.IPNet.Contains() untuk menyemak sama ada alamat IP berada dalam julat. Fungsi kembali benar jika alamat IP berada dalam julat alamat IP yang ditentukan. Jika tidak, fungsi mengembalikan palsu.

Dengan menggunakan fungsi dan struktur ini dalam pakej bersih, kami boleh mengesahkan kesahihan alamat IP dengan mudah dan memastikan aplikasi mengendalikan sambungan rangkaian dengan betul.

Atas ialah kandungan terperinci Bagaimana untuk mengesahkan kesahihan alamat IP dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn