code: func (s *IGDService) GetExternalIPAddress() (net.IP, error) {
  	tpl := `<u:GetExternalIPAddress xmlns:u="%s" />`
  
  	body := fmt.Sprintf(tpl, s.URN)
  
  	response, err := soapRequest(s.URL, s.URN, "GetExternalIPAddress", body)
  
  	if err != nil {
  		return nil, err
  	}
  
  	envelope := &soapGetExternalIPAddressResponseEnvelope{}
  	err = xml.Unmarshal(response, envelope)
  	if err != nil {
  		return nil, err
  	}
  
  	result := net.ParseIP(envelope.Body.GetExternalIPAddressResponse.NewExternalIPAddress)
  
  	return result, nil
  }
docs: // GetExternalIPAddress queries the IGD service for its external IP address.
  // Returns nil if the external IP address is invalid or undefined, along with
  // any relevant errors