class FreeBsdPorts
def parse_net_address(net_addr, protocol)
def parse_net_address(net_addr, protocol) case protocol when 'tcp4', 'udp4', 'tcp', 'udp' # replace * with 0.0.0.0 net_addr = net_addr.gsub(/^\*:/, '0.0.0.0:') if net_addr =~ /^*:(\d+)$/ ip_addr = URI('addr://'+net_addr) host = ip_addr.host port = ip_addr.port when 'tcp6', 'udp6' return [] if net_addr == '*:*' # abort for now # replace * with 0:0:0:0:0:0:0:0 net_addr = net_addr.gsub(/^\*:/, '0:0:0:0:0:0:0:0:') if net_addr =~ /^*:(\d+)$/ # extract port ip6 = /^(\S+):(\d+)$/.match(net_addr) ip6addr = ip6[1] ip_addr = URI("addr://[#{ip6addr}]:#{ip6[2]}") # replace [] host = ip_addr.host[1..ip_addr.host.size-2] port = ip_addr.port end [host, port] rescue URI::InvalidURIError => e warn "Could not parse #{net_addr}, #{e}" nil end