Bug #8464

IPAddr cannot parse link-local IPv6 address.

Added by Andrew Selder over 2 years ago. Updated over 2 years ago.

ruby -v:
ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.3.0]
1.9.3: UNKNOWN, 2.0.0: UNKNOWN


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 over 2 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 Akinori MUSHA over 2 years ago

  • Category set to lib
  • Status changed from Open to Feedback
  • Assignee set to 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 Eric Hodel over 2 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.

Also available in: Atom PDF