Ip
В модуле Ip поддерживаются как IPv4, так и IPv6 адреса. По умолчанию они представляются в виде бинарных строк длиной 4 и 16 байт соответственно.
Список функций
Ip::FromString(String{Flags:AutoMap}) -> String?— из человекочитаемого представления в бинарноеIp::SubnetFromString(String{Flags:AutoMap}) -> String?— из человекочитаемого представления подсети в бинарноеIp::ToString(String{Flags:AutoMap}) -> String?— из бинарного представления в человекочитаемоеIp::SubnetToString(String{Flags:AutoMap}) -> String?— из бинарного представления подсети в человекочитаемоеIp::Ipv4FromUint32(Uint32{Flags:AutoMap}) -> String— из Uint32 в бинарное представление; целое числоA << 24 | B << 16 | C << 8 | Dсоответствует адресуA.B.C.DIp::Ipv4ToUint32(String{Flags:AutoMap}) -> Uint32?— из бинарного представления IPv4 в Uint32; адресA.B.C.Dсоответствует целому числуA << 24 | B << 16 | C << 8 | D; IPv6 не поддерживаетсяIp::IsIPv4(String?) -> BoolIp::IsIPv6(String?) -> BoolIp::IsEmbeddedIPv4(String?) -> BoolIp::ConvertToIPv6(String{Flags:AutoMap}) -> String— IPv6 остается без изменений, а IPv4 становится embedded в IPv6Ip::GetSubnet(String{Flags:AutoMap}, [Uint8?]) -> String— во втором аргументе размер подсети, по умолчанию 24 для IPv4 и 64 для IPv6Ip::GetSubnetByMask(String{Flags:AutoMap}, String{Flags:AutoMap}) -> String— во втором аргументе битовая маска подсетиIp::SubnetMatch(String{Flags:AutoMap}, String{Flags:AutoMap}) -> Bool— в первом аргументе подсеть, во втором аргументе подсеть или адрес
Примеры
SELECT Ip::IsEmbeddedIPv4(
Ip::FromString("::ffff:77.75.155.3")
); -- true
SELECT
Ip::ToString(
Ip::GetSubnet(
Ip::FromString("213.180.193.3")
)
); -- "213.180.193.0"
SELECT
Ip::SubnetMatch(
Ip::SubnetFromString("192.168.0.1/16"),
Ip::FromString("192.168.1.14"),
); -- true
SELECT
Ip::ToString(
Ip::GetSubnetByMask(
Ip::FromString("192.168.0.1"),
Ip::FromString("255.255.0.0")
)
); -- "192.168.0.0"
SELECT Ip::ToString(
Ip::Ipv4FromUint32(1)
); -- "0.0.0.1"
SELECT Ip::Ipv4ToUint32(
Ip::FromString("0.0.0.1")
); -- 1