WiFi Toolkit v1.0 📡 专业无线通信框架

C++17 Linux only libnl-3 · OpenSSL LZ4/Zstd 最后更新: 2026-03-17

一个功能强大、模块化的C++ WiFi工具库,集成了扫描、连接管理、自定义协议引擎、流媒体服务器和丰富的网络工具。

📖 概述

WiFi Toolkit 为 Linux 平台提供了完整的无线网络开发解决方案。从底层的WiFi扫描、连接管理,到上层的自定义协议传输、音视频流媒体服务器,以及高性能缓冲区和实用工具,一应俱全。

🎯 设计理念: 模块化、高性能、易于集成。每个组件都可独立使用。

核心组件

✨ 特性一览

📡 WiFi扫描

支持主动/被动扫描,信号历史跟踪,信道干扰分析

🔌 连接管理

WPA2/3, 企业级认证, AP模式, Mesh, 802.11e QoS

🔧 自定义协议

可靠流/数据报, FEC (Reed-Solomon), 拥塞控制, 多路径

🎬 流媒体服务器

H.264/H.265/AAC, 自适应码率(ABR), RTSP/WebRTC支持

🗃️ 高性能缓冲区

无锁环形缓冲, 优先级队列, 智能重传缓冲区

🔐 安全工具

AES-256-GCM, RSA签名, SHA256, 随机数生成

⚡ 压缩

LZ4, Zstd, Zlib 实时压缩

📊 监控与统计

网络质量探测(RTT/丢包/MOS), 性能计数器, 流量整形

⚡ 快速开始

扫描附近网络并打印最强的5个热点:

#include <wifi_toolkit/wifi_scanner.hpp>
#include <iostream>

using namespace wifi_toolkit;

int main() {
    WiFiScanner scanner;
    if (!scanner.initialize("wlan0")) {
        std::cerr << "初始化失败\n";
        return 1;
    }
    WiFiScanner::ScanConfig config;
    scanner.scan(config);
    auto nets = scanner.get_networks();
    std::sort(nets.begin(), nets.end(),
        [](auto& a, auto& b){ return a.signal_strength > b.signal_strength; });
    for (int i=0; i<std::min(5,(int)nets.size()); ++i)
        std::cout << nets[i].ssid << " " << nets[i].signal_strength << "dBm\n";
    return 0;
}

编译:g++ -std=c++17 scan.cpp -lwifi_toolkit -lnl-3 -lnl-genl-3

📦 安装与依赖

Ubuntu 22.04 / Debian 12

sudo apt install build-essential cmake pkg-config \
    libnl-3-dev libnl-genl-3-dev libpcap-dev \
    libssl-dev zlib1g-dev liblz4-dev libzstd-dev \
    libavcodec-dev libavformat-dev libavutil-dev libswscale-dev \
    libopencv-dev portaudio19-dev

CMake 集成

find_package(wifi_toolkit REQUIRED)
target_link_libraries(my_app PRIVATE wifi_toolkit)

构建选项

cmake .. -DCMAKE_BUILD_TYPE=Release -DWITH_FFMPEG=ON -DWITH_OPENCV=ON

📡 WiFiScanner — 网络扫描与分析

WiFiScanner scanner;
scanner.initialize("wlan0");
scanner.set_scan_callback([](auto& nets){ /* 扫描完成回调 */ });
scanner.scan(config);                       // 单次扫描
scanner.start_continuous_scan(config);       // 连续扫描

核心结构:WiFiNetwork

struct WiFiNetwork {
    std::string ssid, bssid;
    int channel, frequency, signal_strength, noise_level, snr;
    std::string security, mode;
    bool is_encrypted, is_hidden;
    double quality_score() const;  // 综合信号质量
};

信道分析

auto channels = scanner.analyze_channels();
for (auto& ch : channels) {
    std::cout << "Channel " << ch.channel << ": " 
              << ch.network_count << " nets, interference " 
              << ch.interference_level << "%\n";
}

🛠️ WiFiManager — 连接与热点管理

