IPAddr
IPAddr
IP 주소를 다루기 위한 메서드 집합을 제공하는 클래스예요. IPv4와 IPv6를 모두 지원해요.
출처: Ruby 3.3 API
본문
IPAddr는 IP 주소를 조작하는 여러 메서드를 제공해요. IPv4와 IPv6 모두 지원해요.
예시 (Example)
require 'ipaddr'
ipaddr1 = IPAddr.new "3ffe:505:2::1"
p ipaddr1 #=> #<IPAddr: IPv6:3ffe:0505:0002:0000:0000:0000:0000:0001/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff>
p ipaddr1.to_s #=> "3ffe:505:2::1"
ipaddr2 = ipaddr1.mask(48) #=> #<IPAddr: IPv6:3ffe:0505:0002:0000:0000:0000:0000:0000/ffff:ffff:ffff:0000:0000:0000:0000:0000>
p ipaddr2.to_s #=> "3ffe:505:2::"
ipaddr3 = IPAddr.new "192.168.2.0/24"
p ipaddr3 #=> #<IPAddr: IPv4:192.168.2.0/255.255.255.0>
Constants (상수)
IN4MASK— IPv4용 32비트 마스크IN6FORMAT— IPv6용 형식 문자열IN6MASK— IPv6용 128비트 마스크RE_IPV4ADDRLIKE— IPv4 주소를 파싱할 때 내부적으로 쓰는 RegexpRE_IPV6ADDRLIKE_COMPRESSED— IPv6 주소를 파싱할 때 내부적으로 쓰는 RegexpRE_IPV6ADDRLIKE_FULL— IPv6 주소를 파싱할 때 내부적으로 쓰는 RegexpVERSION
Attributes (속성)
family [R]
이 IP 주소의 주소 패밀리(address family)를 돌려줘요.
Public Class Methods
new (addr = '::', family = Socket::AF_UNSPEC)
사람이 읽을 수 있는 IP 주소 문자열로부터, 또는 패킹된 in_addr 값과 주소 패밀리로부터 새 ipaddr 객체를 만들어요.
전자의 경우 인식되는 유효 형식은 "address", "address/prefixlen", "address/mask"예요. IPv6 주소는 대괄호([와 ])로 감쌀 수 있어요. prefixlen이나 마스크를 지정하면 마스킹된 IP 주소를 돌려줘요. 주소 패밀리는 주어진 문자열에서 자동으로 결정되지만, 선택 사항인 두 번째 인자로 명시할 수도 있어요.
그 외에는 패킹된 in_addr 값과 주소 패밀리로 IP 주소를 만들어요.
IPAddr 클래스는 많은 메서드와 연산자를 정의하는데, 그중 &, |, include?, == 같은 일부는 IPAddr 객체 대신 문자열이나 패킹된 in_addr 값을 받아요.
new_ntoh (addr)
주어진 네트워크 바이트 순서(network byte order) 문자열 형태의 IP 주소를 담은 새 ipaddr을 만들어요.
ntop (addr)
네트워크 바이트 순서 문자열 형태의 IP 주소를 사람이 읽을 수 있는 형태로 변환해요.
Public Instance Methods
& (other)
비트 AND로 만든 새 ipaddr을 돌려줘요.
<< (num)
비트 왼쪽 시프트(bitwise left shift)로 만든 새 ipaddr을 돌려줘요.
<=> (other)
ipaddr을 다른 값과 비교해요.
== (other)
두 ipaddr이 같으면 true를 돌려줘요.
=== (other)
>> (num)
비트 오른쪽 시프트(bitwise right shift)로 만든 새 ipaddr을 돌려줘요.
eql? (other)
Hash에서 쓰는 동등성(equality)을 검사해요.
hash ()
Hash, Set, Array 클래스에서 쓰는 해시 값을 돌려줘요.
hton ()
IP 주소의 네트워크 바이트 순서 문자열 형태를 돌려줘요.
include? (other)
주어진 ipaddr이 범위 안에 있으면 true를 돌려줘요. 예시를 볼게요.
require 'ipaddr'
net1 = IPAddr.new("192.168.2.0/24")
net2 = IPAddr.new("192.168.2.100")
net3 = IPAddr.new("192.168.3.0")
net4 = IPAddr.new("192.168.2.0/16")
p net1.include?(net2) #=> true
p net1.include?(net3) #=> false
p net1.include?(net4) #=> false
p net4.include?(net1) #=> true
inspect ()
ipaddr의 사람이 읽을 수 있는 표현("#<IPAddr: family:address/mask>")을 담은 문자열을 돌려줘요.
ip6_arpa ()
RFC3172와 호환되는 DNS 역방향 조회용 문자열을 돌려줘요.
ip6_int ()
RFC1886과 호환되는 DNS 역방향 조회용 문자열을 돌려줘요.
ipv4? ()
ipaddr이 IPv4 주소이면 true를 돌려줘요.
ipv4_compat ()
네이티브 IPv4 주소를 IPv4 호환(IPv4-compatible) IPv6 주소로 변환해 만든 새 ipaddr을 돌려줘요.
ipv4_compat? ()
ipaddr이 IPv4 호환 IPv6 주소이면 true를 돌려줘요.
ipv4_mapped ()
네이티브 IPv4 주소를 IPv4 매핑(IPv4-mapped) IPv6 주소로 변환해 만든 새 ipaddr을 돌려줘요.
ipv4_mapped? ()
ipaddr이 IPv4 매핑 IPv6 주소이면 true를 돌려줘요.
ipv6? ()
ipaddr이 IPv6 주소이면 true를 돌려줘요.
link_local? ()
ipaddr이 링크-로컬(link-local) 주소이면 true를 돌려줘요. RFC 3927이 예약한 169.254.0.0/16의 IPv4 주소와 RFC 4291이 예약한 fe80::/10의 링크-로컬 IPv6 유니캐스트 주소가 링크-로컬로 간주돼요.
loopback? ()
ipaddr이 루프백(loopback) 주소이면 true를 돌려줘요.
mask (prefixlen)
주어진 prefixlen/netmask로 IP 주소를 마스킹해 만든 새 ipaddr을 돌려줘요. (예: 8, 64, "255.255.255.0" 등)
native ()
IPv6 주소를 네이티브 IPv4 주소로 변환해 만든 새 ipaddr을 돌려줘요. IP 주소가 IPv4 매핑 또는 IPv4 호환 IPv6 주소가 아니면 self를 돌려줘요.
netmask ()
netmask를 문자열 형식(예: 255.255.0.0)으로 돌려줘요.
prefix ()
ipaddr의 접두사(prefix) 길이를 비트 단위로 돌려줘요.
prefix= (prefix)
접두사 길이를 비트 단위로 설정해요.
private? ()
ipaddr이 사설(private) 주소이면 true를 돌려줘요. RFC 1918이 정의한 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16의 IPv4 주소와 RFC 4193이 정의한 fc00::/7의 IPv6 유니크 로컬 주소가 사설로 간주돼요. IPv4 매핑 IPv6 주소 범위 안의 사설 IPv4 주소도 사설로 간주돼요.
reverse ()
DNS 역방향 조회용 문자열을 돌려줘요. IPv6 주소일 땐 RFC3172 형태의 문자열을 돌려줘요.
succ ()
ipaddr의 다음 값(successor)을 돌려줘요.
to_i ()
ipaddr의 정수 표현을 돌려줘요.
to_range ()
네트워크 주소에 대한 Range 객체를 만들어요.
to_s ()
IP 주소 표현을 담은 문자열을 돌려줘요.
to_string ()
IP 주소의 표준(canonical) 형태 표현을 담은 문자열을 돌려줘요.
zone_id ()
IPv6 존 식별자(zone identifier)가 있으면 돌려줘요. IPv6 주소가 아니면 InvalidAddressError를 발생시켜요.
zone_id= (zid)
IPv6 존 식별자를 설정해요. IPv6 주소가 아니면 InvalidAddressError를 발생시켜요.
| (other)
비트 OR로 만든 새 ipaddr을 돌려줘요.
~ ()
비트 부정(bitwise negation)으로 만든 새 ipaddr을 돌려줘요.
Protected Instance Methods
begin_addr ()
end_addr ()
mask! (mask)
현재 netmask를 주어진 mask로 설정해요.
set (addr, *family)
내부에 저장된 IP 주소인 +@addr+를 주어진 addr로 설정해요. addr 인자는 첫 번째 패밀리 멤버인 Socket::AF_INET 또는 Socket::AF_INET6로 검증돼요.
Private Instance Methods
_ipv4_compat?, _reverse, _to_string (addr), addr_mask (addr), coerce_other (other), in6_addr (left), in_addr (addr) 등의 private 메서드가 내부 구현으로 제공돼요.