TunnelForge.WinTun 10.1.1

dotnet add package TunnelForge.WinTun --version 10.1.1
                    
NuGet\Install-Package TunnelForge.WinTun -Version 10.1.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="TunnelForge.WinTun" Version="10.1.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="TunnelForge.WinTun" Version="10.1.1" />
                    
Directory.Packages.props
<PackageReference Include="TunnelForge.WinTun" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add TunnelForge.WinTun --version 10.1.1
                    
#r "nuget: TunnelForge.WinTun, 10.1.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package TunnelForge.WinTun@10.1.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=TunnelForge.WinTun&version=10.1.1
                    
Install as a Cake Addin
#tool nuget:?package=TunnelForge.WinTun&version=10.1.1
                    
Install as a Cake Tool

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 WintunReceivePacket must be returned via WintunReleaseReceivePacket.
  • 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 WintunReceivePacket muss über WintunReleaseReceivePacket zurü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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .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 is deprecated because it is no longer maintained.
10.1.0-rc4 116 4/8/2026 10.1.0-rc4 is deprecated because it is no longer maintained.
10.1.0-rc3 119 4/8/2026 10.1.0-rc3 is deprecated because it is no longer maintained.
10.1.0-rc2 113 4/8/2026 10.1.0-rc2 is deprecated because it is no longer maintained.
10.1.0-rc 125 4/8/2026 10.1.0-rc is deprecated because it is no longer maintained.
10.0.2 327 12/7/2025 10.0.2 is deprecated because it is no longer maintained.
10.0.1 1,060 12/2/2025 10.0.1 is deprecated because it is no longer maintained.
10.0.0 1,297 12/2/2025 10.0.0 is deprecated because it is no longer maintained and has critical bugs.
3.0.2 1,512 7/5/2025 3.0.2 is deprecated because it is no longer maintained and has critical bugs.
3.0.1 801 7/5/2025 3.0.1 is deprecated because it is no longer maintained and has critical bugs.
3.0.0 795 7/5/2025 3.0.0 is deprecated because it is no longer maintained and has critical bugs.
2.1.22 1,130 6/24/2025 2.1.22 is deprecated because it is no longer maintained and has critical bugs.
2.1.20 910 6/24/2025 2.1.20 is deprecated because it is no longer maintained and has critical bugs.
2.1.19 999 6/23/2025 2.1.19 is deprecated because it is no longer maintained and has critical bugs.
2.1.18 898 6/23/2025 2.1.18 is deprecated because it is no longer maintained and has critical bugs.
2.1.17 896 6/23/2025 2.1.17 is deprecated because it is no longer maintained and has critical bugs.
2.1.16 882 6/23/2025 2.1.16 is deprecated because it is no longer maintained and has critical bugs.
2.1.15 898 6/23/2025 2.1.15 is deprecated because it is no longer maintained and has critical bugs.
Loading failed

EN:
Version 10.1.1:
- Enabled XML documentation generation in NuGet package.

RU:
Версия 10.1.1:
- Включена генерация XML-документации в NuGet-пакет.
- Полная XML-документация ко всем структурам и членам перечислений.
- Обновлён копирайт на 2025-2026.