WiFiManager mgr;
mgr.set_state_change_callback([](ConnectionState s){ /* 状态变化 */ });

WiFiManager::ConnectionConfig cfg;
cfg.ssid = "MyWiFi";
cfg.password = "secret";
cfg.security = WiFiManager::SecurityType::WPA2_PSK;
mgr.connect(cfg);

mgr.start_ap_mode("MyAP", "ap123456", WPA2_PSK, 6);  // 创建热点

支持的安全类型

高级功能

mgr.set_tx_power(20);            // 设置发射功率 dBm
mgr.enable_power_saving(true);   // 节能模式
mgr.join_mesh_network("mesh-id", "key");  // Mesh网络

🔧 ProtocolEngine — 自定义协议引擎

支持可靠流、不可靠数据报、优先级流、多路径、FEC、压缩、加密。

ProtocolEngine engine;
ProtocolEngine::ProtocolConfig config;
config.type = ProtocolEngine::ProtocolType::RELIABLE_STREAM;
config.enable_fec = true;
config.enable_compression = true;
config.compression_type = ProtocolEngine::ProtocolConfig::LZ4;
engine.initialize(config);

auto stream_id = engine.create_stream("192.168.1.100", 8080, config);
engine.send_data(stream_id, (uint8_t*)"hello", 5, ProtocolEngine::QoSLevel::VIDEO);

engine.set_data_received_callback([](uint32_t sid, const uint8_t* d, size_t sz){
    std::cout << "收到数据\n";
});

拥塞控制

内置类CUBIC算法,可根据RTT和丢包率动态调整窗口。

engine.update_congestion_window(stream_id, loss_rate);
engine.adjust_transmission_rate(stream_id, rtt_ms);

🎥 StreamingServer — 音视频流媒体服务器

基于FFmpeg编码,支持H.264/H.265/AAC,自适应码率,录制,WebRTC。

StreamingServer server;
server.start_server(8080);
StreamingServer::StreamConfig sc;
sc.type = StreamingServer::StreamType::VIDEO_H264;
sc.video.width = 1920; sc.video.height = 1080; sc.video.fps = 30;
sc.adaptive.enable_abr = true;
auto sid = server.create_stream("live", sc);
server.start_stream(sid);

// 喂数据
server.feed_video_frame(sid, frame_data, size, pts, dts);

// 从摄像头直接推流
server.stream_from_camera(sid, 0);

客户端管理

std::vector<StreamingServer::ClientInfo> clients = server.get_connected_clients();

🗃️ 缓冲区模块 (packet_buffer)

RingBuffer — 无锁环形缓冲区

RingBuffer rb(1024*1024); // 1MB
rb.write_safe(data, size);
rb.read_safe(buffer, size);

PriorityPacketBuffer — 优先级队列

PriorityPacketBuffer pb(10*1024*1024);
pb.push_packet(PriorityPacketBuffer::HIGH, data, size, stream_id);
pb.pop_packet(buffer, buf_size, packet_size, info);

RetransmissionBuffer — 智能重传存储

RetransmissionBuffer rtx;
rtx.store_packet(stream_id, seq, data, size);
rtx.request_retransmission(stream_id, lost_seq);

🧰 工具集 (utils)

PerformanceCounter

PerformanceCounter pc; pc.start(); /* work */ pc.stop();
double ms = pc.get_elapsed_ms();
auto stats = pc.get_statistics(); // 含p95/p99

TrafficShaper — 流量整形

TrafficShaper::ShapingProfile prof;
prof.rate_bps = 1000000; // 1Mbps
TrafficShaper shaper(prof);
if (shaper.shape_packet(packet, size, priority)) { /* 允许通过 */ }

SecurityTool — 加密/签名

auto key = SecurityTool::generate_random_key(32);
auto hash = SecurityTool::hash_sha256(data, size);
auto cipher = SecurityTool::aes_256_gcm_encrypt(key, iv, data, size);

Logger — 结构化日志

Logger::get_instance().set_level(Logger::Level::DEBUG);
LOG_INFO("Server started on port " + std::to_string(port));

