TunnelForge.WinTun
10.1.1
dotnet add package TunnelForge.WinTun --version 10.1.1
NuGet\Install-Package TunnelForge.WinTun -Version 10.1.1
<PackageReference Include="TunnelForge.WinTun" Version="10.1.1" />
<PackageVersion Include="TunnelForge.WinTun" Version="10.1.1" />
<PackageReference Include="TunnelForge.WinTun" />
paket add TunnelForge.WinTun --version 10.1.1
#r "nuget: TunnelForge.WinTun, 10.1.1"
#:package TunnelForge.WinTun@10.1.1
#addin nuget:?package=TunnelForge.WinTun&version=10.1.1
#tool nuget:?package=TunnelForge.WinTun&version=10.1.1
TunnelForge.WinTun (v10.1.1)
Поддерживаемые языки / Supported languages / Unterstützte Sprachen / 支持的语言:
Русский
TunnelForge.WinTun — это обёртка на C# для взаимодействия с нативным драйвером Wintun (Microsoft), который предоставляет высокопроизводительные виртуальные TUN-интерфейсы в Windows. Библиотека позволяет создавать адаптеры, открывать сессии для передачи сетевых пакетов и управлять их жизненным циклом с помощью удобного и низкоуровневого API.
Установка
dotnet add package TunnelForge.WinTun --version 10.1.1
Поддерживаемые платформы
| Runtime | Архитектура |
|---|---|
| win-x64 | AMD64 / Intel 64 |
| win-x86 | x86 (32-bit) |
| win-arm | ARM (32-bit) |
| win-arm64 | ARM64 |
Основные возможности
- Создание и открытие адаптеров Wintun.
- Управление сессиями чтения и записи сетевых пакетов.
- Настройка логгирования нативных вызовов.
- Получение событий готовности к чтению.
- Полный контроль над памятью пакетов для минимизации копирований.
Быстрый старт
Создание адаптера и сессии
using System;
using System.Runtime.InteropServices;
using TunnelForge.WinTun;
using TunnelForge.WinTun.Structs;
var adapterName = "MyTunnel";
var tunnelType = "TunnelForge";
var guid = new GUID(); // пустой GUID — система назначит автоматически
// Создание адаптера
var adapter = WinTunNative.WintunCreateAdapter(adapterName, tunnelType, ref guid);
if (adapter == IntPtr.Zero)
throw new Exception("Не удалось создать адаптер");
// Запуск сессии (буфер 4 МБ, должен быть степенью двойки от 128 КБ до 64 МБ)
var session = WinTunNative.WintunStartSession(adapter, 0x400000);
if (session == IntPtr.Zero)
{
WinTunNative.WintunCloseAdapter(adapter);
throw new Exception("Не удалось запустить сессию");
}
Получение пакетов
var waitEvent = WinTunNative.WintunGetReadWaitEvent(session);
var packetPtr = WinTunNative.WintunReceivePacket(session, out uint packetSize);
if (packetPtr != IntPtr.Zero)
{
// Чтение данных пакета
byte[] data = new byte[packetSize];
Marshal.Copy(packetPtr, data, 0, (int)packetSize);
// Обязательно освободить буфер после обработки
WinTunNative.WintunReleaseReceivePacket(session, packetPtr);
}
Отправка пакетов
byte[] payload = /* данные IP-пакета */;
var sendPtr = WinTunNative.WintunAllocateSendPacket(session, (uint)payload.Length);
if (sendPtr != IntPtr.Zero)
{
Marshal.Copy(payload, 0, sendPtr, payload.Length);
WinTunNative.WintunSendPacket(session, sendPtr);
}
Настройка логгирования
WinTunNative.WintunSetLogger((WINTUN_LOGGER_LEVEL level, ulong timestamp, string message) =>
{
Console.WriteLine($"[WinTun {level}] {message}");
});
// Отключение логгирования
WinTunNative.WintunSetLogger(null);
Получение информации об адаптере
// LUID адаптера (для идентификации интерфейса в системе)
WinTunNative.WintunGetAdapterLUID(adapter, out NET_LUID luid);
// Версия драйвера
uint version = WinTunNative.WintunGetRunningDriverVersion();
Очистка ресурсов
WinTunNative.WintunEndSession(session);
WinTunNative.WintunCloseAdapter(adapter);
// Удалить драйвер, если больше нет активных адаптеров
WinTunNative.WintunDeleteDriver();
Важные замечания
- Работает только на Windows.
- Требуются права администратора для создания адаптеров.
- Буфер сессии должен быть степенью двойки в диапазоне от 128 КБ до 64 МБ.
- Указатель пакета из
WintunReceivePacketобязательно нужно вернуть черезWintunReleaseReceivePacket. - Не забывайте закрывать сессии и адаптеры при завершении работы.
English
TunnelForge.WinTun is a C# wrapper for the native Wintun driver (by Microsoft), providing high-performance virtual TUN interfaces on Windows. This library allows creating adapters, opening sessions for packet transmission, and managing their lifecycle through a simple low-level API.
Installation
dotnet add package TunnelForge.WinTun --version 10.1.1
Supported Platforms
| Runtime | Architecture |
|---|---|
| win-x64 | AMD64 / Intel 64 |
| win-x86 | x86 (32-bit) |
| win-arm | ARM (32-bit) |
| win-arm64 | ARM64 |
Key Features
- Create and open Wintun adapters.
- Manage read/write sessions for network packets.
- Configure native logging callbacks.
- Obtain read wait events for efficient async I/O.
- Full control of packet memory to minimize copying.
Quick Start
Create adapter and session
using System;
using System.Runtime.InteropServices;
using TunnelForge.WinTun;
using TunnelForge.WinTun.Structs;
string adapterName = "MyTunnel";
string tunnelType = "TunnelForge";
var guid = new GUID(); // empty GUID — system will assign automatically
// Create adapter
var adapter = WinTunNative.WintunCreateAdapter(adapterName, tunnelType, ref guid);
if (adapter == IntPtr.Zero)
throw new Exception("Failed to create adapter");
// Start session (4 MB buffer, must be power of two between 128 KB and 64 MB)
var session = WinTunNative.WintunStartSession(adapter, 0x400000);
if (session == IntPtr.Zero)
{
WinTunNative.WintunCloseAdapter(adapter);
throw new Exception("Failed to start session");
}
Receive packets
var waitEvent = WinTunNative.WintunGetReadWaitEvent(session);
var packetPtr = WinTunNative.WintunReceivePacket(session, out uint packetSize);
if (packetPtr != IntPtr.Zero)
{
byte[] data = new byte[packetSize];
Marshal.Copy(packetPtr, data, 0, (int)packetSize);
// Must release the buffer after processing
WinTunNative.WintunReleaseReceivePacket(session, packetPtr);
}
Send packets
byte[] payload = /* IP packet data */;
var sendPtr = WinTunNative.WintunAllocateSendPacket(session, (uint)payload.Length);
if (sendPtr != IntPtr.Zero)
{
Marshal.Copy(payload, 0, sendPtr, payload.Length);
WinTunNative.WintunSendPacket(session, sendPtr);
}
Configure logging
WinTunNative.WintunSetLogger((WINTUN_LOGGER_LEVEL level, ulong timestamp, string message) =>
{
Console.WriteLine($"[WinTun {level}] {message}");
});
// Disable logging
WinTunNative.WintunSetLogger(null);
Get adapter info
// Adapter LUID (for system interface identification)
WinTunNative.WintunGetAdapterLUID(adapter, out NET_LUID luid);
// Driver version
uint version = WinTunNative.WintunGetRunningDriverVersion();
Cleanup
WinTunNative.WintunEndSession(session);
WinTunNative.WintunCloseAdapter(adapter);
// Remove the driver if no adapters remain
WinTunNative.WintunDeleteDriver();
Important Notes
- Windows only.
- Administrator privileges required to create adapters.
- Session buffer must be a power of two between 128 KB and 64 MB.
- Packet pointer from
WintunReceivePacketmust be returned viaWintunReleaseReceivePacket. - Always close sessions and adapters on shutdown.
Deutsch
TunnelForge.WinTun ist eine C#-Wrapper-Bibliothek für den nativen Wintun-Treiber (von Microsoft), die leistungsstarke virtuelle TUN-Schnittstellen unter Windows bereitstellt. Die Bibliothek ermöglicht das Erstellen von Adaptern, das Öffnen von Sessions für die Paketübertragung und die Verwaltung des Lebenszyklus über eine einfache Low-Level-API.
Installation
dotnet add package TunnelForge.WinTun --version 10.1.1
Unterstützte Plattformen
| Runtime | Architektur |
|---|---|
| win-x64 | AMD64 / Intel 64 |
| win-x86 | x86 (32-bit) |
| win-arm | ARM (32-bit) |
| win-arm64 | ARM64 |
Hauptfunktionen
- Erstellung und Öffnung von Wintun-Adaptern.
- Verwaltung von Lese- und Schreib-Sessions für Netzwerkpakete.
- Konfiguration von nativen Logger-Callbacks.
- Empfang von Warte-Events für effizientes asynchrones IO.
- Volle Kontrolle über Paket-Speicher zur Minimierung von Kopien.
Schnellstart
Adapter und Session erstellen
using System;
using System.Runtime.InteropServices;
using TunnelForge.WinTun;
using TunnelForge.WinTun.Structs;
string adapterName = "MeinTunnel";
string tunnelType = "TunnelForge";
var guid = new GUID(); // Leerer GUID — System vergibt automatisch
// Adapter erstellen
var adapter = WinTunNative.WintunCreateAdapter(adapterName, tunnelType, ref guid);
if (adapter == IntPtr.Zero)
throw new Exception("Adapter konnte nicht erstellt werden");
// Session mit 4 MB Puffer starten (Zweierpotenz zwischen 128 KB und 64 MB)
var session = WinTunNative.WintunStartSession(adapter, 0x400000);
if (session == IntPtr.Zero)
{
WinTunNative.WintunCloseAdapter(adapter);
throw new Exception("Session konnte nicht gestartet werden");
}
Pakete empfangen
var waitEvent = WinTunNative.WintunGetReadWaitEvent(session);
var packetPtr = WinTunNative.WintunReceivePacket(session, out uint packetSize);
if (packetPtr != IntPtr.Zero)
{
byte[] data = new byte[packetSize];
Marshal.Copy(packetPtr, data, 0, (int)packetSize);
// Puffer muss nach der Verarbeitung freigegeben werden
WinTunNative.WintunReleaseReceivePacket(session, packetPtr);
}
Pakete senden
byte[] payload = /* IP-Paketdaten */;
var sendPtr = WinTunNative.WintunAllocateSendPacket(session, (uint)payload.Length);
if (sendPtr != IntPtr.Zero)
{
Marshal.Copy(payload, 0, sendPtr, payload.Length);
WinTunNative.WintunSendPacket(session, sendPtr);
}
Logging konfigurieren
WinTunNative.WintunSetLogger((WINTUN_LOGGER_LEVEL level, ulong timestamp, string message) =>
{
Console.WriteLine($"[WinTun {level}] {message}");
});
// Logging deaktivieren
WinTunNative.WintunSetLogger(null);
Adapter-Informationen abrufen
// Adapter-LUID (zur Identifikation der Schnittstelle im System)
WinTunNative.WintunGetAdapterLUID(adapter, out NET_LUID luid);
// Treiberversion
uint version = WinTunNative.WintunGetRunningDriverVersion();
Aufräumen
WinTunNative.WintunEndSession(session);
WinTunNative.WintunCloseAdapter(adapter);
// Treiber entfernen, wenn keine Adapter mehr vorhanden
WinTunNative.WintunDeleteDriver();
Wichtige Hinweise
- Nur Windows wird unterstützt.
- Administratorrechte sind zum Erstellen von Adaptern erforderlich.
- Session-Puffer muss eine Zweierpotenz zwischen 128 KB und 64 MB sein.
- Der Paketzeiger von
WintunReceivePacketmuss überWintunReleaseReceivePacketzurückgegeben werden. - Sessions und Adapter immer beim Beenden schließen.
简体中文
TunnelForge.WinTun 是微软 Wintun 驱动的 C# 封装库,提供高性能的虚拟 TUN 网络接口,仅限 Windows 平台。此库允许创建适配器、打开会话进行数据包传输,并通过简单的低级 API 管理其生命周期。
安装
dotnet add package TunnelForge.WinTun --version 10.1.1
支持的平台
| Runtime | 架构 |
|---|---|
| win-x64 | AMD64 / Intel 64 |
| win-x86 | x86 (32位) |
| win-arm | ARM (32位) |
| win-arm64 | ARM64 |
主要功能
- 创建和打开 Wintun 适配器。
- 管理网络数据包的读写会话。
- 配置本地日志回调。
- 获取读取等待事件,实现高效异步 IO。
- 完全控制数据包内存,减少拷贝。
快速开始
创建适配器和会话
using System;
using System.Runtime.InteropServices;
using TunnelForge.WinTun;
using TunnelForge.WinTun.Structs;
string adapterName = "MyTunnel";
string tunnelType = "TunnelForge";
var guid = new GUID(); // 空 GUID — 系统将自动分配
// 创建适配器
var adapter = WinTunNative.WintunCreateAdapter(adapterName, tunnelType, ref guid);
if (adapter == IntPtr.Zero)
throw new Exception("创建适配器失败");
// 启动会话(4 MB 缓冲区,必须是 128 KB 到 64 MB 之间的 2 的幂)
var session = WinTunNative.WintunStartSession(adapter, 0x400000);
if (session == IntPtr.Zero)
{
WinTunNative.WintunCloseAdapter(adapter);
throw new Exception("启动会话失败");
}
接收数据包
var waitEvent = WinTunNative.WintunGetReadWaitEvent(session);
var packetPtr = WinTunNative.WintunReceivePacket(session, out uint packetSize);
if (packetPtr != IntPtr.Zero)
{
byte[] data = new byte[packetSize];
Marshal.Copy(packetPtr, data, 0, (int)packetSize);
// 处理后必须释放缓冲区
WinTunNative.WintunReleaseReceivePacket(session, packetPtr);
}
发送数据包
byte[] payload = /* IP 数据包数据 */;
var sendPtr = WinTunNative.WintunAllocateSendPacket(session, (uint)payload.Length);
if (sendPtr != IntPtr.Zero)
{
Marshal.Copy(payload, 0, sendPtr, payload.Length);
WinTunNative.WintunSendPacket(session, sendPtr);
}
配置日志
WinTunNative.WintunSetLogger((WINTUN_LOGGER_LEVEL level, ulong timestamp, string message) =>
{
Console.WriteLine($"[WinTun {level}] {message}");
});
// 禁用日志
WinTunNative.WintunSetLogger(null);
获取适配器信息
// 适配器 LUID(用于系统中接口标识)
WinTunNative.WintunGetAdapterLUID(adapter, out NET_LUID luid);
// 驱动程序版本
uint version = WinTunNative.WintunGetRunningDriverVersion();
清理资源
WinTunNative.WintunEndSession(session);
WinTunNative.WintunCloseAdapter(adapter);
// 如果没有剩余适配器则删除驱动程序
WinTunNative.WintunDeleteDriver();
重要提示
- 仅支持 Windows。
- 创建适配器需要管理员权限。
- 会话缓冲区必须是 128 KB 到 64 MB 之间的 2 的幂。
- 来自
WintunReceivePacket的数据包指针必须通过WintunReleaseReceivePacket释放。 - 关闭时务必清理会话和适配器。
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- No dependencies.
-
net10.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on TunnelForge.WinTun:
| Package | Downloads |
|---|---|
|
TunnelForge.Tun
Cross-platform TUN adapter abstraction for .NET. Unified ITunAdapter interface for Windows (WinTun) and Linux (/dev/net/tun). Error handling via Rustly Result<T, E> — no exceptions. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | |
|---|---|---|---|
| 10.1.1 | 479 | 4/8/2026 | |
| 10.1.0 | 124 | 4/8/2026 | |
| 10.1.0-rc4 | 116 | 4/8/2026 | |
| 10.1.0-rc3 | 119 | 4/8/2026 | |
| 10.1.0-rc2 | 113 | 4/8/2026 | |
| 10.1.0-rc | 125 | 4/8/2026 | |
| 10.0.2 | 327 | 12/7/2025 | |
| 10.0.1 | 1,060 | 12/2/2025 | |
| 10.0.0 | 1,297 | 12/2/2025 | |
| 3.0.2 | 1,512 | 7/5/2025 | |
| 3.0.1 | 801 | 7/5/2025 | |
| 3.0.0 | 795 | 7/5/2025 | |
| 2.1.22 | 1,130 | 6/24/2025 | |
| 2.1.20 | 910 | 6/24/2025 | |
| 2.1.19 | 999 | 6/23/2025 | |
| 2.1.18 | 898 | 6/23/2025 | |
| 2.1.17 | 896 | 6/23/2025 | |
| 2.1.16 | 882 | 6/23/2025 | |
| 2.1.15 | 898 | 6/23/2025 |
EN:
Version 10.1.1:
- Enabled XML documentation generation in NuGet package.
RU:
Версия 10.1.1:
- Включена генерация XML-документации в NuGet-пакет.
- Полная XML-документация ко всем структурам и членам перечислений.
- Обновлён копирайт на 2025-2026.