IP 주소 함수

IP 주소 함수 (IP Address Functions)

Pinot은 IP 주소와 서브넷을 다루는 함수들을 제공해요. 이 함수들은 IPv4와 IPv6 주소를 모두 지원하고, 서브넷 접두사에 CIDR 표기법(예: 192.168.0.0/16, 2001:db8::/32)을 사용해요.

출처: 문서

본문

Pinot은 IP 주소와 서브넷을 다루는 함수들을 제공해요. 이 함수들은 IPv4와 IPv6 주소를 모두 지원하고, 서브넷 접두사에 CIDR 표기법(예: 192.168.0.0/16, 2001:db8::/32)을 사용해요.

isSubnetOf

isSubnetOf(ipPrefix, ipAddress)

주어진 IP 주소가 지정한 서브넷 접두사에 속하면 true를 반환해요. 첫 번째 인자는 CIDR 접두사(예: '192.168.1.0/24')여야 하고, 두 번째 인자는 접두사가 없는 일반 IP 주소여야 해요.

SELECT isSubnetOf('192.168.1.0/24', clientIp) AS is_internal
FROM accessLog
WHERE isSubnetOf('10.0.0.0/8', clientIp)
-- Filters rows where clientIp is in the 10.0.0.0/8 private range

ipPrefix

ipPrefix(ipAddress, prefixBits)

주어진 IP 주소와 비트 단위 접두사 길이에 대한 CIDR 접두사를 반환해요. IP 주소에는 이미 접두사가 포함되어 있으면 안 돼요. 접두사 길이는 IPv4의 경우 032, IPv6의 경우 0128 사이여야 해요.

SELECT ipPrefix(clientIp, 24) AS subnet
FROM accessLog
LIMIT 5
-- For clientIp='192.168.1.100', returns '192.168.1.0/24'

ipSubnetMin

ipSubnetMin(ipPrefix)

주어진 서브넷에서 가장 낮은(첫 번째) IP 주소를 반환해요.

SELECT ipSubnetMin('192.168.1.0/24') AS range_start
FROM myTable
LIMIT 1
-- Returns '192.168.1.0'

ipSubnetMax

ipSubnetMax(ipPrefix)

주어진 서브넷에서 가장 높은(마지막) IP 주소를 반환해요.

SELECT ipSubnetMax('192.168.1.0/24') AS range_end
FROM myTable
LIMIT 1
-- Returns '192.168.1.255'

isIPv4String

isIPv4String(ipString)

입력이 CIDR 접두사가 없는 유효한 IPv4 주소 문자열이면 true를 반환해요.

SELECT isIPv4String('192.168.1.1') AS valid_v4
-- Returns true

isIPv6String

isIPv6String(ipString)

입력이 CIDR 접두사가 없는 유효한 IPv6 주소 문자열이면 true를 반환해요.

SELECT isIPv6String('2001:db8::1') AS valid_v6
-- Returns true

isPrivateIp / is_private_ip

isPrivateIp(ipString)

입력이 CIDR 접두사가 없는 일반 IPv4 또는 IPv6 주소이고 다음 범위 중 하나에 해당하면 true를 반환해요:

  • RFC 1918 IPv4: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
  • IPv4 루프백: 127.0.0.0/8
  • IPv4 링크 로컬: 169.254.0.0/16
  • IPv6 루프백: ::1
  • IPv6 링크 로컬: fe80::/10
  • IPv6 ULA: fc00::/7
SELECT isPrivateIp(clientIp) AS is_private
FROM accessLog
WHERE isPrivateIp(clientIp)
LIMIT 5
-- Returns true for addresses such as '10.0.0.1', '127.0.0.1', 'fe80::1', and 'fd00::1'

ipFamily / ip_family

ipFamily(ipString)

일반 IP 주소 문자열의 주소 계열을 반환해요: IPv4는 4, IPv6는 6.

SELECT ipFamily('2001:db8::1') AS ip_version
-- Returns 6

ipv4ToLong

ipv4ToLong(ipString)

IPv4 주소 문자열을 부호 없는 32비트 정수 표현으로 LONG으로 변환해요.

SELECT ipv4ToLong('192.168.1.1') AS ip_as_long
-- Returns 3232235777

longToIpv4

longToIpv4(value)

IPv4 범위의 부호 없는 32비트 LONG 값을 점으로 구분된 10진수 IPv4 텍스트로 다시 변환해요.

SELECT longToIpv4(3232235777) AS ip_text
-- Returns '192.168.1.1'

ipv6ToBytes

ipv6ToBytes(ipString)

IPv6 주소 문자열을 16바이트 BYTES 값으로 변환해요.

SELECT ipv6ToBytes('2001:db8::1') AS ip_bytes
FROM myTable
LIMIT 1

bytesToIpv6

bytesToIpv6(bytes)

16바이트 IPv6 BYTES 값을 표준 IPv6 텍스트로 변환해요.

SELECT bytesToIpv6(ipv6ToBytes('2001:db8::1')) AS ip_text
-- Returns '2001:db8::1'

ipv4ToIpv6

ipv4ToIpv6(ipString)

IPv4 주소를 IPv4-매핑된 IPv6 표현으로 매핑해요.

SELECT ipv4ToIpv6('192.168.1.1') AS mapped_ip
-- Returns '::ffff:c0a8:101'

ipMaskLen / ip_mask_len

ipMaskLen(cidr)

CIDR 문자열에서 접두사 길이를 반환해요.

SELECT ipMaskLen('192.168.1.0/24') AS prefix_len
-- Returns 24

ipNetmask / ip_netmask

ipNetmask(cidr)

CIDR 접두사의 네트워크 마스크를 IP 주소 문자열로 반환해요.

SELECT ipNetmask('192.168.1.0/24') AS netmask
-- Returns '255.255.255.0'

ipHostmask / ip_hostmask

ipHostmask(cidr)

CIDR 접두사의 호스트 마스크를 IP 주소 문자열로 반환해요.

SELECT ipHostmask('192.168.1.0/24') AS hostmask
-- Returns '0.0.0.255'

ipv4CIDRToRange

ipv4CIDRToRange(cidr)

CIDR 범위가 포함하는 최소 및 최대 IPv4 주소가 담긴 두 요소 STRING[]을 반환해요.

SELECT ipv4CIDRToRange('192.168.1.0/24') AS ip_range
FROM myTable
LIMIT 1
-- Returns ['192.168.1.0', '192.168.1.255']

더 알아보기 (Learn more)