Bug #8464

IPAddr cannot parse link-local IPv6 address.

Added by Andrew Selder 11 months ago. Updated 10 months ago.

Assignee:Akinori MUSHA
Target version:-
ruby -v:ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.3.0] Backport:1.9.3: UNKNOWN, 2.0.0: UNKNOWN


1.9.3p374 :001 > require 'ipaddr'
=> true
1.9.3p374 :002 > IPAddr.new("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 Updated by Cedric Brancourt 10 months 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 http://www.ietf.org/rfc/rfc4007.txt

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

#2 Updated by Akinori MUSHA 10 months 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 #scopeid).
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 Updated by Eric Hodel 10 months 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