Method: Rex::Socket.compress_address

Defined in:
lib/rex/socket.rb

.compress_address(addr) ⇒ String

Implement zero compression for IPv6 addresses. Uses the compression method from Marco Ceresa’s IPAddress GEM

Parameters:

  • addr (String)

    Human readable IPv6 address

Returns:

  • (String)

    Human readable IPv6 address with runs of 0s removed

See Also:



371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
# File 'lib/rex/socket.rb', line 371

def self.compress_address(addr)
  return addr unless is_ipv6?(addr)
  addr = addr.dup
  while true
    break if addr.sub!(/\A0:0:0:0:0:0:0:0\Z/, '::')
    break if addr.sub!(/\b0:0:0:0:0:0:0\b/, ':')
    break if addr.sub!(/\b0:0:0:0:0:0\b/, ':')
    break if addr.sub!(/\b0:0:0:0:0\b/, ':')
    break if addr.sub!(/\b0:0:0:0\b/, ':')
    break if addr.sub!(/\b0:0:0\b/, ':')
    break if addr.sub!(/\b0:0\b/, ':')
    break
  end
  addr.sub(/:{3,}/, '::')
end