Bug #8464

IPAddr cannot parse link-local IPv6 address.

Added by aselder (Andrew Selder) over 5 years ago. Updated about 1 year ago.

Target version:
ruby -v:
ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.3.0]


1.9.3p374 :001 > require 'ipaddr'
=> true
1.9.3p374 :002 >"0:0:0:0:0:0:0:1%0")
ArgumentError: invalid address
from /Users/andrew/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/ipaddr.rb:559:in in6_addr'
from /Users/andrew/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/ipaddr.rb:496:in
from (irb):2:in new'
from (irb):2
from /Users/andrew/.rvm/rubies/ruby-2.0.0-p195/bin/irb:16:in

Same behavior in Ruby 1.9.3 all patch levels


#1 [ruby-core:55674] Updated by cedric.brancourt (Cedric Brancourt) over 5 years ago

Not sure this need a fix.
The %0 part of the example is the scope ( zone ) and should not be part of the address.

It is appended by operating system in the textual representation of the endpoint ( for interface identification ), and format depend on the operating system.

But it is not part of the address , see

This is the way I understand it. If I am right , this is not a bug.

#2 [ruby-core:55766] Updated by knu (Akinori MUSHA) over 5 years ago

  • Category set to lib
  • Status changed from Open to Feedback
  • Assignee set to knu (Akinori MUSHA)

IPAddr currently does not support scope ID's.

Making IPAddr deal with scope ID's would mean a lot more than just ignoring it (starting with adding #scope_id).
If you are going to request such a feature, you'll have to investigate, for example, in what contexts (libraries/methods/commands) an IPv6 address with a scope ID is valid and accepted, if #to_s should include it or another method should be added for that, how it would affect the backward compatibility, etc.

On the other hand, you can use str.sub(/%.*/m, '') or str[/[^%]*/m] if you just want to drop the scope ID part.

#3 [ruby-core:55770] Updated by drbrain (Eric Hodel) over 5 years ago

Thanks to the recently added Socket.getifaddrs we now have the ability to map scope names to interface ids for use in IPv6 multicast, for example.

#4 [ruby-core:83492] Updated by knu (Akinori MUSHA) about 1 year ago

  • Backport deleted (1.9.3: UNKNOWN, 2.0.0: UNKNOWN)
  • Status changed from Feedback to Rejected

Closing due to feedback timeout.

Also available in: Atom PDF