NetworkQualityProbe — 实时网络探测

NetworkQualityProbe probe;
probe.start_probing("8.8.8.8");
auto metrics = probe.get_current_metrics(); // RTT, jitter, 丢包率, MOS

💡 完整示例:音频视频推流

#include "wifi_toolkit/streaming_server.hpp"
#include "wifi_toolkit/utils.hpp"
#include <thread>
using namespace wifi_toolkit;

int main() {
    StreamingServer server;
    server.start_server(8080);
    StreamingServer::StreamConfig sc;
    sc.type = StreamingServer::StreamType::VIDEO_H264;
    sc.video = {1920,1080,30,5000,60,23,true,8000,1000};
    sc.adaptive.enable_abr = true;
    auto sid = server.create_stream("camera", sc);
    server.start_stream(sid);
    // 模拟摄像头读取线程
    std::thread cam([&]{
        cv::VideoCapture cap(0);
        cv::Mat frame;
        uint64_t pts = 0;
        while (running) {
            cap >> frame;
            std::vector<uint8_t> enc; // 实际应调用server.feed_video_frame
            server.feed_video_frame(sid, frame.data, frame.total()*frame.elemSize(), pts, pts);
            pts += 33; // 30fps
            std::this_thread::sleep_for(std::chrono::milliseconds(33));
        }
    });
    // 等待退出
    cam.join();
    server.stop_server();
    return 0;
}

更多示例见 examples/client_example, benchmark, audio_video_demo

⚙️ 核心配置选项 (CMake)

选项默认说明
WITH_FFMPEGON启用视频编码/解码
WITH_OPENCVON摄像头采集与图像处理
WITH_LZ4ONLZ4压缩
WITH_ZSTDONZstd压缩
WITH_OPENSSLON加密与安全工具

📨 协议数据包格式 (ProtocolEngine)

每个数据包包含以下头部(约32字节):

struct Packet {
    uint32_t sequence;    // 序列号
    uint32_t ack;         // 确认号
    uint32_t ack_bitmap;  // 位图ACK
    uint16_t flags;       // 标志位
    QoSLevel qos;         // 优先级
    uint8_t stream_id;    // 流ID
    uint32_t timestamp;   // 时间戳
    uint8_t fec_group_id, fec_index, fec_total; // FEC信息
    uint8_t retransmit_count;  // 重传次数
    // 负载数据
};

支持XOR FEC和Reed-Solomon(可扩展)。

🔬 高级用法

多路径传输 (Multipath)

engine.add_transmission_path(stream_id, "eth0");
engine.add_transmission_path(stream_id, "wlan0");

自适应码率 (ABR) 策略

StreamingServer根据客户端平均网络质量自动切换码率阶梯,回调通知。

server.set_quality_adaptation_callback(
    [](uint32_t sid, uint32_t old_kbps, uint32_t new_kbps) {
        LOG_INFO("Stream " + std::to_string(sid) + " bitrate changed");
    });

智能重传策略

RetransmissionBuffer rtx;
rtx.enable_smart_retransmission(true);
rtx.set_retransmission_strategy(2); // 批量重传

🔍 故障排除

扫描不到任何网络? 确保 wlan0 已启用且支持监听模式:sudo ip link set wlan0 up,并安装 libnl-3-dev。
连接失败 (Connection failed) 检查wpa_supplicant是否运行,或尝试运行诊断:wifi_manager.run_diagnostics() 并查看报告。
编译时找不到 FFmpeg 确认已安装 libavcodec-dev 等,并设置 -DCMAKE_PREFIX_PATH

📊 性能优化建议

📝 更新日志

版本 1.0.0 (2026-03-17)

版本 0.9.0 (2026-02-10) - Beta

⚖️ 许可证

MIT License

Copyright (c) 2026 WiFi Toolkit Contributors

允许自由使用、修改、分发,包括商业用途,需保留版权声明。

© 2026 WiFi Toolkit 开发团队 · 文档版本 1.0 · 生成于 2026-03-17