@@ -68,5 +68,350 @@ public void ExtractRequestWithProxyHeadersMultipleIps()
6868
6969 Assert . AreEqual ( "141.246.115.116" , clientIp ) ;
7070 }
71+
72+ [ TestMethod ]
73+ public void ExtractIpUsingXForwardedForHeaderIpv6 ( )
74+ {
75+ var options = SecureNativeConfigurationBuilder . DefaultConfigBuilder ( ) . Build ( ) ;
76+
77+ var headers = new WebHeaderCollection
78+ {
79+ { "x-forwarded-for" , "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" }
80+ } ;
81+
82+ var uri = new Uri ( "http://www.securenative.com/login" ) ;
83+ var request = WebRequest . Create ( uri ) ;
84+ request . Headers = headers ;
85+
86+ var clientIp = RequestUtils . GetClientIpFromRequest ( ( HttpWebRequest ) request , options ) ;
87+
88+ Assert . AreEqual ( "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" , clientIp ) ;
89+ }
90+
91+ [ TestMethod ]
92+ public void ExtractIpUsingXForwardedForHeaderMultipleIp ( )
93+ {
94+ var options = SecureNativeConfigurationBuilder . DefaultConfigBuilder ( ) . Build ( ) ;
95+
96+ var headers = new WebHeaderCollection
97+ {
98+ { "x-forwarded-for" , "141.246.115.116, 203.0.113.1, 12.34.56.3" }
99+ } ;
100+
101+ var uri = new Uri ( "http://www.securenative.com/login" ) ;
102+ var request = WebRequest . Create ( uri ) ;
103+ request . Headers = headers ;
104+
105+ var clientIp = RequestUtils . GetClientIpFromRequest ( ( HttpWebRequest ) request , options ) ;
106+
107+ Assert . AreEqual ( "141.246.115.116" , clientIp ) ;
108+ }
109+
110+ [ TestMethod ]
111+ public void ExtractIpUsingXClientIpHeaderIpv6 ( )
112+ {
113+ var options = SecureNativeConfigurationBuilder . DefaultConfigBuilder ( ) . Build ( ) ;
114+
115+ var headers = new WebHeaderCollection
116+ {
117+ { "x-client-ip" , "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" }
118+ } ;
119+
120+ var uri = new Uri ( "http://www.securenative.com/login" ) ;
121+ var request = WebRequest . Create ( uri ) ;
122+ request . Headers = headers ;
123+
124+ var clientIp = RequestUtils . GetClientIpFromRequest ( ( HttpWebRequest ) request , options ) ;
125+
126+ Assert . AreEqual ( "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" , clientIp ) ;
127+ }
128+
129+ [ TestMethod ]
130+ public void ExtractIpUsingXClientIpHeaderMultipleIp ( )
131+ {
132+ var options = SecureNativeConfigurationBuilder . DefaultConfigBuilder ( ) . Build ( ) ;
133+
134+ var headers = new WebHeaderCollection
135+ {
136+ { "x-client-ip" , "141.246.115.116, 203.0.113.1, 12.34.56.3" }
137+ } ;
138+
139+ var uri = new Uri ( "http://www.securenative.com/login" ) ;
140+ var request = WebRequest . Create ( uri ) ;
141+ request . Headers = headers ;
142+
143+ var clientIp = RequestUtils . GetClientIpFromRequest ( ( HttpWebRequest ) request , options ) ;
144+
145+ Assert . AreEqual ( "141.246.115.116" , clientIp ) ;
146+ }
147+
148+ [ TestMethod ]
149+ public void ExtractIpUsingXRealIpHeaderIpv6 ( )
150+ {
151+ var options = SecureNativeConfigurationBuilder . DefaultConfigBuilder ( ) . Build ( ) ;
152+
153+ var headers = new WebHeaderCollection
154+ {
155+ { "x-real-ip" , "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" }
156+ } ;
157+
158+ var uri = new Uri ( "http://www.securenative.com/login" ) ;
159+ var request = WebRequest . Create ( uri ) ;
160+ request . Headers = headers ;
161+
162+ var clientIp = RequestUtils . GetClientIpFromRequest ( ( HttpWebRequest ) request , options ) ;
163+
164+ Assert . AreEqual ( "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" , clientIp ) ;
165+ }
166+
167+ [ TestMethod ]
168+ public void ExtractIpUsingXRealIpHeaderMultipleIp ( )
169+ {
170+ var options = SecureNativeConfigurationBuilder . DefaultConfigBuilder ( ) . Build ( ) ;
171+
172+ var headers = new WebHeaderCollection
173+ {
174+ { "x-real-ip" , "141.246.115.116, 203.0.113.1, 12.34.56.3" }
175+ } ;
176+
177+ var uri = new Uri ( "http://www.securenative.com/login" ) ;
178+ var request = WebRequest . Create ( uri ) ;
179+ request . Headers = headers ;
180+
181+ var clientIp = RequestUtils . GetClientIpFromRequest ( ( HttpWebRequest ) request , options ) ;
182+
183+ Assert . AreEqual ( "141.246.115.116" , clientIp ) ;
184+ }
185+
186+ [ TestMethod ]
187+ public void ExtractIpUsingXForwardedHeaderIpv6 ( )
188+ {
189+ var options = SecureNativeConfigurationBuilder . DefaultConfigBuilder ( ) . Build ( ) ;
190+
191+ var headers = new WebHeaderCollection
192+ {
193+ { "x-forwarded" , "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" }
194+ } ;
195+
196+ var uri = new Uri ( "http://www.securenative.com/login" ) ;
197+ var request = WebRequest . Create ( uri ) ;
198+ request . Headers = headers ;
199+
200+ var clientIp = RequestUtils . GetClientIpFromRequest ( ( HttpWebRequest ) request , options ) ;
201+
202+ Assert . AreEqual ( "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" , clientIp ) ;
203+ }
204+
205+ [ TestMethod ]
206+ public void ExtractIpUsingXForwardedHeaderMultipleIp ( )
207+ {
208+ var options = SecureNativeConfigurationBuilder . DefaultConfigBuilder ( ) . Build ( ) ;
209+
210+ var headers = new WebHeaderCollection
211+ {
212+ { "x-forwarded" , "141.246.115.116, 203.0.113.1, 12.34.56.3" }
213+ } ;
214+
215+ var uri = new Uri ( "http://www.securenative.com/login" ) ;
216+ var request = WebRequest . Create ( uri ) ;
217+ request . Headers = headers ;
218+
219+ var clientIp = RequestUtils . GetClientIpFromRequest ( ( HttpWebRequest ) request , options ) ;
220+
221+ Assert . AreEqual ( "141.246.115.116" , clientIp ) ;
222+ }
223+
224+ [ TestMethod ]
225+ public void ExtractIpUsingXClusterClientIpHeaderIpv6 ( )
226+ {
227+ var options = SecureNativeConfigurationBuilder . DefaultConfigBuilder ( ) . Build ( ) ;
228+
229+ var headers = new WebHeaderCollection
230+ {
231+ { "x-cluster-client-ip" , "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" }
232+ } ;
233+
234+ var uri = new Uri ( "http://www.securenative.com/login" ) ;
235+ var request = WebRequest . Create ( uri ) ;
236+ request . Headers = headers ;
237+
238+ var clientIp = RequestUtils . GetClientIpFromRequest ( ( HttpWebRequest ) request , options ) ;
239+
240+ Assert . AreEqual ( "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" , clientIp ) ;
241+ }
242+
243+ [ TestMethod ]
244+ public void ExtractIpUsingXClusterClientIpHeaderMultipleIp ( )
245+ {
246+ var options = SecureNativeConfigurationBuilder . DefaultConfigBuilder ( ) . Build ( ) ;
247+
248+ var headers = new WebHeaderCollection
249+ {
250+ { "x-cluster-client-ip" , "141.246.115.116, 203.0.113.1, 12.34.56.3" }
251+ } ;
252+
253+ var uri = new Uri ( "http://www.securenative.com/login" ) ;
254+ var request = WebRequest . Create ( uri ) ;
255+ request . Headers = headers ;
256+
257+ var clientIp = RequestUtils . GetClientIpFromRequest ( ( HttpWebRequest ) request , options ) ;
258+
259+ Assert . AreEqual ( "141.246.115.116" , clientIp ) ;
260+ }
261+
262+ [ TestMethod ]
263+ public void ExtractIpUsingForwardedForHeaderIpv6 ( )
264+ {
265+ var options = SecureNativeConfigurationBuilder . DefaultConfigBuilder ( ) . Build ( ) ;
266+
267+ var headers = new WebHeaderCollection
268+ {
269+ { "forwarded-for" , "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" }
270+ } ;
271+
272+ var uri = new Uri ( "http://www.securenative.com/login" ) ;
273+ var request = WebRequest . Create ( uri ) ;
274+ request . Headers = headers ;
275+
276+ var clientIp = RequestUtils . GetClientIpFromRequest ( ( HttpWebRequest ) request , options ) ;
277+
278+ Assert . AreEqual ( "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" , clientIp ) ;
279+ }
280+
281+ [ TestMethod ]
282+ public void ExtractIpUsingForwardedForHeaderMultipleIp ( )
283+ {
284+ var options = SecureNativeConfigurationBuilder . DefaultConfigBuilder ( ) . Build ( ) ;
285+
286+ var headers = new WebHeaderCollection
287+ {
288+ { "forwarded-for" , "141.246.115.116, 203.0.113.1, 12.34.56.3" }
289+ } ;
290+
291+ var uri = new Uri ( "http://www.securenative.com/login" ) ;
292+ var request = WebRequest . Create ( uri ) ;
293+ request . Headers = headers ;
294+
295+ var clientIp = RequestUtils . GetClientIpFromRequest ( ( HttpWebRequest ) request , options ) ;
296+
297+ Assert . AreEqual ( "141.246.115.116" , clientIp ) ;
298+ }
299+
300+ [ TestMethod ]
301+ public void ExtractIpUsingForwardedHeaderIpv6 ( )
302+ {
303+ var options = SecureNativeConfigurationBuilder . DefaultConfigBuilder ( ) . Build ( ) ;
304+
305+ var headers = new WebHeaderCollection
306+ {
307+ { "forwarded" , "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" }
308+ } ;
309+
310+ var uri = new Uri ( "http://www.securenative.com/login" ) ;
311+ var request = WebRequest . Create ( uri ) ;
312+ request . Headers = headers ;
313+
314+ var clientIp = RequestUtils . GetClientIpFromRequest ( ( HttpWebRequest ) request , options ) ;
315+
316+ Assert . AreEqual ( "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" , clientIp ) ;
317+ }
318+
319+ [ TestMethod ]
320+ public void ExtractIpUsingForwardedHeaderMultipleIp ( )
321+ {
322+ var options = SecureNativeConfigurationBuilder . DefaultConfigBuilder ( ) . Build ( ) ;
323+
324+ var headers = new WebHeaderCollection
325+ {
326+ { "forwarded" , "141.246.115.116, 203.0.113.1, 12.34.56.3" }
327+ } ;
328+
329+ var uri = new Uri ( "http://www.securenative.com/login" ) ;
330+ var request = WebRequest . Create ( uri ) ;
331+ request . Headers = headers ;
332+
333+ var clientIp = RequestUtils . GetClientIpFromRequest ( ( HttpWebRequest ) request , options ) ;
334+
335+ Assert . AreEqual ( "141.246.115.116" , clientIp ) ;
336+ }
337+
338+ [ TestMethod ]
339+ public void ExtractIpUsingViaHeaderIpv6 ( )
340+ {
341+ var options = SecureNativeConfigurationBuilder . DefaultConfigBuilder ( ) . Build ( ) ;
342+
343+ var headers = new WebHeaderCollection
344+ {
345+ { "via" , "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" }
346+ } ;
347+
348+ var uri = new Uri ( "http://www.securenative.com/login" ) ;
349+ var request = WebRequest . Create ( uri ) ;
350+ request . Headers = headers ;
351+
352+ var clientIp = RequestUtils . GetClientIpFromRequest ( ( HttpWebRequest ) request , options ) ;
353+
354+ Assert . AreEqual ( "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" , clientIp ) ;
355+ }
356+
357+ [ TestMethod ]
358+ public void ExtractIpUsingViaHeaderMultipleIp ( )
359+ {
360+ var options = SecureNativeConfigurationBuilder . DefaultConfigBuilder ( ) . Build ( ) ;
361+
362+ var headers = new WebHeaderCollection
363+ {
364+ { "via" , "141.246.115.116, 203.0.113.1, 12.34.56.3" }
365+ } ;
366+
367+ var uri = new Uri ( "http://www.securenative.com/login" ) ;
368+ var request = WebRequest . Create ( uri ) ;
369+ request . Headers = headers ;
370+
371+ var clientIp = RequestUtils . GetClientIpFromRequest ( ( HttpWebRequest ) request , options ) ;
372+
373+ Assert . AreEqual ( "141.246.115.116" , clientIp ) ;
374+ }
375+
376+ [ TestMethod ]
377+ public void ExtractIpUsingPriorityWithXForwardedFor ( )
378+ {
379+ var options = SecureNativeConfigurationBuilder . DefaultConfigBuilder ( ) . Build ( ) ;
380+
381+ var headers = new WebHeaderCollection
382+ {
383+ { "x-forwarded-for" , "203.0.113.1" } ,
384+ { "x-real-ip" , "98.51.100.101" } ,
385+ { "x-client-ip" , "198.51.100.102" }
386+ } ;
387+
388+ var uri = new Uri ( "http://www.securenative.com/login" ) ;
389+ var request = WebRequest . Create ( uri ) ;
390+ request . Headers = headers ;
391+
392+ var clientIp = RequestUtils . GetClientIpFromRequest ( ( HttpWebRequest ) request , options ) ;
393+
394+ Assert . AreEqual ( "203.0.113.1" , clientIp ) ;
395+ }
396+
397+ [ TestMethod ]
398+ public void ExtractIpUsingPriorityWithoutXForwardedFor ( )
399+ {
400+ var options = SecureNativeConfigurationBuilder . DefaultConfigBuilder ( ) . Build ( ) ;
401+
402+ var headers = new WebHeaderCollection
403+ {
404+ { "x-real-ip" , "98.51.100.101" } ,
405+ { "x-client-ip" , "203.0.113.1, 141.246.115.116, 12.34.56.3" }
406+ } ;
407+
408+ var uri = new Uri ( "http://www.securenative.com/login" ) ;
409+ var request = WebRequest . Create ( uri ) ;
410+ request . Headers = headers ;
411+
412+ var clientIp = RequestUtils . GetClientIpFromRequest ( ( HttpWebRequest ) request , options ) ;
413+
414+ Assert . AreEqual ( "203.0.113.1" , clientIp ) ;
415+ }
71416 }
72417}
0 commit comments