-
Notifications
You must be signed in to change notification settings - Fork 0
/
Program.cs
104 lines (87 loc) · 3.64 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
using System;
using System.IO;
using System.Net;
using System.Threading.Tasks;
namespace DuckDNS_Updtr
{
class Program
{
static async Task Main(string[] args)
{
#if (DEBUG)
Console.Write("Debug Mode - ");
args = new string[] { "duck-dns-token-goes-here", "subdomainname", "loop", "10" };
#endif
if (args is null || args.Length < 2)
{
Console.WriteLine("Arguments missing! Please inform required arguments for execution in order: \"token\" \"username\"");
Console.WriteLine("\nShould the application run indefinitely, after \"username\" inform the argument \"loop\" and");
Console.WriteLine("\nthe amount of time it should run, like every \"10\" minutes.");
Environment.Exit(0);
}
Console.WriteLine("DuckDNS IP Updater");
await UpdateDuckDNS(args[0], args[1]);
if(args[2] is not null)
{
while(true)
{
Console.WriteLine("\nWaiting for the next cycle in " + args[3] + " minutes...\n");
System.Threading.Thread.Sleep(int.Parse(args[3]) * 60 * 1000);
await UpdateDuckDNS(args[0], args[1]);
}
} else
{
Environment.Exit(0);
}
}
static async System.Threading.Tasks.Task UpdateDuckDNS(string token, string domain)
{
try
{
var httpClient = new System.Net.Http.HttpClient(new System.Net.Http.HttpClientHandler() { UseDefaultCredentials = true });
var ip = await GetIP();
if(ip is null)
{
throw new ArgumentException("Error: IP ca");
}
Uri url = new("https://www.duckdns.org/update?domains=" + domain + "&token=" + token + "&ip=" + ip);
Console.WriteLine("Sending request to DuckDNS...");
var response = await httpClient.GetAsync(url);
if (response.StatusCode.ToString().Contains("OK"))
{
Console.WriteLine("Success! Your IP was updated on DuckDNS!");
}
else
{
Console.WriteLine("Error - StatusCode: " + response.StatusCode.ToString()
+ "\nError updating your IP! Try checking your internet connection.");
}
}
catch (Exception e)
{
// Console.WriteLine(e);
Console.WriteLine("\nError updating your IP! Try checking your internet connection.");
}
}
static async System.Threading.Tasks.Task<string> GetIP()
{
Console.WriteLine("\nFetching your public IP address...");
try
{
Uri url = new("http://checkip.amazonaws.com");
var httpClient = new System.Net.Http.HttpClient(new System.Net.Http.HttpClientHandler() { UseDefaultCredentials = true });
var response = await httpClient.GetAsync(url);
var publicIP = await response.Content.ReadAsStringAsync();
Console.WriteLine("Your public IP is: " + publicIP);
return publicIP;
}
catch (Exception e)
{
// Console.WriteLine(e);
Console.WriteLine("Error. Couldn't fetch your public IP address." +
"\nTry checking your internet connection.");
return null;
}
}
}
}