将作者功能添加到隧道程序

发布于 2025-01-23 14:30:40 字数 1919 浏览 4 评论 0 原文

如何为下面的隧道程序创建作者功能?下面的代码是创建Windows隧道接口的示例程序。我想编写一个将数据包写入另一个服务器IP地址的函数。 GitHub链接完整代码及其依赖项下面给出。

use log::*;
use std::sync::{
atomic::{AtomicBool, Ordering},
Arc,
};

static RUNNING: AtomicBool = AtomicBool::new(true);
fn main() {
env_logger::init();
let wintun = unsafe { wintun::load_from_path("examples/wintun/bin/amd64/wintun.dll") }
    .expect("Failed to load wintun dll");
let version = wintun::get_running_driver_version(&wintun);
info!("Using wintun version: {:?}", version);

let adapter = match wintun::Adapter::open(&wintun, "Demo") {
    Ok(a) => a,
    Err(_) => wintun::Adapter::create(&wintun, "Example", "Demo", None)
        .expect("Failed to create wintun adapter!"),
};

let version = wintun::get_running_driver_version(&wintun).unwrap();
info!("Using wintun version: {:?}", version);

let session = Arc::new(adapter.start_session(wintun::MAX_RING_CAPACITY).unwrap());

let reader_session = session.clone();
let reader = std::thread::spawn(move || {
    while RUNNING.load(Ordering::Relaxed) {
        match reader_session.receive_blocking() {
            Ok(packet) => {
                let bytes = packet.bytes();
                println!(
                    "Read packet size {} bytes. Header data: {:?}",
                    bytes.len(),
                    &bytes[0..(20.min(bytes.len()))]
                );
            }
            Err(_) => println!("Got error while reading packet"),
        }
    }
});
println!("Press enter to stop session");

let mut line = String::new();
let _ = std::io::stdin().read_line(&mut line);
println!("Shutting down session");

RUNNING.store(false, Ordering::Relaxed);
session.shutdown();
let _ = reader.join();

println!("Shutdown complete");

}

How do I create a writer function for the tunnel program below? The code below is a sample program to create windows tunnel interface. I want to write a function that writes (or sends) packets to another server IP address. Github link for full code and its dependencies given below.

https://github.com/nulldotblack/wintun/blob/main/examples/basic.rs

use log::*;
use std::sync::{
atomic::{AtomicBool, Ordering},
Arc,
};

static RUNNING: AtomicBool = AtomicBool::new(true);
fn main() {
env_logger::init();
let wintun = unsafe { wintun::load_from_path("examples/wintun/bin/amd64/wintun.dll") }
    .expect("Failed to load wintun dll");
let version = wintun::get_running_driver_version(&wintun);
info!("Using wintun version: {:?}", version);

let adapter = match wintun::Adapter::open(&wintun, "Demo") {
    Ok(a) => a,
    Err(_) => wintun::Adapter::create(&wintun, "Example", "Demo", None)
        .expect("Failed to create wintun adapter!"),
};

let version = wintun::get_running_driver_version(&wintun).unwrap();
info!("Using wintun version: {:?}", version);

let session = Arc::new(adapter.start_session(wintun::MAX_RING_CAPACITY).unwrap());

let reader_session = session.clone();
let reader = std::thread::spawn(move || {
    while RUNNING.load(Ordering::Relaxed) {
        match reader_session.receive_blocking() {
            Ok(packet) => {
                let bytes = packet.bytes();
                println!(
                    "Read packet size {} bytes. Header data: {:?}",
                    bytes.len(),
                    &bytes[0..(20.min(bytes.len()))]
                );
            }
            Err(_) => println!("Got error while reading packet"),
        }
    }
});
println!("Press enter to stop session");

let mut line = String::new();
let _ = std::io::stdin().read_line(&mut line);
println!("Shutting down session");

RUNNING.store(false, Ordering::Relaxed);
session.shutdown();
let _ = reader.join();

println!("Shutdown complete");

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文