code: func (n *upnpNAT) GetExternalAddress() (addr net.IP, err error) {
  	message := "<u:GetExternalIPAddress xmlns:u=\"urn:schemas-upnp-org:service:WANIPConnection:1\"/>\r\n"
  	response, err := soapRequest(n.serviceURL, "GetExternalIPAddress", message)
  	if err != nil {
  		return nil, err
  	}
  
  	var reply getExternalIPAddressResponse
  	err = xml.Unmarshal(response, &reply)
  	if err != nil {
  		return nil, err
  	}
  
  	addr = net.ParseIP(reply.ExternalIPAddress)
  	if addr == nil {
  		return nil, errors.New("unable to parse ip address")
  	}
  	return addr, nil
  }
docs: // GetExternalAddress implements the NAT interface by fetching the external IP
  // from the UPnP router.