5
5
using System . Net ;
6
6
using System . Net . Http ;
7
7
using System . Net . NetworkInformation ;
8
+ using System . Net . Sockets ;
8
9
using System . Net . WebSockets ;
9
10
using System . Reflection ;
10
11
using System . Resources ;
@@ -20,35 +21,169 @@ public IPService(FastCFIPScannerDatabase db)
20
21
}
21
22
22
23
23
- public async Task < List < IPModel > > GetIpValid ( string [ ] ips , int maxPing )
24
+ public async Task < List < IPModel > > GetIpValid ( string [ ] ips , int maxPing , string protcol )
24
25
{
25
- SocketsHttpHandler SocketsHandler = new SocketsHttpHandler ( ) ;
26
- HttpClient Client = new HttpClient ( SocketsHandler )
26
+ var validIps = new List < IPModel > ( ) ;
27
+ switch ( protcol )
27
28
{
28
- Timeout = TimeSpan . FromSeconds ( maxPing ) ,
29
- } ;
30
29
30
+ case "Http test" :
31
+ validIps = await GetValidٌIPWithHttpTest ( ips , maxPing ) ;
32
+ break ;
33
+
34
+ case "TCP test" :
35
+ validIps = await GetValidIPWithTCPTest ( ips , maxPing ) ;
36
+ break ;
37
+
38
+ case "UDP test" :
39
+ validIps = await GetValidIPWithUDPTest ( ips , maxPing ) ;
40
+ break ;
41
+
42
+ default :
43
+ validIps = await GetValidIPWithTCPTest ( ips , maxPing ) ;
44
+ break ;
45
+ }
46
+ return validIps ;
47
+ }
48
+
49
+ public async Task < List < IPModel > > GetValidٌIPWithHttpTest ( string [ ] ips , int maxPing )
50
+ {
31
51
32
52
var validIp = new List < IPModel > ( ) ;
33
53
for ( int i = 0 ; i < 20 ; i ++ )
34
54
{
35
55
var t = new Task ( async ( ) =>
36
56
{
37
57
var stopwatch = new Stopwatch ( ) ;
38
- var ipAddresse = GetRandomIp ( ips ) ;
39
- HttpResponseMessage result = new HttpResponseMessage ( ) ;
58
+ var ipAddresse = IPAddress . Parse ( GetRandomIp ( ips ) . Split ( "/" ) [ 0 ] ) ;
59
+
60
+ try
61
+ {
62
+ var SocketsHandler = new SocketsHttpHandler ( ) ;
63
+ var Client = new HttpClient ( SocketsHandler )
64
+ {
65
+ Timeout = TimeSpan . FromSeconds ( maxPing ) ,
66
+ } ;
67
+
68
+
69
+ stopwatch . Start ( ) ;
70
+
71
+
72
+ var result = await Client . GetAsync ( $ "http://{ ipAddresse } /__down") ;
73
+
74
+
75
+ stopwatch . Stop ( ) ;
76
+ var ping = Convert . ToInt32 ( stopwatch . Elapsed . TotalMilliseconds ) ;
77
+
78
+ lock ( validIp )
79
+ {
80
+ validIp . Add ( new IPModel
81
+ {
82
+ IP = ipAddresse . ToString ( ) ,
83
+ Ping = ping ,
84
+ } ) ;
85
+ }
86
+ }
87
+ catch
88
+ {
89
+ stopwatch . Reset ( ) ;
90
+ }
91
+ } ) ;
92
+ t . Start ( ) ;
93
+ }
94
+ for ( int i = 0 ; i < maxPing * 2 / 100 ; i ++ )
95
+ {
96
+ await Task . Delay ( 100 ) ;
97
+ if ( validIp . Count >= 10 )
98
+ {
99
+ return validIp ;
100
+ }
101
+ }
102
+ return validIp ;
103
+ }
104
+
105
+
106
+ public async Task < List < IPModel > > GetValidIPWithTCPTest ( string [ ] ips , int maxPing )
107
+ {
108
+
109
+ var validIp = new List < IPModel > ( ) ;
110
+ for ( int i = 0 ; i < 20 ; i ++ )
111
+ {
112
+ var t = new Task ( ( ) =>
113
+ {
114
+ var stopwatch = new Stopwatch ( ) ;
115
+ var ipAddresse = IPAddress . Parse ( GetRandomIp ( ips ) . Split ( "/" ) [ 0 ] ) ;
116
+ try
117
+ {
118
+ var client = new TcpClient ( ) ;
119
+
120
+ stopwatch . Start ( ) ;
121
+
122
+
123
+ client . Connect ( ipAddresse , 443 ) ;
124
+
125
+
126
+ stopwatch . Stop ( ) ;
127
+
128
+ var ping = Convert . ToInt32 ( stopwatch . Elapsed . TotalMilliseconds ) ;
129
+
130
+ lock ( validIp )
131
+ {
132
+ validIp . Add ( new IPModel
133
+ {
134
+ IP = ipAddresse . ToString ( ) ,
135
+ Ping = ping ,
136
+ } ) ;
137
+ }
138
+ }
139
+ catch
140
+ {
141
+ stopwatch . Reset ( ) ;
142
+ }
143
+ } ) ;
144
+ t . Start ( ) ;
145
+ }
146
+ for ( int i = 0 ; i < maxPing * 2 / 100 ; i ++ )
147
+ {
148
+ await Task . Delay ( 100 ) ;
149
+ if ( validIp . Count >= 10 )
150
+ {
151
+ return validIp ;
152
+ }
153
+ }
154
+ return validIp ;
155
+ }
156
+
157
+ public async Task < List < IPModel > > GetValidIPWithUDPTest ( string [ ] ips , int maxPing )
158
+ {
159
+
160
+ var validIp = new List < IPModel > ( ) ;
161
+ for ( int i = 0 ; i < 20 ; i ++ )
162
+ {
163
+ var t = new Task ( ( ) =>
164
+ {
165
+ var stopwatch = new Stopwatch ( ) ;
166
+ var ipAddresse = IPAddress . Parse ( GetRandomIp ( ips ) . Split ( "/" ) [ 0 ] ) ;
167
+
40
168
try
41
169
{
170
+ var client = new UdpClient ( ) ;
171
+
42
172
stopwatch . Start ( ) ;
43
- result = await Client . GetAsync ( $ "http://{ ipAddresse } /__down") ;
173
+
174
+
175
+ client . Connect ( ipAddresse , 443 ) ;
176
+
177
+
44
178
stopwatch . Stop ( ) ;
179
+
45
180
var ping = Convert . ToInt32 ( stopwatch . Elapsed . TotalMilliseconds ) ;
46
181
47
182
lock ( validIp )
48
183
{
49
184
validIp . Add ( new IPModel
50
185
{
51
- IP = ipAddresse ,
186
+ IP = ipAddresse . ToString ( ) ,
52
187
Ping = ping ,
53
188
} ) ;
54
189
}
@@ -60,7 +195,7 @@ public async Task<List<IPModel>> GetIpValid(string[]ips,int maxPing)
60
195
} ) ;
61
196
t . Start ( ) ;
62
197
}
63
- for ( int i = 0 ; i < maxPing / 100 ; i ++ )
198
+ for ( int i = 0 ; i < maxPing * 2 / 100 ; i ++ )
64
199
{
65
200
await Task . Delay ( 100 ) ;
66
201
if ( validIp . Count >= 10 )
@@ -71,6 +206,10 @@ public async Task<List<IPModel>> GetIpValid(string[]ips,int maxPing)
71
206
return validIp ;
72
207
}
73
208
209
+
210
+
211
+
212
+
74
213
public async Task < string [ ] > GetIps ( )
75
214
{
76
215
var IpAddresses = await _db . GetAllIPs ( ) ;
@@ -92,5 +231,11 @@ public async Task addValidIpToDb(List<IPModel> ips)
92
231
await _db . AddIP ( ip ) ;
93
232
}
94
233
}
234
+
235
+
236
+
237
+
238
+
239
+
95
240
}
96
241
}
0 commit comments