Commit c03cebc2 authored by nanamicat's avatar nanamicat

not work

parent 657a3912
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
version = 4
[[package]]
name = "async-channel"
......
use socket2::{Domain, Protocol, SockAddr, Socket, Type};
use std::error::Error;
use std::io::{BufRead, Write};
use std::mem::{transmute, MaybeUninit};
use std::io::{BufRead, Read, Write};
use std::mem::MaybeUninit;
use std::{env, thread};
use std::net::SocketAddrV4;
#[repr(C)]
pub struct Meta {
......@@ -34,9 +35,10 @@ impl Secret {
fn main() -> Result<(), Box<dyn Error>> {
let local_id: u8 = env::var("LOCAL_ID")?.parse()?;
let remote_id: u8 = env::var("LOCAL_ID")?.parse()?;
let remote_id: u8 = env::var("REMOTE_ID")?.parse()?;
let local_secret = Secret::new(&env::var("LOCAL_SECRET")?);
let remote_secret = Secret::new(&env::var("REMOTE_SECRET")?);
let mut remote_address: &SockAddr;
let mut config = tun::Configuration::default();
config
......@@ -50,13 +52,11 @@ fn main() -> Result<(), Box<dyn Error>> {
config.ensure_root_privileges(true);
});
let mut dev = tun::create(&config)?;
let (mut reader, mut writer) = dev.split();
let dev = tun::create(&config)?;
let (mut reader, writer) = dev.split();
// 创建用于接收的原始套接字,协议号为 144
let socket = Socket::new(Domain::IPV4, Type::RAW, Some(Protocol::from(144)))?;
let local_id = 0u8;
let remote_id = 0u8;
let inbound = thread::spawn(move || {
let mut recv_buf = [MaybeUninit::uninit(); 1500];
......@@ -64,6 +64,7 @@ fn main() -> Result<(), Box<dyn Error>> {
loop {
match socket.recv_from(&mut recv_buf) {
Ok((len, addr1)) => {
remote_address = &addr1;
println!("recv from {:?}", recv_buf);
// if let Some(packet) = Ipv4Packet::new(unsafe { transmute(&recv_buf[..len]) }) {
// let (meta1, payload) = packet.payload().split_at_mut(size_of::<Meta>());
......@@ -83,7 +84,22 @@ fn main() -> Result<(), Box<dyn Error>> {
}
});
let outbound = thread::spawn(move || {
let mut recv_buf = [0u8; 1500-20-4];
loop {
match reader.read(&mut recv_buf) {
Ok(len) => {
println!("recv from {:?}", recv_buf);
socket.send_to(&recv_buf, &remote_address);
}
Err(_) => {}
}
}
});
inbound.join();
outbound.join();
Ok(())
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment