mirror of
https://github.com/house-of-vanity/v2-uri-parser.git
synced 2025-12-16 15:07:53 +00:00
24
Cargo.lock
generated
24
Cargo.lock
generated
@@ -59,6 +59,12 @@ dependencies = [
|
|||||||
"windows-sys",
|
"windows-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bytes"
|
||||||
|
version = "1.10.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "4.4.6"
|
version = "4.4.6"
|
||||||
@@ -105,12 +111,29 @@ version = "1.0.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
|
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fnv"
|
||||||
|
version = "1.0.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "heck"
|
name = "heck"
|
||||||
version = "0.4.1"
|
version = "0.4.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
|
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "http"
|
||||||
|
version = "1.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"fnv",
|
||||||
|
"itoa",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itoa"
|
name = "itoa"
|
||||||
version = "1.0.9"
|
version = "1.0.9"
|
||||||
@@ -253,6 +276,7 @@ name = "v2parser"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
|
"http",
|
||||||
"querystring",
|
"querystring",
|
||||||
"regex",
|
"regex",
|
||||||
"serde",
|
"serde",
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ edition = "2021"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = { version = "4.4.6", features = ["derive"] }
|
clap = { version = "4.4.6", features = ["derive"] }
|
||||||
|
http = "1.3.1"
|
||||||
querystring = "1.1.0"
|
querystring = "1.1.0"
|
||||||
regex = "1.9.6"
|
regex = "1.9.6"
|
||||||
serde = { version = "1.0.189", features = ["derive"] }
|
serde = { version = "1.0.189", features = ["derive"] }
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
use querystring;
|
use querystring;
|
||||||
mod models;
|
mod models;
|
||||||
use crate::config_models::*;
|
use crate::config_models::*;
|
||||||
|
use http::Uri;
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
|
|
||||||
pub fn create_outbound_object(data: models::VlessData) -> Outbound {
|
pub fn create_outbound_object(data: models::VlessData) -> Outbound {
|
||||||
@@ -125,22 +126,13 @@ fn parse_vless_address(raw_data: &str) -> models::VlessAddress {
|
|||||||
Some(data) => (String::from(data.0), data.1),
|
Some(data) => (String::from(data.0), data.1),
|
||||||
};
|
};
|
||||||
let address_wo_slash = raw_address.strip_suffix("/").unwrap_or(raw_address);
|
let address_wo_slash = raw_address.strip_suffix("/").unwrap_or(raw_address);
|
||||||
let (address, port): (String, u16) = match address_wo_slash.split_once(":") {
|
|
||||||
None => {
|
let parsed = address_wo_slash.parse::<Uri>().unwrap();
|
||||||
println!("Wrong vless format, no `:` found in the address");
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
Some(data) => (
|
|
||||||
String::from(data.0),
|
|
||||||
data.1
|
|
||||||
.parse::<u16>()
|
|
||||||
.expect("Wrong vless format, port is not a number"),
|
|
||||||
),
|
|
||||||
};
|
|
||||||
return models::VlessAddress {
|
return models::VlessAddress {
|
||||||
uuid,
|
uuid,
|
||||||
address,
|
address: parsed.host().unwrap().to_string(),
|
||||||
port,
|
port: parsed.port().unwrap().as_u16(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -268,6 +260,16 @@ mod tests {
|
|||||||
assert_eq!(parsed.uuid, "uu0id");
|
assert_eq!(parsed.uuid, "uu0id");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parse_vless_ipv6_host() {
|
||||||
|
let v = "vless://4d91916f-a7fd-419b-8b90-640bb8d1b9f4@[2a06:98c1:3120::1]:443?path=%2FPSZPkYG71g6bn84o%2FMTQxLjE0OC4yMDMuNg&security=tls&alpn=http%2F1.1&encryption=none&host=titantablomanahamrah.ir&fp=randomized&type=ws&sni=TITanTabLOmaNAHaMRaH.IR#";
|
||||||
|
let raw_host = "uu0id@[2a06:98c1:3120::1]:443";
|
||||||
|
let parsed = parse_vless_address(raw_host);
|
||||||
|
assert_eq!(parsed.port, 443);
|
||||||
|
assert_eq!(parsed.address, "[2a06:98c1:3120::1]");
|
||||||
|
assert_eq!(parsed.uuid, "uu0id");
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn create_outbound_for_tcp_reality() {
|
fn create_outbound_for_tcp_reality() {
|
||||||
let v = "vless://3d2c2r05-y739-51e3-bd86-3f3f4950c183@tr.deet23ngdell.com:1818?security=reality&encryption=none&pbk=7xhH8b_VkliBxgulljcyPOH-bYoA2dl-XAdZAsfhk04&headerType=none&fp=chrome&type=tcp&flow=xtls-rprx-vision&sni=bench.sh&sid=6bt85979e30d4fc2#%F0%9F%87%B9%F0%9F%87%B7+H";
|
let v = "vless://3d2c2r05-y739-51e3-bd86-3f3f4950c183@tr.deet23ngdell.com:1818?security=reality&encryption=none&pbk=7xhH8b_VkliBxgulljcyPOH-bYoA2dl-XAdZAsfhk04&headerType=none&fp=chrome&type=tcp&flow=xtls-rprx-vision&sni=bench.sh&sid=6bt85979e30d4fc2#%F0%9F%87%B9%F0%9F%87%B7+H";
|
||||||
|
|||||||
Reference in New Issue
Block a user