1
1
extern crate reqwest;
2
2
3
- use std:: io:: { Read , Write } ;
3
+ use std:: io:: Read ;
4
4
5
5
use ipnetwork:: Ipv4Network ;
6
- use reqwest:: header;
7
6
8
7
pub async fn get_all_ipv4 ( ) -> Result < Vec < String > , Box < dyn std:: error:: Error > > {
9
- let cidr_strings_result = get_cidr_from_cf ( ) . await ;
10
8
let mut cidr_strings: String = String :: new ( ) ;
11
- match cidr_strings_result {
12
- Ok ( v) => {
13
- cidr_strings = v;
14
- let file = std:: fs:: File :: create ( "cloudflare_ipv4.txt" ) . unwrap ( ) ;
15
- let mut writer: std:: io:: BufWriter < std:: fs:: File > = std:: io:: BufWriter :: new ( file) ;
16
- writer. write_all ( cidr_strings. as_bytes ( ) ) . unwrap ( ) ;
17
- }
18
- Err ( err) => {
19
- println ! ( "Error: {}" , err. to_string( ) ) ;
20
- let file = std:: fs:: File :: open ( "cloudflare_ipv4.txt" ) . unwrap ( ) ;
21
- let mut reader: std:: io:: BufReader < std:: fs:: File > = std:: io:: BufReader :: new ( file) ;
22
- reader. read_to_string ( & mut cidr_strings) . unwrap ( ) ;
23
-
24
- }
25
- }
9
+ let file = std:: fs:: File :: open ( "cloudflare_ipv4.txt" ) . unwrap ( ) ;
10
+ let mut reader: std:: io:: BufReader < std:: fs:: File > = std:: io:: BufReader :: new ( file) ;
11
+ reader. read_to_string ( & mut cidr_strings) . unwrap ( ) ;
26
12
let cidr_list = cidr_strings. split ( "\n " ) ;
27
13
let mut ipv4_addresses = Vec :: < String > :: new ( ) ;
28
14
for cidr in cidr_list {
@@ -33,51 +19,3 @@ pub async fn get_all_ipv4() -> Result<Vec<String>, Box<dyn std::error::Error>> {
33
19
}
34
20
return Ok ( ipv4_addresses) ;
35
21
}
36
-
37
- pub async fn get_cidr_from_cf ( ) -> Result < String , Box < dyn std:: error:: Error > > {
38
- let mut headers = header:: HeaderMap :: new ( ) ;
39
- headers. insert ( "authority" , "www.cloudflare.com" . parse ( ) . unwrap ( ) ) ;
40
- headers. insert ( "accept" , "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" . parse ( ) . unwrap ( ) ) ;
41
- headers. insert ( "accept-language" , "zh-CN,zh;q=0.9" . parse ( ) . unwrap ( ) ) ;
42
- headers. insert ( "cache-control" , "no-cache" . parse ( ) . unwrap ( ) ) ;
43
- headers. insert ( "pragma" , "no-cache" . parse ( ) . unwrap ( ) ) ;
44
- headers. insert (
45
- "referer" ,
46
- "https://www.cloudflare.com/zh-cn/ips/" . parse ( ) . unwrap ( ) ,
47
- ) ;
48
- headers. insert (
49
- "sec-ch-ua" ,
50
- "\" Not A(Brand\" ;v=\" 99\" , \" Google Chrome\" ;v=\" 121\" , \" Chromium\" ;v=\" 121\" "
51
- . parse ( )
52
- . unwrap ( ) ,
53
- ) ;
54
- headers. insert ( "sec-ch-ua-arch" , "\" arm\" " . parse ( ) . unwrap ( ) ) ;
55
- headers. insert ( "sec-ch-ua-bitness" , "\" 64\" " . parse ( ) . unwrap ( ) ) ;
56
- headers. insert (
57
- "sec-ch-ua-full-version" ,
58
- "\" 121.0.6167.139\" " . parse ( ) . unwrap ( ) ,
59
- ) ;
60
- headers. insert ( "sec-ch-ua-full-version-list" , "\" Not A(Brand\" ;v=\" 99.0.0.0\" , \" Google Chrome\" ;v=\" 121.0.6167.139\" , \" Chromium\" ;v=\" 121.0.6167.139\" " . parse ( ) . unwrap ( ) ) ;
61
- headers. insert ( "sec-ch-ua-mobile" , "?0" . parse ( ) . unwrap ( ) ) ;
62
- headers. insert ( "sec-ch-ua-model" , "\" \" " . parse ( ) . unwrap ( ) ) ;
63
- headers. insert ( "sec-ch-ua-platform" , "\" macOS\" " . parse ( ) . unwrap ( ) ) ;
64
- headers. insert ( "sec-ch-ua-platform-version" , "\" 14.3.0\" " . parse ( ) . unwrap ( ) ) ;
65
- headers. insert ( "sec-fetch-dest" , "document" . parse ( ) . unwrap ( ) ) ;
66
- headers. insert ( "sec-fetch-mode" , "navigate" . parse ( ) . unwrap ( ) ) ;
67
- headers. insert ( "sec-fetch-site" , "same-origin" . parse ( ) . unwrap ( ) ) ;
68
- headers. insert ( "sec-fetch-user" , "?1" . parse ( ) . unwrap ( ) ) ;
69
- headers. insert ( "upgrade-insecure-requests" , "1" . parse ( ) . unwrap ( ) ) ;
70
- headers. insert ( "user-agent" , "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36" . parse ( ) . unwrap ( ) ) ;
71
-
72
- let client = reqwest:: Client :: builder ( )
73
- . redirect ( reqwest:: redirect:: Policy :: none ( ) )
74
- . build ( )
75
- . unwrap ( ) ;
76
- let res = client
77
- . get ( "https://www.cloudflare.com/ips-v4/" )
78
- . headers ( headers)
79
- . send ( )
80
- . await ?;
81
-
82
- Ok ( res. text ( ) . await . unwrap ( ) )
83
- }
0 commit comments