2023-11-08 23:38:57 +08:00
|
|
|
use std::error::Error;
|
|
|
|
use std::fs::File;
|
2024-02-22 21:55:45 +08:00
|
|
|
use std::io::{BufRead, BufReader, Write};
|
|
|
|
|
2023-11-08 23:38:57 +08:00
|
|
|
use reqwest;
|
|
|
|
|
2023-11-09 00:06:53 +08:00
|
|
|
#[tokio::main]
|
|
|
|
async fn main() {
|
|
|
|
create().await.unwrap();
|
2023-11-08 23:38:57 +08:00
|
|
|
println!("1. Disable mangle rule: {}", ":foreach i in=[/ip firewall mangle find comment=\"breakwall\"] do={ /ip firewall mangle disable $i }");
|
|
|
|
println!("2. Remove old CIDR list: {}", ":foreach i in=[ find list=$address_list ] do={ remove number=$i }");
|
|
|
|
println!("3. Load new CIDR list: {}", "/import chn_list.rsc")
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn create() -> Result<(), Box<dyn Error>> {
|
|
|
|
let url = "https://ispip.clang.cn/all_cn.txt";
|
|
|
|
let dest = "chn_list.rsc";
|
|
|
|
let mut dest = File::create(dest).unwrap();
|
|
|
|
// address list name
|
|
|
|
let list = "chn_list";
|
|
|
|
let clean_command = format!(":foreach i in=[/ip/firewall/address-list/find list=\"{}\"] do={{remove numbers=$i}}\n", list);
|
|
|
|
dest.write(clean_command.as_bytes()).unwrap();
|
|
|
|
// request china cidr from network
|
|
|
|
let text = reqwest::get(url).await?
|
|
|
|
.text().await?;
|
|
|
|
let lines = text.lines();
|
|
|
|
let lines = lines.collect::<Vec<&str>>();
|
|
|
|
write_to_file(&mut dest, list, &lines);
|
2024-02-22 21:55:45 +08:00
|
|
|
// additional network
|
|
|
|
let additional = File::open("additional.txt").unwrap();
|
|
|
|
let lines = BufReader::new(additional).lines();
|
|
|
|
for x in lines {
|
|
|
|
let cidr = x.unwrap();
|
|
|
|
let cidr = cidr.trim();
|
|
|
|
if !cidr.is_empty() && !cidr.starts_with("#") {
|
|
|
|
let vec1 = vec![cidr];
|
|
|
|
write_to_file(&mut dest, list, &vec1);
|
|
|
|
};
|
|
|
|
}
|
2023-11-08 23:38:57 +08:00
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn write_to_file(file: &mut File, list: &str, address_list: &Vec<&str>) {
|
|
|
|
for x in address_list {
|
|
|
|
let line = format!("/ip/firewall/address-list add list={} address={}\n", list, x);
|
|
|
|
file.write(line.as_bytes()).unwrap();
|
|
|
|
}
|
|
|
|
}
|