-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathIPv4Address.cs
140 lines (129 loc) · 5.3 KB
/
IPv4Address.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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
using System;
using System.Net;
using System.Net.NetworkInformation;
using System.Threading.Tasks;
namespace threading
{
public class IPv4Address
{
/// <summary>
/// IPv4Address Konstruktor, erstellt das Objekt (benötigt eine IP-Adresse).
/// </summary>
/// <param name="IpAddress">IP-Adresse</param>
public IPv4Address(short block1, short block2, short block3, short block4)
{
this.IpAddress = block1 + "." + block2 + "." + block3 + "." + block4;
CurrentIP = block1 + "." + block2 + "." + block3 + "." + block4;
DomainName = "";
}
public IPv4Address()
{
this.IpAddress = "0.0.0.0";
CurrentIP = "0.0.0.0";
DomainName = "";
}
public string IpAddress { get; set; } // Hinterlegte IP-Adresse
public string DomainName { get; set; } // Beinhaltet den Domainnamen einer IP-Adresse (wird in CheckHttp bestimmt, Standart = "")
public bool Pingable { get; set; } // Zeigt ob eine IP-Adresse Pingable ist (gibt true oder false zurück).
public bool OwnDomain { get; set; } // Zeigt ob eine IP-Adresse eine Domain hostet (gibt ture oder alse zurück).
public static string CurrentIP { get; set; } // Beinhaltet die momentan zuletzt zugewiesene IP-Adresse.
/// <summary>
/// Prüft ob die im Objekt hinterlegte IP-Adresse durch ping erreichbar ist.
/// </summary>
/// <param name="pingObj">Benötigt ein Ping Objekt (kein Sender).</param>
/// <param name="timeOutValue">Benötigt eine Timeout Zeitangabe (ms).</param>
/// <param name="tries">Bestimmt, wie oft der Ping wiederholt wird.</param>
/// <returns>Gibt true zurück wenn der Ping erfolgreich war.</returns>
public async Task<bool> CheckPing(Ping pingObj, int timeOutValue, int tries)
{
for (int i = 1; i <= tries; i++)
{
PingReply prply = pingObj.Send(IpAddress, timeOutValue);
if (prply.Status == IPStatus.Success)
{
Pingable = true;
return true;
}
}
Pingable = false;
return false;
}
/// <summary>
/// Prüft ob die im Objekt hinterlegte IP-Adresse über ein WebRequest (GetResponse) erreichbar ist.
/// </summary>
/// <param name="timeOutValue">Benötigt eine Timeout Zeitangabe (ms).</param>
/// <param name="tries">Bestimmt, wie oft der Webzugriff wiederholt wird.</param>
/// <returns>Gibt true zurück, wenn der WebReqest erfolg hatte.</returns>
public async Task<bool> CheckHttp(int timeOutValue, int tries)
{
for (int i = 1; i <= tries; i++)
{
try
{
WebRequest webRequestObj = WebRequest.Create("http://" + IpAddress);
webRequestObj.Timeout = timeOutValue;
webRequestObj.GetResponse();
DomainName = Dns.GetHostEntry(IpAddress).HostName;
OwnDomain = true;
return true;
}
catch (Exception e) { }
}
OwnDomain = false;
return false;
}
/// <summary>
/// Gibt anhand von der CurrentIP Eigenschaft die nächste IPv4 Addresse aus.
/// Sowohl der return Wert als auch die CurrentIP Eigenschafte geben die neue IPv4 Addresse.
/// </summary>
/// <returns></returns>
public static string GetNextIP()
{
if(CurrentIP == String.Empty)
{
CurrentIP = "0.0.0.0";
return "0.0.0.0";
}
else
{
string[] strIP = CurrentIP.Split('.');
int[] iIP = new int[4];
for(int i = 0; i < strIP.Length; i++)
{
iIP[i] = Convert.ToInt32(strIP[i]);
}
if(iIP[3] >= 255 && iIP[2] < 255)
{
iIP[3] = 0;
iIP[2] += 1;
}
else if(iIP[2] >= 255 && iIP[3] >= 255 && iIP[1] < 255)
{
iIP[3] = 0;
iIP[2] = 0;
iIP[1] += 1;
}
else if(iIP[1] >= 255 && iIP[2] >= 255 && iIP[3] >= 255 && iIP[0] < 255)
{
iIP[3] = 0;
iIP[2] = 0;
iIP[1] = 0;
iIP[0] += 1;
}
else if(iIP[0] >= 255 && iIP[1] >= 255 && iIP[2] >= 255 && iIP[3] >= 255)
{
for(int i = 0; i < strIP.Length; i++)
{
iIP[i] = 0;
}
}
else
{
iIP[3] += 1;
}
CurrentIP = iIP[0] + "." + iIP[1] + "." + iIP[2] + "." + iIP[3];
return iIP[0] + "." + iIP[1] + "." + iIP[2] + "." + iIP[3];
}
}
}
}