Легковесная и быстрая C++ библиотека для работы с сетевыми абстракциями, туннелями и адресацией в Linux. Спроектирована для тех, кто хочет создавать VPN, прокси-серверы и кастомные сетевые стеки без лишней боли.
- Умная адресация: Полноценные объекты
IPv4иIPv6с поддержкой парсинга из строк (CIDR) и интеграцией с системнымиsockaddr. - Менеджмент сетей:
IPv4NetиIPv6Netна базе эффективногоbitset. Позволяет выделять (Allocate), резервировать (Reserve) и проверять адреса в подсетях. - Масштабируемые типы: Собственная реализация
uint128_tиint128_tдля IPv6. - Виртуальные интерфейсы: Простая работа с Linux TUN устройствами. Создание, настройка IP/MTU и чтение сырых пакетов в несколько строк кода.
- Универсальные сокеты:
UDPSocketс поддержкой Dual-stack (v4/v6) и удобным интерфейсом отправки/приема данных.
include/libnet/core— базовые типы данных и битовые карты.include/libnet/network— логика работы с IP и подсетями.include/libnet/dev— сетевые устройства и сокеты.
Библиотека использует CMake и может быть собрана как локально, так и в изолированном Docker-контейнере.
cmake --workflow --preset=build_alldocker compose up -d --build#include <libnet/libnet.hpp>
int main() {
// Создаем туннель и настраиваем IP
libnet::TUN tun("vpn_tun0");
tun.Configure(libnet::IPv4("10.8.0.1"), 24);
while (true) {
auto packet = tun.read(); // Получаем сырой IP-пакет
std::cout << "Received packet, size: " << packet.size() << " bytes" << std::endl;
}
}libnet::UDPSocket sock(libnet::IPv4("0.0.0.0:8080"));
while (true) {
auto msg = sock.recv();
std::cout << "Message from " << std::get<libnet::IPv4>(msg.addr).GetAddress() << std::endl;
// Эхо-ответ
sock.sendto(msg);
}Проект покрыт юнит-тестами (Google Test). Примечание: тесты для TUN требуют прав sudo или CAP_NET_ADMIN.
sudo ./build/build_all/tests/test_tun
./build/build_all/tests/test_ipv4net- Реализация IPv6Net
- TCPClient & TCPServer абстракции
- Поддержка TAP устройств (L2)
- Асинхронный Event Loop (epoll)