@@ -19,32 +19,32 @@ public IPService(FastCFIPScannerDatabase db)
19
19
20
20
#region Test Ips
21
21
22
- public async Task < List < IPModel > > GetIpValid ( string [ ] ips , int maxPing , string protcol )
22
+ public async Task < List < IPModel > > GetIpValid ( string [ ] ips , IpOptionModel ipOptions , string protcol )
23
23
{
24
24
var validIps = new List < IPModel > ( ) ;
25
25
switch ( protcol )
26
26
{
27
27
28
28
case "Http test" :
29
- validIps = await GetValidٌIPWithHttpTest ( ips , maxPing ) ;
29
+ validIps = await GetValidٌIPWithHttpTest ( ips , ipOptions ) ;
30
30
break ;
31
31
32
32
case "TCP test" :
33
- validIps = await GetValidIPWithTCPTest ( ips , maxPing ) ;
33
+ validIps = await GetValidIPWithTCPTest ( ips , ipOptions ) ;
34
34
break ;
35
35
36
- case "UDP test" :
37
- validIps = await GetValidIPWithUDPTest ( ips , maxPing ) ;
38
- break ;
36
+ // case "UDP test":
37
+ // validIps = await GetValidIPWithUDPTest(ips, ipOptions );
38
+ // break;
39
39
40
40
default :
41
- validIps = await GetValidIPWithTCPTest ( ips , maxPing ) ;
41
+ validIps = await GetValidٌIPWithHttpTest ( ips , ipOptions ) ;
42
42
break ;
43
43
}
44
44
return validIps ;
45
45
}
46
46
47
- public async Task < List < IPModel > > GetValidٌIPWithHttpTest ( string [ ] ips , int maxPing )
47
+ public async Task < List < IPModel > > GetValidٌIPWithHttpTest ( string [ ] ips , IpOptionModel ipOptions )
48
48
{
49
49
50
50
var validIp = new List < IPModel > ( ) ;
@@ -56,40 +56,41 @@ async Task HttpTest(string ipAddresse)
56
56
var SocketsHandler = new SocketsHttpHandler ( ) ;
57
57
var Client = new HttpClient ( SocketsHandler )
58
58
{
59
- Timeout = TimeSpan . FromSeconds ( maxPing ) ,
59
+ Timeout = TimeSpan . FromSeconds ( ipOptions . MaxPingOfIP ) ,
60
60
} ;
61
61
62
- var randomPorts = GetRandomPort ( ) ;
63
62
int totalPing = 0 ;
64
63
var ports = new List < string > ( ) ;
65
64
var ipIsConnected = false ;
66
-
67
- foreach ( var port in randomPorts )
65
+ for ( int i = 0 ; i < ipOptions . CountOfRepeatTestForEachIp ; i ++ )
68
66
{
69
-
70
- try
67
+ foreach ( var port in ipOptions . Ports )
71
68
{
72
- stopwatch . Start ( ) ;
73
- var result = await Client . GetAsync ( $ "http://{ ipAddresse } /__down:{ port } ") ;
74
- stopwatch . Stop ( ) ;
75
69
76
- if ( result != null )
70
+ try
77
71
{
78
- ipIsConnected = true ;
79
- ports . Add ( port ) ;
72
+ stopwatch . Start ( ) ;
73
+ var result = await Client . GetAsync ( $ "http://{ ipAddresse } /__down:{ port } ") ;
74
+ stopwatch . Stop ( ) ;
75
+
76
+ if ( result != null )
77
+ {
78
+ ipIsConnected = true ;
79
+ ports . Add ( port ) ;
80
+ }
81
+ }
82
+ catch
83
+ {
84
+ ipIsConnected = false ;
85
+ stopwatch . Stop ( ) ;
80
86
}
81
- }
82
- catch
83
- {
84
- ipIsConnected = false ;
85
- stopwatch . Stop ( ) ;
86
- }
87
87
88
88
89
- var currentPing = Convert . ToInt32 ( stopwatch . Elapsed . TotalMilliseconds ) ;
90
- totalPing += currentPing ;
89
+ var currentPing = Convert . ToInt32 ( stopwatch . Elapsed . TotalMilliseconds ) ;
90
+ totalPing += currentPing ;
91
+ }
91
92
}
92
- int ping = totalPing / 3 ;
93
+ int ping = totalPing / ( ipOptions . CountOfRepeatTestForEachIp + ipOptions . Ports . Count ) ;
93
94
if ( ipIsConnected )
94
95
{
95
96
lock ( validIp )
@@ -107,22 +108,22 @@ async Task HttpTest(string ipAddresse)
107
108
#region repeat test
108
109
while ( true )
109
110
{
110
- if ( validIp . Count >= 5 )
111
+ if ( validIp . Count >= ipOptions . MinimumCountOfValidIp )
111
112
{
112
113
return validIp ;
113
114
}
114
- var newRandomIps = GetRandomIp ( ips ) ;
115
+ var newRandomIps = GetRandomIp ( ips , ipOptions . CountOfIpForTest , ipOptions . CountOfIpRanges ) ;
115
116
116
117
List < Task > tasks = new List < Task > ( ) ;
117
118
118
119
foreach ( var ip in newRandomIps )
119
120
{
120
121
tasks . Add ( HttpTest ( ip ) ) ;
121
122
}
122
- for ( int i = 0 ; i < maxPing / 100 ; i ++ )
123
+ for ( int i = 0 ; i < ipOptions . MaxPingOfIP / 100 ; i ++ )
123
124
{
124
125
await Task . Delay ( 100 ) ;
125
- if ( validIp . Count >= 5 )
126
+ if ( validIp . Count >= ipOptions . MinimumCountOfValidIp )
126
127
{
127
128
return validIp ;
128
129
}
@@ -131,32 +132,36 @@ async Task HttpTest(string ipAddresse)
131
132
#endregion
132
133
}
133
134
134
- public async Task < List < IPModel > > GetValidIPWithTCPTest ( string [ ] ips , int maxPing )
135
+ public async Task < List < IPModel > > GetValidIPWithTCPTest ( string [ ] ips , IpOptionModel ipOptions )
135
136
{
136
137
137
138
var validIp = new List < IPModel > ( ) ;
138
139
139
140
async Task TestConnectionAsync ( string ip )
140
141
{
141
- var randomPort = GetRandomPort ( ) ;
142
+
142
143
var ports = new List < string > ( ) ;
143
144
var ipIsConnected = false ;
144
- foreach ( var port in randomPort )
145
+ for ( int i = 0 ; i < ipOptions . CountOfRepeatTestForEachIp ; i ++ )
145
146
{
146
- try
147
+
148
+ foreach ( var port in ipOptions . Ports )
147
149
{
148
- TcpClient tcpClient = new TcpClient ( ) ;
149
- tcpClient . ConnectAsync ( ip , int . Parse ( port ) ) ;
150
- await Task . Delay ( maxPing ) ;
151
- if ( tcpClient . Connected )
150
+ try
152
151
{
153
- ipIsConnected = true ;
154
- ports . Add ( port ) ;
152
+ TcpClient tcpClient = new TcpClient ( ) ;
153
+ tcpClient . ConnectAsync ( ip , int . Parse ( port ) ) ;
154
+ await Task . Delay ( ipOptions . MaxPingOfIP ) ;
155
+ if ( tcpClient . Connected )
156
+ {
157
+ ipIsConnected = true ;
158
+ ports . Add ( port ) ;
159
+ }
155
160
}
156
- }
157
- catch
158
- {
161
+ catch
162
+ {
159
163
164
+ }
160
165
}
161
166
}
162
167
@@ -175,19 +180,19 @@ async Task TestConnectionAsync(string ip)
175
180
}
176
181
while ( true )
177
182
{
178
- if ( validIp . Count >= 5 )
183
+ if ( validIp . Count >= ipOptions . MinimumCountOfValidIp )
179
184
{
180
185
break ;
181
186
}
182
- var newRandomIps = GetRandomIp ( ips ) ;
187
+ var newRandomIps = GetRandomIp ( ips , ipOptions . CountOfIpForTest , ipOptions . CountOfIpRanges ) ;
183
188
184
189
List < Task > tasks = new List < Task > ( ) ;
185
190
186
191
foreach ( var ip in newRandomIps )
187
192
{
188
193
tasks . Add ( TestConnectionAsync ( ip ) ) ;
189
194
}
190
- await Task . Delay ( maxPing + 100 ) ;
195
+ await Task . Delay ( ipOptions . MaxPingOfIP * ( ipOptions . CountOfRepeatTestForEachIp + ipOptions . Ports . Count ) ) ;
191
196
}
192
197
return validIp ;
193
198
}
@@ -265,7 +270,7 @@ public List<string> GetRandomIp(string[] ips, int ipCount = 20, int ipRangeCount
265
270
randomIpRange . Add ( strIp ) ;
266
271
}
267
272
var randomIps = new List < string > ( ) ;
268
- var countOfEachRange = ( ipCount / ipRangeCount ) + 1 ;
273
+ var countOfEachRange = ipCount / ipRangeCount ;
269
274
foreach ( var iprange in randomIpRange )
270
275
{
271
276
for ( int i = 1 ; i < countOfEachRange ; i ++ )
0 commit comments