Bug #8464

IPAddr cannot parse link-local IPv6 address.

Added by Andrew Selder almost 2 years ago. Updated over 1 year ago.

[ruby-core:55209]
Status:Feedback
Priority:Normal
Assignee:Akinori MUSHA
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

Description

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
initialize'
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

History

#1 Updated by Cedric Brancourt over 1 year 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 over 1 year 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 Updated by Eric Hodel over 1 year 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