# \[Feature:1.9\] How about IPAddr#\<=\> to take care of mask\_addr?

**URL:** <https://www.ruby-forum.com/t/feature-1-9-how-about-ipaddr-to-take-care-of-mask-addr/173366>\
**Category:** Development\
**Created:** [August 7, 2009, 11:32am UTC](https://www.ruby-forum.com/t/feature-1-9-how-about-ipaddr-to-take-care-of-mask-addr/173366 "2009-08-07T11:32:08Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Nobuhiro\_IMAI](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/9f8e36/32.png) [@Nobuhiro\_IMAI](https://www.ruby-forum.com/u/Nobuhiro_IMAI)\
**Post date:** [August 7, 2009, 11:32am UTC](https://www.ruby-forum.com/t/feature-1-9-how-about-ipaddr-to-take-care-of-mask-addr/173366/1 "2009-08-07T11:32:08Z")

</div>

e$B$$$^$$$G$9!#e(B

#1877 e$B$O$"$j$,$H$&$4$6$$$^$7$?!#e(B

IPAddr  
e$B$N%$%s%9%?%s%9$,%O%C%7%e$N%-!\<$K=PMh$k$h$&$K$J$C$?$N$G!"4JC1$Je(B  
Access Control List e$B$r=q$$$F$\_$?$N$G$9$,!"e(B

> > RUBY\_DESCRIPTION  
> > =\> “ruby 1.9.2dev (2009-08-07 trunk 24440) [i686-linux]”  
> > acl = {  
> > ?\> IPAddr.new(“192.168.2.0/29”) =\> :admin,  
> > ?\> IPAddr.new(“192.168.2.0/24”) =\> :user,  
> > ?\> }  
> > =\> {#\<IPAddr: IPv4:192.168.2.0/255.255.255.248\>=\>:admin, #\<IPAddr:  
> > IPv4:192.168.2.0/255.255.255.0\>=\>:user}  
> > acl.select{|r, | r === “192.168.2.56”}.max.last  
> > =\> :user  
> > acl.select{|r, | r === “192.168.2.1”}.max.last  
> > =\> :user

e$B$H!“$A$g$C$H;DG0$J46$8$G$9!#e(B\<=\> e$B$G!“e(B@addr e$B$,F1$8\>l9g$Oe(B  
@mask\_addr e$B$NBge(B  
e$B$-$$J}$,e(B IPAddr  
e$B$H$7$FBg$-$$$H$9$k$H!”%M%C%H%^%9%/$ND9$$J}$,:NMQ$5$l$ke(B  
e$B$h$&$J%$%a!\<%8$G$&$l$7$$5$$,$9$k$N$G$9$,!”$I$&$G$7$g$&$+!)e(B

e$B$^$?!"$3$l$Ge(B(e$B$H$$$&$+85$+$i!)e(B) IPAddr#==  
e$B$OITMW$J5$$,$9$k$N$G$9$,!"2?e(B  
e$B$+8+Mn$H$7$F$k$G$7$g$&$+!)e(B

IPAddr.new(“192.168.2.0/24”) == IPAddr.new(“192.168.2.0/32”)

## e$B$,e(B true e$B$+$ie(B false e$B$KJQ$o$k$H$$$&;EMMJQ99$J$N$G$9$,!"$I$&$G$7$g$&$+!)e(B

Nobuhiro IMAI [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Key fingerprint = F39E D552 545D 7C64 D690 F644 5A15 746C BD8E 7106

# Index: lib/ipaddr.rb

— lib/ipaddr.rb (revision 24440)  
+++ lib/ipaddr.rb (working copy)  
@@ -133,16 +133,10 @@ class IPAddr

# Returns a new ipaddr built by bitwise negation.

def ~  
return self.clone.set(addr\_mask(~@addr))  
end

- 
# Returns true if two ipaddrs are equal.
- def ==(other)

- other = coerce\_other(other)

- return @family == other.family && @addr == other.to\_i

- end

- 
# Returns a new ipaddr built by masking IP address with the given

# prefixlen/netmask. (e.g. 8, 64, “255.255.255.0”, etc.)

def mask(prefixlen)  
return self.clone.mask!(prefixlen)  
end  
@@ -325,11 +319,11 @@ class IPAddr  
def \<=\>(other)  
other = coerce\_other(other)

return nil if other.family != @family

- return @addr \<=\> other.to\_i

- return [@addr, @mask\_addr] \<=\> [other.to\_i, other.mask\_addr]  
end  
include Comparable

# Checks equality used by Hash.

def eql?(other)  
@@ -372,10 +366,12 @@ class IPAddr  
af, \_to\_string(@addr), \_to\_string(@mask\_addr))  
end

protected

- attr\_reader :mask\_addr
- def set(addr, \*family)  
case family[0] ? family[0] : @family  
when Socket::AF\_INET  
if addr \< 0 || addr \> IN4MASK  
raise ArgumentError, “invalid address”  
@@ -789,15 +785,24 @@ class TC\_Operator \< Test::Unit::TestCase  
a = ~@in6\_addr\_any  
assert\_equal(IN6MASK128, a.to\_s)  
assert\_equal(“::”, @in6\_addr\_any.to\_s)  
end

- def test\_equal
- assert\_equal(true, @a == IPAddr.new(“3ffe:505:2::”))

- def test\_compare
- assert\_equal(true, @a == IPAddr.new(“3ffe:505:2::/48”))
- assert\_equal(false, @a == IPAddr.new(“3ffe:505:2::”))  
assert\_equal(false, @a == IPAddr.new(“3ffe:505:3::”))  
assert\_equal(true, @a != IPAddr.new(“3ffe:505:3::”))

- assert\_equal(false, @a != IPAddr.new(“3ffe:505:2::”))

- assert\_equal(false, @a != IPAddr.new(“3ffe:505:2::/48”))
- x = IPAddr.new(“3ffe:505:3::/48”)
- y = IPAddr.new(“3ffe:505:2::/64”)
- assert\_equal(true, @a \< x)
- assert\_equal(true, @a \< y)
- assert\_equal(false, x \< y)
- min, max = [y, x, @a].minmax
- assert\_equal(@a, min)
- assert\_equal(x, max)  
end

def test\_mask  
a = @a.mask(32)  
assert\_equal(“3ffe:505::”, a.to\_s)

---

<div class="post-metadata">

**Author:** ![Nobuhiro\_IMAI](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/9f8e36/32.png) [@Nobuhiro\_IMAI](https://www.ruby-forum.com/u/Nobuhiro_IMAI)\
**Post date:** [August 14, 2009, 2:20pm UTC](https://www.ruby-forum.com/t/feature-1-9-how-about-ipaddr-to-take-care-of-mask-addr/173366/2 "2009-08-14T14:20:21Z")

</div>

e$B$$$^$$$G$9!#e(B

From: Nobuhiro IMAI \<nov\_at\_yo.rim.or.jp\>  
Date: Fri, 7 Aug 2009 18:31:36 +0900

> e$B$H!"$A$g$C$H;DG0$J46$8$G$9!#e(B\<=\> e$B$G!“e(B@addr e$B$,F1$8\>l9g$Oe(B @mask\_addr e$B$NBge(B  
> e$B$-$$J}$,e(B IPAddr e$B$H$7$FBg$-$$$H$9$k$H!”%M%C%H%^%9%/$ND9$$J}$,:NMQ$5$l$ke(B  
> e$B$h$&$J%$%a!\<%8$G$&$l$7$$5$$,$9$k$N$G$9$,!"$I$&$G$7$g$&$+!)e(B
> 
> e$B$^$?!"$3$l$Ge(B(e$B$H$$$&$+85$+$i!)e(B) IPAddr#== e$B$OITMW$J5$$,$9$k$N$G$9$,!"2?e(B  
> e$B$+8+Mn$H$7$F$k$G$7$g$&$+!)e(B
> 
> IPAddr.new(“192.168.2.0/24”) == IPAddr.new(“192.168.2.0/32”)
> 
> e$B$,e(B true e$B$+$ie(B false e$B$KJQ$o$k$H$$$&;EMMJQ99$J$N$G$9$,!"$I$&$G$7$g$&$+!)e(B

e$B\>/$7;~4V$,3+$$$F$7$^$$$^$7$?$,!"e(B

- e$B%"%I%l%9$,F1$8\>l9g!"%M%C%H%^%9%/D9$,D9$$J}$,e(B IPAddr  
e$B$H$7$FBg$-$$$H$\_e(B  
e$B$J$9e(B(IPAddr#\<=\> e$B$Ge(B @mask\_addr e$B$r9MN8$9$ke(B)
- \<=\> e$B$He(B Comparable e$B$K$h$je(B ==  
e$B$ODj5A$5$l$k$N$G!"e(BIPAddr#== e$B$OGQ;\_$9$ke(B

e$B$H$$$&e(B [ruby-dev:39038] e$B$N%Q%C%A$O$I$&$G$7$g$&$+!)e(B

---

<div class="post-metadata">

**Author:** ![Nobuhiro\_IMAI](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/9f8e36/32.png) [@Nobuhiro\_IMAI](https://www.ruby-forum.com/u/Nobuhiro_IMAI)\
**Post date:** [September 12, 2009, 2:18pm UTC](https://www.ruby-forum.com/t/feature-1-9-how-about-ipaddr-to-take-care-of-mask-addr/173366/3 "2009-09-12T14:18:59Z")

</div>

e$B$$$^$$$G$9!#e(B

From: Nobuhiro IMAI \<nov\_at\_yo.rim.or.jp\>  
Date: Fri, 14 Aug 2009 21:19:42 +0900

> e$B\>/$7;~4V$,3+$$$F$7$^$$$^$7$?$,!"e(B
> 
> - e$B%"%I%l%9$,F1$8\>l9g!"%M%C%H%^%9%/D9$,D9$$J}$,e(B IPAddr e$B$H$7$FBg$-$$$H$\_e(B  
> e$B$J$9e(B(IPAddr#\<=\> e$B$Ge(B @mask\_addr e$B$r9MN8$9$ke(B)
> - \<=\> e$B$He(B Comparable e$B$K$h$je(B == e$B$ODj5A$5$l$k$N$G!"e(BIPAddr#== e$B$OGQ;\_$9$ke(B
> 
> e$B$H$$$&e(B [ruby-dev:39038] e$B$N%Q%C%A$O$I$&$G$7$g$&$+!)e(B

e$B$5$i$K;~4V$,3+$$$F$7$^$$$^$7$?$,!"$I$A$i$b\<u$1F~$l$i$l$J$$$G$7$g$&$+!)e(B

> IPAddr.new(“192.168.2.0/24”) == IPAddr.new(“192.168.2.0/32”)
> 
> e$B$,e(B true e$B$+$ie(B false e$B$KJQ$o$k$H$$$&;EMMJQ99$J$N$G$9$,!"$I$&$G$7$g$&$+!)e(B

e$B$H$$$&$N$,$^$:$$$G$7$g$&$+!#e(B

---

<div class="post-metadata">

**Author:** ![Nobuhiro\_IMAI](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/9f8e36/32.png) [@Nobuhiro\_IMAI](https://www.ruby-forum.com/u/Nobuhiro_IMAI)\
**Post date:** [September 27, 2009, 5:01am UTC](https://www.ruby-forum.com/t/feature-1-9-how-about-ipaddr-to-take-care-of-mask-addr/173366/4 "2009-09-27T05:01:33Z")

</div>

ã€€ã“ã“æ•°ãƒ¶æœˆç§ç”Ÿæ´»ã§å¿™ã—ãã€è¿”äº‹ãŒé…ã‚Œã¦ã—ã¾ã„ã™ã¿ã¾ã›ã‚“ã€‚

At Sat, 12 Sep 2009 21:18:13 +0900,  
Nobuhiro IMAI wrote:

> ã•ã‚‰ã«æ™‚é–“ãŒé–‹ã„ã¦ã—ã¾ã„ã¾ã—ãŸãŒã€ã©ã¡ã‚‰ã‚‚å—ã‘å…¥ã‚Œã‚‰ã‚Œãªã„ã§ã—ã‚‡ã†ã‹ï¼Ÿ
> 
> > IPAddr.new(“192.168.2.0/24”) == IPAddr.new(“192.168.2.0/32”)
> > 
> > ãŒ true ã‹ã‚‰ false ã«å¤‰ã‚ã‚‹ã¨ã„ã†ä»•æ§˜å¤‰æ›´ãªã®ã§ã™ãŒã€ã©ã†ã§ã—ã‚‡ã†ã‹ï¼Ÿ
> 
> ã¨ã„ã†ã®ãŒã¾ãšã„ã§ã—ã‚‡ã†ã‹ã€‚

ã€€ã“ã‚Œã¯å—ã‘å…¥ã‚Œã‚‰ã‚Œã¾ã›ã‚“ã€‚IPAddrã¯ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã‚‚ä¿æŒã™ã‚‹ãŸã‚  
ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚‚è¡¨ç¾ã§ãã¾ã™ãŒã€ç¬¬ä¸€ç¾©ã¯IPã‚¢ãƒ‰ãƒ¬ã‚¹ãªã®ã§ã€ãƒãƒƒãƒˆ  
ãƒžã‚¹ã‚¯ã®é•ã„ã§ç­‰ã—ããªããªã‚‹ã®ã¯ã¾ãšã„ã§ã™ã€‚

ã€€ãã®ä¸Šã§ã€ã‚½ãƒ¼ãƒˆã®ä¾¿å®œã‚’è€ƒãˆã¦ \<=\> ã«ã¤ã„ã¦ã¯ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã‚’  
è¦‹ã¦ a1 == a2 && (a1 \<=\> a2) != 0 ã¨ã„ã†ã‚±ãƒ¼ã‚¹ã‚’è¨±ã™ã¨ã„ã†ã®ã‚‚  
ãªãã¯ãªã„ã¨æ€ã„ã¾ã™ãŒã€ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã«è¦‹ã‚‰ã‚Œã‚‹ãƒ‹ãƒ¼ã‚ºã‚’æº€ãŸã™  
ã‚ˆã‚Šã‚ˆã„æ–¹æ³•ã¯ã»ã‹ã«ã‚ã‚‹ã¨æ€ã„ã¾ã™ã€‚

ã€€ã¾ãšã€æ”¹ã‚ã¦APIã‚’è¦‹ã‚‹ã¨ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã‚’å–ã‚‹æ‰‹æ®µãŒãªã„ã®ã§ã€  
#mask\_addr ã‚„ #prefixlen ã®ã‚ˆã†ãªãƒ¡ã‚½ãƒƒãƒ‰ã‚’ç”¨æ„ã—ã¦  
sort\_by/max\_by {|i| [i, i.mask\_addr] } ã§ãã‚‹ã‚ˆã†ã«ã™ã‚‹ã®ãŒ  
ã²ã¨ã¤ã€‚(ã“ã‚Œã¯æœ¬ä»¶ã«é–¢ä¿‚ãªã)

ã€€ã‚‚ã†ä¸€ã¤ã¯ class NetAddr \< IPAddr ã®ã‚ˆã†ãªã‚µãƒ–ã‚¯ãƒ©ã‚¹ã‚’ä½œã‚Šã€  
ãã¡ã‚‰ã§ == ã‚„ \<=\> ã‚’ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹æ–¹æ³•ã€‚

ã€€ä¸¡æ–¹ã‚„ã£ã¦ã‚‚ã„ã„ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“ã­ã€‚ã©ã†ã§ã—ã‚‡ã†ã‹ã€‚

---

<div class="post-metadata">

**Author:** ![Nobuhiro\_IMAI](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/9f8e36/32.png) [@Nobuhiro\_IMAI](https://www.ruby-forum.com/u/Nobuhiro_IMAI)\
**Post date:** [September 28, 2009, 2:21pm UTC](https://www.ruby-forum.com/t/feature-1-9-how-about-ipaddr-to-take-care-of-mask-addr/173366/5 "2009-09-28T14:21:04Z")

</div>

At Mon, 28 Sep 2009 10:26:18 +0900,  
Kazuhiro NISHIYAMA wrote:

> IPAddr.new(“192.168.0.2/24”) #=\> #\<IPAddr: IPv4:192.168.0.0/255.255.255.0\>
> 
> ã®ã‚ˆã†ã«ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ãŒã‚ã‚‹ã¨newã®å¼•æ•°ã®æ–‡å­—åˆ—ã‚ˆã‚Šã‚‚æƒ…å ±ãŒæ¸›ã£ã¦ã—ã¾ã£ã¦  
> åˆ¥é€”å…ƒã®IPã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’æŒã£ã¦ãŠã‹ãªã„ã¨ã„ã‘ãªã„ã®ãŒä¸ä¾¿ã§ã™ã€‚

ã€€ã“ã‚Œã¯ã©å¿˜ã‚Œã—ã¦ã„ã¾ã—ãŸã€‚ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã‚’æŒ‡å®šã™ã‚‹ã¨ mask! ã•ã‚Œã¦  
ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã«ãªã‚‹ã‚“ã§ã™ã­ã€‚ï¼ˆã¨ã„ã†ã‹ã™ã¹ã¦ãŒãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯  
ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã€ãƒ•ãƒ«ãƒ“ãƒƒãƒˆãƒžã‚¹ã‚¯ã«ã‚ˆã£ã¦å˜ä¸€ã®IPã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’è¡¨ã™ï¼‰

ã€€ã¨ã™ã‚Œã° == ã®å¤‰æ›´ã¯ãƒªãƒ¼ã‚ºãƒŠãƒ–ãƒ«ã¨ã‚‚è¨€ãˆã¾ã™ãŒã€äº’æ›æ€§ã‚’å¤±ã†ã“ã¨  
ã«ã¯ã‚„ã¯ã‚ŠæŠµæŠ—ã‚’è¦šãˆã¾ã™ã€‚

ã€€æ¬¡ã®ã‚ˆã†ãªAPIã®æ”¹ä¿®æ–¹é‡ã¯ã©ã†ã§ã—ã‚‡ã†ã‹ã€‚

IPAddr.new(addr\_with\_netmask) # / ã‚’å«ã‚€æ–‡å­—åˆ—

ã§ç”Ÿæˆã•ã‚ŒãŸã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«ã¤ã„ã¦ã¯å†…éƒ¨ã§ãƒ•ãƒ©ã‚°ã‚’ç«‹ã¦ã€ netmask ã«  
ä¾ã‚‰ãªã„æ¯”è¼ƒã‚’å«ã‚å¾“æ¥é€šã‚Šã«æŒ¯ã‚‹èˆžã†ã‚ˆã†ã«ã—ã¾ã™ã€‚

ã€€ãã®ä¸Šã§ã“ã®ç”¨æ³•ã¯æ®µéšŽçš„ã«è­¦å‘Šã€œå»ƒæ­¢ã—ã€æ–°è¨­ã™ã‚‹

IPAddr.parse(addr\_with\_netmask) # / ã‚’å«ã‚€æ–‡å­—åˆ—  
IPAddr.new(addr, netmask) # ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯ç¬¬2å¼•æ•°ã§æŒ‡å®š

ã¸ã®ç§»è¡Œã‚’ä¿ƒã—ã¾ã™ã€‚

ã€€ã“ã†ã™ã‚‹ã¨ã€æ–°ãŸã«ã€Œãƒ•ãƒ«ãƒ“ãƒƒãƒˆã§ãªã„ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã‚’æŒ‡å®šã•ã‚ŒãŸ  
IPã‚¢ãƒ‰ãƒ¬ã‚¹ã€ã¨ã„ã†æ–°ç¨®ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒåŠ ã‚ã‚‹ã“ã¨ã«ãªã‚‹ã®ã§ã€  
ç­‰ä¾¡æ€§ã‚„å¤§å°é–¢ä¿‚ã‚’å«ã‚€ä»»æ„ã®æ¼”ç®—ã«ã¤ã„ã¦æ–°ã—ã„å®šç¾©ã‚’å°Žå…¥ã§ãã‚‹  
ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚

ã€€ãŸã ã®æ€ã„ã¤ãã§ã™ãŒã€ã²ã¨ã¤ã®ææ–™ã¨ã—ã¦ã„ãŸã ã‘ã‚Œã°ã€‚

---

<div class="post-metadata">

**Author:** ![Nobuhiro\_IMAI](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/9f8e36/32.png) [@Nobuhiro\_IMAI](https://www.ruby-forum.com/u/Nobuhiro_IMAI)\
**Post date:** [October 4, 2009, 6:40am UTC](https://www.ruby-forum.com/t/feature-1-9-how-about-ipaddr-to-take-care-of-mask-addr/173366/6 "2009-10-04T06:40:38Z")

</div>

e$B$$$^$$$G$9!#e(B

From: “Akinori MUSHA” \<knu\_at\_iDaemons.org\>  
Date: Sun, 27 Sep 2009 12:00:48 +0900

> > > - e$B%"%I%l%9$,F1$8\>l9g!"%M%C%H%^%9%/D9$,D9$$J}$,e(B IPAddr e$B$H$7$FBg$-$$$H$\_e(B  
> > > e$B$J$9e(B(IPAddr#\<=\> e$B$Ge(B @mask\_addr e$B$r9MN8$9$ke(B)
> > > - \<=\> e$B$He(B Comparable e$B$K$h$je(B == e$B$ODj5A$5$l$k$N$G!"e(BIPAddr#== e$B$OGQ;\_$9$ke(B
> > > 
> > > e$B$H$$$&e(B [ruby-dev:39038] e$B$N%Q%C%A$O$I$&$G$7$g$&$+!)e(B

> > > IPAddr.new(“192.168.2.0/24”) == IPAddr.new(“192.168.2.0/32”)
> > > 
> > > e$B$,e(B true e$B$+$ie(B false e$B$KJQ$o$k$H$$$&;EMMJQ99$J$N$G$9$,!"$I$&$G$7$g$&$+!)e(B
> > 
> > e$B$H$$$&$N$,$^$:$$$G$7$g$&$+!#e(B
> 
> e$B!!$3$l$O\<u$1F~$l$i$l$^$;$s!#e(BIPAddre$B$O%M%C%H%^%9%/$bJ];}$9$k$?$ae(B  
> e$B%M%C%H%o!\<%/$bI=8=$G$-$^$9$,!“Bh0l5A$Oe(BIPe$B%”%I%l%9$J$N$G!"%M%C%He(B  
> e$B%^%9%/$N0c$$$GEy$7$/$J$/$J$k$N$O$^$:$$$G$9!#e(B

e$B$=$&$G$9$+!"J,$+$j$^$7$?!#e(B\<=\> e$B$NJQ99$O\<h$j2\<$2$^$9!#e(B

e$B$=$l$O$=$l$H$7$F!“e(B\<=\> e$B$He(B include Comparable e$B$,$”$l$Pe(B  
== e$B$NDj5A$OITMW$Ke(B  
e$B;W$($k$N$G$9$,!“e(B==  
e$B$rL@\<(E\*$KDj5A$9$kM}M3$,$”$l$P65$($F$/$@$5$$!#8=\>ue(B  
e$B$G$Oe(B == e$B$NDj5A$rA4It\>C$7$F$b!"F0:n$OF1$8$@$H;W$$$^$9!#e(B

> e$B!!$b$&0l$D$Oe(B class NetAddr \< IPAddr e$B$N$h$&$J%5%V%/%i%9$r:n$j!"e(B  
> e$B$=$A$i$Ge(B == e$B$de(B \<=\> e$B$r%\*!\<%P!\<%i%$%I$9$kJ}K!!#e(B
> 
> e$B!!N\>J}$d$C$F$b$$$$$+$b$7$l$^$;$s$M!#$I$&$G$7$g$&$+!#e(B

e$B$3$A$i$O;~4V$r8+$D$1$F%Q%C%A$r=q$1$l$P$$$$$J$H;W$$$^$9!#e(B

---

<div class="post-metadata">

**Author:** ![Nobuhiro\_IMAI](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/9f8e36/32.png) [@Nobuhiro\_IMAI](https://www.ruby-forum.com/u/Nobuhiro_IMAI)\
**Post date:** [September 28, 2009, 3:26am UTC](https://www.ruby-forum.com/t/feature-1-9-how-about-ipaddr-to-take-care-of-mask-addr/173366/7 "2009-09-28T03:26:39Z")

</div>

At Sun, 27 Sep 2009 12:00:48 +0900,  
Akinori MUSHA wrote:

> e$B!!$3$l$O\<u$1F~$l$i$l$^$;$s!#e(BIPAddre$B$O%M%C%H%^%9%/$bJ];}$9$k$?$ae(B  
> e$B%M%C%H%o!\<%/$bI=8=$G$-$^$9$,!“Bh0l5A$Oe(BIPe$B%”%I%l%9$J$N$G!"%M%C%He(B  
> e$B%^%9%/$N0c$$$GEy$7$/$J$/$J$k$N$O$^$:$$$G$9!#e(B

e$B%M%C%H%^%9%/$G;W$$=P$7$?$N$G$9$,!"e(B

IPAddr.new(“192.168.0.1/24”) #=\> #\<IPAddr:  
IPv4:192.168.0.0/255.255.255.0\>  
IPAddr.new(“192.168.0.2/24”) #=\> #\<IPAddr:  
IPv4:192.168.0.0/255.255.255.0\>

e$B$N$h$&$K%M%C%H%^%9%/$,$"$k$He(Bnewe$B$N0z?t$NJ8;zNs$h$j$b\>pJs$,8:$C$F$7$^$C$Fe(B  
e$BJLES85$Ne(BIPe$B%"%I%l%9$r;}$C$F$\*$+$J$$$H$$$1$J$$$N$,ITJX$G$9!#e(B
