Как я могу проверить адреса IPv4 и IPv6 в Swift? - PullRequest
1 голос
/ 01 февраля 2020

Адреса IPv4 относительно легко проверить: они имеют 4 октета, разделенных цифрами. Каждый октет представляет собой целое число в диапазоне от 0 до 255.

Адреса IPv6 трудно проверить. У них есть 8 шестнадцатеричных, каждый с 4 шестнадцатеричными цифрами, разделенными двоеточиями. Адреса IPv6 также имеют правила сокращения, при которых ведущие нули в каждом гексетете могут быть удалены (оставляя как минимум один ноль в каждом гексетете). Кроме того, один или несколько последовательных: 0: шестнадцатеричные числа могут быть сокращены до ::, но только один раз для каждого адреса IPv6.

Как проверить адреса IPv4 и IPv6 в Swift?

1 Ответ

0 голосов
/ 01 февраля 2020

Сетевой каркас имеет сбойный инициализатор для структур IPv4Address и IPv6Address, которые принимают конструктор String. Для проверки адреса достаточно просто проверить, можно ли инициализировать Struct со строкой.

Это особенно полезно для адресов IPv6, которые имеют длинный формат с нетривиальными правилами сокращения.

import Network

let addresses = ["1.2.33.44","1.265.33.33","2001:db8::35:44","2001:db8::33::44"]

for address in addresses {
    if let _ = IPv4Address(address) {
        print("address \(address) is a valid IPv4 address")
    } else if let _ = IPv6Address(address) {
        print("address \(address) is a valid IPv6 address")
    } else {
        print("address \(address) is neither an IPv4 address nor an IPv6 address")
    }
}

вывод:

address 1.2.33.44 is a valid IPv4 address
address 1.265.33.33 is neither an IPv4 address nor an IPv6 address
address 2001:db8::35:44 is a valid IPv6 address
address 2001:db8::33::44 is neither an IPv4 address nor an IPv6 address
...