changed the url and added the windows' code
This commit is contained in:
parent
edf5779af2
commit
7877737eb7
56
Cargo.lock
generated
56
Cargo.lock
generated
@ -196,6 +196,26 @@ version = "1.6.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9"
|
checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "c2rust-bitfields"
|
||||||
|
version = "0.18.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b43c3f07ab0ef604fa6f595aa46ec2f8a22172c975e186f6f5bf9829a3b72c41"
|
||||||
|
dependencies = [
|
||||||
|
"c2rust-bitfields-derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "c2rust-bitfields-derive"
|
||||||
|
version = "0.18.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d3cbc102e2597c9744c8bd8c15915d554300601c91a079430d309816b0912545"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 1.0.109",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cbc"
|
name = "cbc"
|
||||||
version = "0.1.2"
|
version = "0.1.2"
|
||||||
@ -796,6 +816,16 @@ version = "0.2.155"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
|
checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libloading"
|
||||||
|
version = "0.8.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e310b3a6b5907f99202fcdb4960ff45b93735d7c7d96b760fcff8db2dc0e103d"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"windows-targets 0.52.6",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libm"
|
name = "libm"
|
||||||
version = "0.2.8"
|
version = "0.2.8"
|
||||||
@ -1386,12 +1416,13 @@ dependencies = [
|
|||||||
"tokio",
|
"tokio",
|
||||||
"tokio-util",
|
"tokio-util",
|
||||||
"tracing",
|
"tracing",
|
||||||
|
"wintun",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sdlan-sn-rs"
|
name = "sdlan-sn-rs"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+ssh://git@git.asxalex.pw/sdlan-v2/sdlan-rs.git#f320526f2dc1f6c3154b9ade81c556af0d068378"
|
source = "git+http://git.asxalex.pw/sdlan-v2/sdlan-rs.git#f320526f2dc1f6c3154b9ade81c556af0d068378"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aes",
|
"aes",
|
||||||
"byteorder",
|
"byteorder",
|
||||||
@ -2245,6 +2276,16 @@ version = "0.4.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows"
|
||||||
|
version = "0.52.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
|
||||||
|
dependencies = [
|
||||||
|
"windows-core",
|
||||||
|
"windows-targets 0.52.6",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows-core"
|
name = "windows-core"
|
||||||
version = "0.52.0"
|
version = "0.52.0"
|
||||||
@ -2402,6 +2443,19 @@ dependencies = [
|
|||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wintun"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1b3c8c8876c686f8a2d6376999ac1c9a24c74d2968551c9394f7e89127783685"
|
||||||
|
dependencies = [
|
||||||
|
"c2rust-bitfields",
|
||||||
|
"libloading",
|
||||||
|
"log",
|
||||||
|
"thiserror",
|
||||||
|
"windows",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zerocopy"
|
name = "zerocopy"
|
||||||
version = "0.7.35"
|
version = "0.7.35"
|
||||||
|
|||||||
@ -13,8 +13,12 @@ once_cell = "1.19.0"
|
|||||||
prost = "0.12.6"
|
prost = "0.12.6"
|
||||||
prost-build = "0.12.6"
|
prost-build = "0.12.6"
|
||||||
rsa = "0.9.6"
|
rsa = "0.9.6"
|
||||||
sdlan-sn-rs = { git = "ssh://git@git.asxalex.pw/sdlan-v2/sdlan-rs.git" }
|
# sdlan-sn-rs = { git = "ssh://git@git.asxalex.pw/sdlan-v2/sdlan-rs.git" }
|
||||||
|
sdlan-sn-rs = { git = "http://git.asxalex.pw/sdlan-v2/sdlan-rs.git" }
|
||||||
structopt = "0.3.26"
|
structopt = "0.3.26"
|
||||||
tokio = { version = "1.38.0", futures = ["full"] }
|
tokio = { version = "1.38.0", futures = ["full"] }
|
||||||
tokio-util = "0.7.11"
|
tokio-util = "0.7.11"
|
||||||
tracing = "0.1.40"
|
tracing = "0.1.40"
|
||||||
|
|
||||||
|
[target.'cfg(windows)'.dependencies]
|
||||||
|
wintun = "0.4.0"
|
||||||
|
|||||||
28
src/bin/sdlan/main.rs
Normal file
28
src/bin/sdlan/main.rs
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
use sdlan_rs::get_edge;
|
||||||
|
use sdlan_sn_rs::log;
|
||||||
|
use std::time::Duration;
|
||||||
|
use tokio::sync::mpsc::Sender;
|
||||||
|
use sdlan_rs::run_sdlan;
|
||||||
|
use sdlan_rs::CommandLine;
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
let _guard = log::init_log();
|
||||||
|
tokio::spawn(run_sdlan(CommandLine {
|
||||||
|
sn: "39.98.184.67:1265".to_owned(),
|
||||||
|
tcp: "39.98.184.67:18083".to_owned(),
|
||||||
|
_allow_routing: true,
|
||||||
|
register_ttl: 1,
|
||||||
|
mtu: 1290,
|
||||||
|
name: "tau".to_owned(),
|
||||||
|
tos: 0,
|
||||||
|
token: "".to_owned(),
|
||||||
|
}));
|
||||||
|
|
||||||
|
tokio::time::sleep(Duration::from_secs(3)).await;
|
||||||
|
let edge = get_edge();
|
||||||
|
edge.start("0".to_owned()).await;
|
||||||
|
|
||||||
|
tokio::time::sleep(Duration::from_secs(20)).await;
|
||||||
|
edge.stop().await;
|
||||||
|
}
|
||||||
@ -13,9 +13,7 @@ mod tun;
|
|||||||
|
|
||||||
mod device;
|
mod device;
|
||||||
|
|
||||||
/*
|
|
||||||
pub trait ReadWriter {
|
pub trait ReadWriter {
|
||||||
fn send(&self, content: &[u8]) -> std::io::Result<usize>;
|
fn send(&self, content: &[u8]) -> std::io::Result<usize>;
|
||||||
fn recv(&self, buf: &mut [u8]) -> std::io::Result<usize>;
|
fn recv(&self, buf: &mut [u8]) -> std::io::Result<usize>;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|||||||
@ -4,13 +4,15 @@ use std::io::{Error, ErrorKind};
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use wintun;
|
use wintun;
|
||||||
|
|
||||||
pub struct WinTun {
|
use super::device::{Mode, DeviceConfig};
|
||||||
|
|
||||||
|
pub struct Iface {
|
||||||
adapter: Arc<wintun::Adapter>,
|
adapter: Arc<wintun::Adapter>,
|
||||||
session: Arc<wintun::Session>,
|
session: Arc<wintun::Session>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ReadWriter for WinTun {
|
impl Iface {
|
||||||
fn recv(&self, buf: &mut [u8]) -> std::io::Result<usize> {
|
pub fn recv(&self, buf: &mut [u8]) -> std::io::Result<usize> {
|
||||||
let Ok(pkt) = self.session.receive_blocking() else {
|
let Ok(pkt) = self.session.receive_blocking() else {
|
||||||
return Err(Error::new(ErrorKind::Other, "failed to receive"));
|
return Err(Error::new(ErrorKind::Other, "failed to receive"));
|
||||||
};
|
};
|
||||||
@ -25,7 +27,7 @@ impl ReadWriter for WinTun {
|
|||||||
Ok(length)
|
Ok(length)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send(&self, content: &[u8]) -> std::io::Result<usize> {
|
pub fn send(&self, content: &[u8]) -> std::io::Result<usize> {
|
||||||
let mut pkt = self
|
let mut pkt = self
|
||||||
.session
|
.session
|
||||||
.allocate_send_packet(content.len() as u16)
|
.allocate_send_packet(content.len() as u16)
|
||||||
@ -35,20 +37,24 @@ impl ReadWriter for WinTun {
|
|||||||
self.session.send_packet(pkt);
|
self.session.send_packet(pkt);
|
||||||
Ok(content.len())
|
Ok(content.len())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn reload_config(&self, device_config: &DeviceConfig) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_wintun(path: &str) -> WinTun {
|
fn create_wintun(path: &str) -> Iface {
|
||||||
let wt = unsafe { wintun::load_from_path(path) }.expect("failed to load wintun");
|
let wt = unsafe { wintun::load_from_path(path) }.expect("failed to load wintun");
|
||||||
|
|
||||||
let adapter = match wintun::Adapter::open(&wt, "Demo") {
|
let adapter = match wintun::Adapter::open(&wt, "Demo") {
|
||||||
Ok(a) => a,
|
Ok(a) => a,
|
||||||
Err(_) => wintun::Adapter::create(&wt, "Demo", "Example", None)
|
Err(e) => wintun::Adapter::create(&wt, "Demo", "Example", None)
|
||||||
.expect("failed to create wintun adapter"),
|
.expect("failed to create wintun adapter"),
|
||||||
};
|
};
|
||||||
let session = Arc::new(adapter.start_session(wintun::MAX_RING_CAPACITY).unwrap());
|
let session = Arc::new(adapter.start_session(wintun::MAX_RING_CAPACITY).unwrap());
|
||||||
WinTun { adapter, session }
|
Iface { adapter, session }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn create_tun() -> Result<Box<dyn ReadWriter>> {
|
pub fn new_iface(name: &str, mode: Mode) -> Iface {
|
||||||
Ok(Box::new(create_wintun("/path/to/file")))
|
create_wintun("./wintun.dll")
|
||||||
|
// Ok(Box::new(create_wintun("/path/to/file")))
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user