WiFi Toolkit v1.0 📡 专业无线通信框架
一个功能强大、模块化的C++ WiFi工具库,集成了扫描、连接管理、自定义协议引擎、流媒体服务器和丰富的网络工具。
📖 概述
WiFi Toolkit 为 Linux 平台提供了完整的无线网络开发解决方案。从底层的WiFi扫描、连接管理,到上层的自定义协议传输、音视频流媒体服务器,以及高性能缓冲区和实用工具,一应俱全。
核心组件
- WiFiScanner —— 扫描周围网络、信号历史、信道分析
- WiFiManager —— 连接管理、AP模式、Mesh、QoS、节能漫游
- ProtocolEngine —— 自定义可靠/不可靠协议、FEC、压缩、加密、多路径
- StreamingServer —— 基于FFmpeg的H.264/H.265/AAC直播服务器,支持自适应码率
- PacketBuffer —— 环形缓冲区、优先级队列、智能重传缓冲区
- Utils —— 性能计数器、流量整形器、FEC编码、安全工具、线程池、日志
✨ 特性一览
📡 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); // 创建热点
支持的安全类型
- OPEN, WEP, WPA_PSK, WPA2_PSK, WPA3_SAE, WPA_ENTERPRISE(PEAP)等
高级功能
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_FFMPEG | ON | 启用视频编码/解码 |
| WITH_OPENCV | ON | 摄像头采集与图像处理 |
| WITH_LZ4 | ON | LZ4压缩 |
| WITH_ZSTD | ON | Zstd压缩 |
| WITH_OPENSSL | ON | 加密与安全工具 |
📨 协议数据包格式 (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); // 批量重传
🔍 故障排除
sudo ip link set wlan0 up,并安装 libnl-3-dev。wifi_manager.run_diagnostics() 并查看报告。-DCMAKE_PREFIX_PATH。📊 性能优化建议
- 使用
RingBuffer的零拷贝接口 (get_write_pointer/advance_write_pointer) 避免额外复制。 - 根据CPU核心数调整
ThreadPool大小。 - 启用硬件加速(如Intel QSV)可显著提升视频编码性能。
- 对低延迟要求高的流使用
LOW_LATENCY_STREAM并禁用FEC。
📝 更新日志
版本 1.0.0 (2026-03-17)
- ✨ 正式发布,包含所有核心模块
- 📡 完整WiFi扫描与信道分析
- 🔧 协议引擎支持可靠/不可靠流、FEC、LZ4/Zstd压缩
- 🎥 流媒体服务器H.264/H.265/AAC推流,自适应码率
- 🛡️ 安全工具集 (AES-GCM, RSA, SHA256)
- 📊 网络质量探测与流量整形
版本 0.9.0 (2026-02-10) - Beta
- 基础扫描与连接功能,协议引擎原型
⚖️ 许可证
MIT License
Copyright (c) 2026 WiFi Toolkit Contributors
允许自由使用、修改、分发,包括商业用途,需保留版权声明。
© 2026 WiFi Toolkit 开发团队 · 文档版本 1.0 · 生成于 2026-03-17