public override void Update(HostConfig HC, IPAddress ipAddress) { if (HC == null) throw new ArgumentNullException("HC"); if (ipAddress == null) throw new ArgumentNullException("ipAddress"); using (RMWebClient WC = new RMWebClient()) { WC.ContentType = "application/xml"; WC.Headers[HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(HC.Username + ":" + HC.Password.GetPlainText())); WC.Headers["Accept"] = "application/xml"; WC.UseDefaultCredentials = false; try { string Url = "https://pointhq.com"; Url += "/zones/" + HC.ProviderSpecificSettings[HostConfig.POINT_ZONE_ID]; Url += "/records/" + HC.ProviderSpecificSettings[HostConfig.POINT_RECORD_ID]; string ResponseText = WC.UploadString(Url, "PUT", "<zone-record><data>" + ipAddress.ToString() + "</data><ttl type=\"integer\">60</ttl></zone-record>").Trim(); if (!ResponseText.Contains(ipAddress.ToString())) { HC.Disabled = true; HC.DisabledReason = "Reason not known."; HC.Save(); Logging.instance.LogError("Unable to update host \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): " + HC.DisabledReason); } } catch (WebException wex) { HC.Disabled = true; switch (((HttpWebResponse)wex.Response).StatusCode) { case HttpStatusCode.Forbidden: HC.DisabledReason = "Current user does not have access to requested resource."; break; case HttpStatusCode.NotFound: HC.DisabledReason = "Record not found."; break; default: HC.DisabledReason = "An unknown response code was received: \"" + ((HttpWebResponse)wex.Response).StatusCode + "\""; break; } HC.Save(); Logging.instance.LogError("Unable to update host \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): " + HC.DisabledReason); } catch (Exception ex) { HC.Disabled = true; HC.DisabledReason = "Unhandled exception (" + ex.Message + ")"; HC.Save(); Logging.instance.LogException("Unable to update host \"" + HC.Hostname + "\"", ex); } } }
void cmdRetrieve_Click(object sender, EventArgs e) { if (!Dialog.ValidateIsEmailAddress(txtEmailAddress)) return; if (!Dialog.ValidateIsNotEmpty(txtAPIKey)) return; lvZoneRecords.Items.Clear(); using (RMWebClient WC = new RMWebClient()) { WC.ContentType = "application/xml"; WC.Headers[HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(txtEmailAddress.Text.Trim() + ":" + txtAPIKey.Text.Trim())); WC.Headers["Accept"] = "application/xml"; WC.UseDefaultCredentials = false; // Get all zones try { string ZonesXml = WC.DownloadString("https://pointhq.com/zones"); XmlSerializer XS = new XmlSerializer(typeof(Point.zones)); Point.zones Zones = null; using (TextReader TR = new StringReader(ZonesXml)) { Zones = (Point.zones)XS.Deserialize(TR); } // Now get all records for each zone foreach (Point.zonesZone Zone in Zones.zone) { string ZoneRecordsXml = WC.DownloadString("https://pointhq.com/zones/" + Zone.id.ToString() + "/records"); XS = new XmlSerializer(typeof(Point.zonerecords)); Point.zonerecords ZoneRecords = null; using (TextReader TR = new StringReader(ZoneRecordsXml)) { ZoneRecords = (Point.zonerecords)XS.Deserialize(TR); } foreach (Point.zonerecordsZonerecord ZoneRecord in ZoneRecords.zonerecord) { if (ZoneRecord.recordtype.ToUpper() == "A") { ListViewItem LVI = new ListViewItem(ZoneRecord.name.TrimEnd('.')); LVI.SubItems.Add(ZoneRecord.zoneid.ToString()); LVI.SubItems.Add(ZoneRecord.id.ToString()); lvZoneRecords.Items.Add(LVI); } } } } catch (Exception ex) { Logging.instance.LogException("Error retrieving Point zone records", ex); Dialog.Error("Error retrieving hostnames:\r\n\r\n" + ex.Message, "Error"); } } }
private static string GetServiceUrl(string descriptionUrl) { // Download description file from router string ResponseText = ""; using (RMWebClient WC = new RMWebClient()) { WC.Timeout = 5000; ResponseText = WC.DownloadString(descriptionUrl); } // 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"); // Find deviceType node and ensure it's an internet gateway device XmlNode DeviceTypeNode = XmlDoc.SelectSingleNode("//tns:device/tns:deviceType/text()", NSManager); if (!DeviceTypeNode.Value.ToLower().Contains("internetgatewaydevice")) { return(null); } // Find controlURL node XmlNode ControlUrlNode = XmlDoc.SelectSingleNode("//tns:service[tns:serviceType=\"urn:schemas-upnp-org:service:WANIPConnection:1\"]/tns:controlURL/text()", NSManager); if (ControlUrlNode == null) { _WANPPP = true; ControlUrlNode = XmlDoc.SelectSingleNode("//tns:service[tns:serviceType=\"urn:schemas-upnp-org:service:WANPPPConnection:1\"]/tns:controlURL/text()", NSManager); if (ControlUrlNode == null) { return(null); } } // Return the path to the service url string BaseUrl = descriptionUrl.Substring(7); // Trim http:// BaseUrl = BaseUrl.Substring(0, BaseUrl.IndexOf("/")); // Trim everything after first / if (ControlUrlNode.Value.StartsWith("/")) { return("http://" + BaseUrl + ControlUrlNode.Value); } else { return("http://" + BaseUrl + "/" + ControlUrlNode.Value); } }
static public string HttpGet(string url) { try { using (RMWebClient WC = new RMWebClient()) { return(WC.DownloadString(url)); } } catch (Exception) { return(string.Empty); } }
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); } }
public static IPAddress GetExternalIPv4ByHttp(int port) { using (RMWebClient WC = new RMWebClient()) { WC.Timeout = 5000; string IP = WC.DownloadString("http://www.randm.ca:" + port.ToString() + "/whats-my-ip.php"); // Return if it's valid IPAddress Result = IPAddress.None; if (IPAddress.TryParse(IP, out Result) && !WebUtils.IsPrivateIP(Result)) { return(Result); } } return(IPAddress.None); }
public override void Update(HostConfig HC, IPAddress ipAddress) { if (HC == null) throw new ArgumentNullException("HC"); if (ipAddress == null) throw new ArgumentNullException("ipAddress"); using (RMWebClient WC = new RMWebClient()) { WC.Headers[HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(HC.Username + ":" + HC.Password.GetPlainText())); WC.UseDefaultCredentials = false; WC.UserAgent = ProcessUtils.CompanyName + " " + ProcessUtils.ProductName + "/" + ProcessUtils.ProductVersion + " [email protected]"; string Url = "https://dynupdate.no-ip.com/nic/update"; Url += "?hostname=" + Uri.EscapeDataString(HC.Hostname); Url += "&myip=" + ipAddress.ToString(); string ResponseText = WC.DownloadString(Url).Trim().ToLower(); if (ResponseText.Contains(ipAddress.ToString())) { if (ResponseText.Contains("nochg")) { Logging.instance.LogWarning("Host \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + ") successfully updated, but returned NOCHG response. Too many of these could cause your account to be banned by the provider."); } } else { HC.Disabled = true; switch (ResponseText) { case "nohost": HC.DisabledReason = "Hostname supplied does not exist under specified account"; break; case "badauth": HC.DisabledReason = "Invalid username password combination"; break; case "badagent": HC.DisabledReason = "Client disabled."; break; case "!donator": HC.DisabledReason = "An update request was sent including a feature that is not available to that particular user such as offline options."; break; case "abuse": HC.DisabledReason = "Username is blocked due to abuse. Either for not following our update specifications or disabled due to violation of the No-IP terms of service."; break; case "911": Logging.instance.LogWarning("Unable to update host \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): A fatal error on the provider's side such as a database outage. Will retry in 1 hour."); return; default: HC.DisabledReason = "An unknown response code was received: \"" + ResponseText + "\""; break; } HC.Save(); Logging.instance.LogError("Unable to update host \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): " + HC.DisabledReason); } } }
public override IPAddress[] GetRemoteIPs(HostConfig HC) { if (HC == null) throw new ArgumentNullException("HC"); using (RMWebClient WC = new RMWebClient()) { try { NameValueCollection Params = new NameValueCollection(); Params.Add("a", "rec_load_all"); Params.Add("email", HC.Username); Params.Add("tkn", HC.Password.GetPlainText()); Params.Add("z", HC.ProviderSpecificSettings[HostConfig.CLOUDFLARE_ZONE_NAME]); Hashtable rec_load_all_response = (Hashtable)JSON.JsonDecode(Encoding.UTF8.GetString(WC.UploadValues("https://www.cloudflare.com/api_json.html", "POST", Params))); if (rec_load_all_response["result"].ToString() == "success") { Hashtable Response = (Hashtable)rec_load_all_response["response"]; Hashtable Recs = (Hashtable)Response["recs"]; ArrayList Objs = (ArrayList)Recs["objs"]; foreach (Hashtable Obj in Objs) { if (Obj["name"].ToString().ToLower() == HC.Hostname.ToLower()) { return new IPAddress[] { IPAddress.Parse(Obj["content"].ToString()) }; } } } else { Logging.instance.LogError("Unable to get remote IPs \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): " + (rec_load_all_response["msg"] == null ? "Unknown reason" : rec_load_all_response["msg"].ToString())); } } catch (Exception ex) { Logging.instance.LogException("Unable to get remote IPs \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + ")", ex); } } return null; }
static public string HttpPost(string url, NameValueCollection nameValues) { bool OldExpect100Continue = ServicePointManager.Expect100Continue; ServicePointManager.Expect100Continue = false; try { using (RMWebClient WC = new RMWebClient()) { return(RMEncoding.Ansi.GetString(WC.UploadValues(url, nameValues))); } } catch (Exception) { // TODO Consider not catching this return(string.Empty); } finally { ServicePointManager.Expect100Continue = OldExpect100Continue; } }
public override void Update(HostConfig HC, IPAddress ipAddress) { if (HC == null) throw new ArgumentNullException("HC"); if (ipAddress == null) throw new ArgumentNullException("ipAddress"); using (RMWebClient WC = new RMWebClient()) { string Url = "https://www.dtdns.com/api/autodns.cfm"; Url += "?id=" + Uri.EscapeDataString(HC.Hostname); Url += "&pw=" + Uri.EscapeDataString(HC.Password.GetPlainText()); Url += "&ip=" + ipAddress.ToString(); Url += "&client=PDDNS"; string ResponseText = WC.DownloadString(Url).Trim(); if (!ResponseText.Contains(ipAddress.ToString())) { HC.Disabled = true; HC.DisabledReason = ResponseText; HC.Save(); Logging.instance.LogError("Unable to update host \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): " + HC.DisabledReason); } } }
void cmdRetrieve_Click(object sender, EventArgs e) { if (!Dialog.ValidateIsEmailAddress(txtEmailAddress)) return; if (!Dialog.ValidateIsNotEmpty(txtAPIKey)) return; lvZoneRecords.Items.Clear(); using (RMWebClient WC = new RMWebClient()) { // Get all zones try { NameValueCollection Params = new NameValueCollection(); Params.Add("a", "zone_load_multi"); Params.Add("email", txtEmailAddress.Text.Trim()); Params.Add("tkn", txtAPIKey.Text.Trim()); Hashtable zone_load_multi_response = (Hashtable)JSON.JsonDecode(Encoding.UTF8.GetString(WC.UploadValues("https://www.cloudflare.com/api_json.html", "POST", Params))); if ((zone_load_multi_response["result"] != null) && (zone_load_multi_response["result"].ToString() == "success")) { Hashtable Response = (Hashtable)zone_load_multi_response["response"]; Hashtable Zones = (Hashtable)Response["zones"]; ArrayList Objs = (ArrayList)Zones["objs"]; // Now get all records for each zone foreach (Hashtable Zone in Objs) { Params = new NameValueCollection(); Params.Add("a", "rec_load_all"); Params.Add("email", txtEmailAddress.Text.Trim()); Params.Add("tkn", txtAPIKey.Text.Trim()); Params.Add("z", Zone["zone_name"].ToString()); Hashtable rec_load_all_response = (Hashtable)JSON.JsonDecode(Encoding.UTF8.GetString(WC.UploadValues("https://www.cloudflare.com/api_json.html", "POST", Params))); Response = (Hashtable)rec_load_all_response["response"]; Hashtable Recs = (Hashtable)Response["recs"]; Objs = (ArrayList)Recs["objs"]; foreach (Hashtable ZoneRecord in Objs) { if (ZoneRecord["type"].ToString() == "A") { ListViewItem LVI = new ListViewItem(ZoneRecord["name"].ToString()); LVI.SubItems.Add(ZoneRecord["zone_name"].ToString()); LVI.SubItems.Add(ZoneRecord["rec_id"].ToString()); lvZoneRecords.Items.Add(LVI); } } } } else { if (zone_load_multi_response["msg"] == null) { throw new Exception("Unknown error"); } else { throw new Exception(zone_load_multi_response["msg"].ToString()); } } } catch (Exception ex) { Logging.instance.LogException("Error retrieving CloudFlare zone records", ex); Dialog.Error("Error retrieving hostnames:\r\n\r\n" + ex.Message, "Error"); } } }
public static IPAddress GetExternalIPv4ByHttp(int port) { using (RMWebClient WC = new RMWebClient()) { WC.Timeout = 5000; string IP = WC.DownloadString("http://www.randm.ca:" + port.ToString() + "/whats-my-ip.php"); // Return if it's valid IPAddress Result = IPAddress.None; if (IPAddress.TryParse(IP, out Result) && !WebUtils.IsPrivateIP(Result)) return Result; } return IPAddress.None; }
public static string HttpPost(string url, NameValueCollection nameValues) { bool OldExpect100Continue = ServicePointManager.Expect100Continue; ServicePointManager.Expect100Continue = false; try { using (RMWebClient WC = new RMWebClient()) { return RMEncoding.Ansi.GetString(WC.UploadValues(url, nameValues)); } } catch (Exception) { // TODO Consider not catching this return string.Empty; } finally { ServicePointManager.Expect100Continue = OldExpect100Continue; } }
public static string HttpGet(string url) { try { using (RMWebClient WC = new RMWebClient()) { return WC.DownloadString(url); } } catch (Exception) { return string.Empty; } }
private static string GetServiceUrl(string descriptionUrl) { // Download description file from router string ResponseText = ""; using (RMWebClient WC = new RMWebClient()) { WC.Timeout = 5000; ResponseText = WC.DownloadString(descriptionUrl); } // 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"); // Find deviceType node and ensure it's an internet gateway device XmlNode DeviceTypeNode = XmlDoc.SelectSingleNode("//tns:device/tns:deviceType/text()", NSManager); if (!DeviceTypeNode.Value.ToLower().Contains("internetgatewaydevice")) return null; // Find controlURL node XmlNode ControlUrlNode = XmlDoc.SelectSingleNode("//tns:service[tns:serviceType=\"urn:schemas-upnp-org:service:WANIPConnection:1\"]/tns:controlURL/text()", NSManager); if (ControlUrlNode == null) { _WANPPP = true; ControlUrlNode = XmlDoc.SelectSingleNode("//tns:service[tns:serviceType=\"urn:schemas-upnp-org:service:WANPPPConnection:1\"]/tns:controlURL/text()", NSManager); if (ControlUrlNode == null) return null; } // Return the path to the service url string BaseUrl = descriptionUrl.Substring(7); // Trim http:// BaseUrl = BaseUrl.Substring(0, BaseUrl.IndexOf("/")); // Trim everything after first / if (ControlUrlNode.Value.StartsWith("/")) { return "http://" + BaseUrl + ControlUrlNode.Value; } else { return "http://" + BaseUrl + "/" + ControlUrlNode.Value; } }
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; } }
void WC_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) { if (e.Cancelled) { pbDownload.Value = 0; Dialog.Information("Download Aborted", "Download Aborted"); // Clean up the aborted download FileUtils.FileDelete(lblTo.Text); DialogResult = DialogResult.Cancel; Close(); } else { DialogResult = DialogResult.OK; Close(); } lock (_Lock) { _WebClient = null; } }
private void frmRMFileDownload_Load(object sender, EventArgs e) { lock (_Lock) { _WebClient = new RMWebClient(); _WebClient.DownloadFileCompleted += new AsyncCompletedEventHandler(WC_DownloadFileCompleted); _WebClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(WC_DownloadProgressChanged); _WebClient.DownloadFileAsync(new Uri(lblFrom.Text), lblTo.Text); } }
public override void Update(HostConfig HC, IPAddress ipAddress) { if (HC == null) throw new ArgumentNullException("HC"); if (ipAddress == null) throw new ArgumentNullException("ipAddress"); using (RMWebClient WC = new RMWebClient()) { try { NameValueCollection Params = new NameValueCollection(); Params.Add("a", "rec_edit"); Params.Add("content", ipAddress.ToString()); Params.Add("email", HC.Username); Params.Add("id", HC.ProviderSpecificSettings[HostConfig.CLOUDFLARE_REC_ID]); int HostnamePeriodCount = HC.Hostname.Count(x => x == '.'); // TODO Do this for other providers too switch (HostnamePeriodCount) { case 0: throw new Exception("Hostname has 0 periods?"); case 1: Params.Add("name", HC.Hostname); break; // One period == full domain name (ie github.com) default: Params.Add("name", string.Join(".", HC.Hostname.Split('.'), 0, HostnamePeriodCount - 1)); break; // More than one period == all but last element (ie www.github.com or a.b.c.d.github.com) } Params.Add("tkn", HC.Password.GetPlainText()); Params.Add("ttl", "1"); Params.Add("type", "A"); Params.Add("z", HC.ProviderSpecificSettings[HostConfig.CLOUDFLARE_ZONE_NAME]); Hashtable rec_edit_response = (Hashtable)JSON.JsonDecode(Encoding.UTF8.GetString(WC.UploadValues("https://www.cloudflare.com/api_json.html", "POST", Params))); if (rec_edit_response["result"].ToString() == "success") { Hashtable Response = (Hashtable)rec_edit_response["response"]; Hashtable Rec = (Hashtable)Response["rec"]; Hashtable Obj = (Hashtable)Rec["obj"]; if (!Obj["content"].ToString().Contains(ipAddress.ToString())) { HC.Disabled = true; HC.DisabledReason = rec_edit_response["msg"].ToString(); HC.Save(); Logging.instance.LogError("Unable to update host \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): " + HC.DisabledReason); } } else { HC.Disabled = true; HC.DisabledReason = (rec_edit_response["msg"] == null) ? "Unknown reason" : rec_edit_response["msg"].ToString(); HC.Save(); Logging.instance.LogError("Unable to update host \"" + HC.Hostname + "\" (" + HC.Provider.ToString() + "): " + HC.DisabledReason); } } catch (Exception ex) { HC.Disabled = true; HC.DisabledReason = "Unhandled exception (" + ex.Message + ")"; HC.Save(); Logging.instance.LogException("Unable to update host \"" + HC.Hostname + "\"", ex); } } }