private static IPAddress GetExternalIPAddress(string serviceUrl) { string RequestText = "<?xml version=\"1.0\"?>" + "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">" + "<s:Body>" + "<u:GetExternalIPAddress xmlns:u=\"urn:schemas-upnp-org:service:WAN" + (_WANPPP ? "PPP" : "IP") + "Connection:1\"></u:GetExternalIPAddress>" + "</s:Body>" + "</s:Envelope>"; byte[] RequestBytes = Encoding.ASCII.GetBytes(RequestText); // Request the router tell us the external ip byte[] ResponseBytes = null; string ResponseText = null; using (RMWebClient WC = new RMWebClient()) { WC.ContentType = "text/xml; charset=\"utf-8\""; WC.Headers.Add("SOAPACTION", "\"urn:schemas-upnp-org:service:WAN" + (_WANPPP ? "PPP" : "IP") + "Connection:1#GetExternalIPAddress\""); WC.Timeout = 5000; ResponseBytes = WC.UploadData(serviceUrl, RequestBytes); ResponseText = Encoding.ASCII.GetString(ResponseBytes); } // Load xml into parser XmlDocument XmlDoc = new XmlDocument(); XmlDoc.LoadXml(ResponseText); // Add namespace XmlNamespaceManager NSManager = new XmlNamespaceManager(XmlDoc.NameTable); NSManager.AddNamespace("tns", "urn:schemas-upnp-org:device-1-0"); // Get IP string IP = XmlDoc.SelectSingleNode("//NewExternalIPAddress/text()", NSManager).Value; // Return if it's valid IPAddress Result = null; if (IPAddress.TryParse(IP, out Result) && !WebUtils.IsPrivateIP(Result)) { return(Result); } else { return(IPAddress.None); } }
private static IPAddress GetExternalIPAddress(string serviceUrl) { string RequestText = "<?xml version=\"1.0\"?>" + "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">" + "<s:Body>" + "<u:GetExternalIPAddress xmlns:u=\"urn:schemas-upnp-org:service:WAN" + (_WANPPP ? "PPP" : "IP") + "Connection:1\"></u:GetExternalIPAddress>" + "</s:Body>" + "</s:Envelope>"; byte[] RequestBytes = Encoding.ASCII.GetBytes(RequestText); // Request the router tell us the external ip byte[] ResponseBytes = null; string ResponseText = null; using (RMWebClient WC = new RMWebClient()) { WC.ContentType = "text/xml; charset=\"utf-8\""; WC.Headers.Add("SOAPACTION", "\"urn:schemas-upnp-org:service:WAN" + (_WANPPP ? "PPP" : "IP") + "Connection:1#GetExternalIPAddress\""); WC.Timeout = 5000; ResponseBytes = WC.UploadData(serviceUrl, RequestBytes); ResponseText = Encoding.ASCII.GetString(ResponseBytes); } // Load xml into parser XmlDocument XmlDoc = new XmlDocument(); XmlDoc.LoadXml(ResponseText); // Add namespace XmlNamespaceManager NSManager = new XmlNamespaceManager(XmlDoc.NameTable); NSManager.AddNamespace("tns", "urn:schemas-upnp-org:device-1-0"); // Get IP string IP = XmlDoc.SelectSingleNode("//NewExternalIPAddress/text()", NSManager).Value; // Return if it's valid IPAddress Result = null; if (IPAddress.TryParse(IP, out Result) && !WebUtils.IsPrivateIP(Result)) { return Result; } else { return IPAddress.None; } }