TunnelForgeCoreNet 2.1.13
.NET 5.0
This package targets .NET 5.0. The package is compatible with this framework or higher.
.NET Core 3.1
This package targets .NET Core 3.1. The package is compatible with this framework or higher.
.NET Standard 2.1
This package targets .NET Standard 2.1. The package is compatible with this framework or higher.
Suggested Alternatives
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package TunnelForgeCoreNet --version 2.1.13
NuGet\Install-Package TunnelForgeCoreNet -Version 2.1.13
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="TunnelForgeCoreNet" Version="2.1.13" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="TunnelForgeCoreNet" Version="2.1.13" />
<PackageReference Include="TunnelForgeCoreNet" />
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 TunnelForgeCoreNet --version 2.1.13
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: TunnelForgeCoreNet, 2.1.13"
#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.
#addin nuget:?package=TunnelForgeCoreNet&version=2.1.13
#tool nuget:?package=TunnelForgeCoreNet&version=2.1.13
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
TunnelForgeCoreNet
TunnelForgeCoreNet — кроссплатформенная .NET Standard 2.1 библиотека для управления виртуальными сетевыми интерфейсами TUN/TAP на Windows и Linux. Предоставляет единый API для создания, чтения, записи и настройки туннеля.
Основные возможности
- Унифицированный API для Windows (Wintun через TunnelForge.WinTun) и Linux (
/dev/net/tun
). - Создание виртуального интерфейса с произвольным именем и буфером (Windows).
- Синхронное и асинхронное чтение/запись пакетов.
- Событийная модель получения пакетов (
OnPacketReceived
). - Помощники для настройки интерфейса: IP, маска/префикс, шлюз.
- Утилиты для разбора IPv4 заголовков и формирования UDP, TCP, ICMP пакетов.
- Builder-флюент
TunnelForgeCoreBuilder
для упрощённого создания туннеля. - Максимальный размер пакета — 65535 байт.
- Автоматическое определение платформы и корректный выбор нативного кода.
Поддерживаемые платформы
- .NET Standard 2.1 (совместимо с .NET Core 3.x, .NET 6/7/8).
- Windows x64 (Wintun).
- Linux amd64 (TUN/TAP).
Установка
dotnet add package TunnelForgeCoreNet
Быстрый старт
using System;
using System.Threading;
using System.Threading.Tasks;
using TunnelForgeCoreNet;
using TunnelForgeCoreNet.Core;
using TunnelForgeCoreNet.Configurator;
class Program
{
static async Task Main()
{
// 1. Создаём туннель через билдер
var tunnel = new TunnelForgeCoreBuilder()
.WithName("tun0")
.WithCapacity(0x20000) // 128 KiB
.Build();
// 2. Настраиваем сетевой интерфейс
NetworkConfigurator.Configure(
iface: "tun0",
ip: "192.168.100.10",
mask: 24,
gateway: "192.168.100.1"
);
// 3. Подписываемся на событие получения пакета и включаем приём
tunnel.OnPacketReceived += packet =>
{
Console.WriteLine($"Packet received: {packet.Length} bytes");
// эхо-ответ
tunnel.WritePacket(packet);
};
using var cts = new CancellationTokenSource();
await tunnel.StartReceivingAsync(cts.Token);
Console.WriteLine("Нажмите Enter для выхода...");
Console.ReadLine();
// 4. Останавливаем приём и освобождаем ресурсы
cts.Cancel();
tunnel.StopReceiving();
tunnel.Dispose();
}
}
Основной API
public interface ITunnelForgeCore : IDisposable
{
void CreateTun(string name, uint capacity = 0x100000);
Task CreateTunAsync(string name, uint capacity = 0x100000, CancellationToken ct = default);
byte[]? ReadPacket();
Task<byte[]?> ReadPacketAsync(CancellationToken ct = default);
void WritePacket(ReadOnlySpan<byte> data);
Task WritePacketAsync(ReadOnlyMemory<byte> data, CancellationToken ct = default);
event Action<byte[]> OnPacketReceived;
Task StartReceivingAsync(CancellationToken ct = default);
void StopReceiving();
bool IsRunning { get; }
string? LinuxInterfaceName { get; }
}
Пример вызовов
Метод | Описание |
---|---|
CreateTun / CreateTunAsync |
Создаёт виртуальный интерфейс с именем и буфером (Windows). |
ReadPacket / ReadPacketAsync |
Читает один пакет или null . |
WritePacket / WritePacketAsync |
Запись данных в интерфейс. |
StartReceivingAsync / StopReceiving |
Фоновый приём пакетов с генерацией события OnPacketReceived . |
Dispose |
Закрытие и освобождение ресурсов. |
LinuxInterfaceName |
Имя Linux-интерфейса (например, "tun0"). |
Настройка сети (NetworkConfigurator)
public static void Configure(
string iface,
string ip,
int mask = 24, // префикс длины в битах
string? gateway = null // требуется только для Linux
)
- Windows: устанавливает IP+маску через
netsh
. - Linux: задаёт IP/префикс, поднимает интерфейс и добавляет маршрут через
ip
.
Утилиты (Utils)
- IpHeader: парсинг IPv4 заголовка (Version, IHL, TTL, Protocol, Src/Dst).
- UdpPacketBuilder: сборка UDP заголовка + вычисление checksum.
- TcpPacketBuilder: сборка TCP заголовка + вычисление checksum с псевдо-заголовком.
- IcmpPacketBuilder: сборка ICMP Echo Request + checksum.
Примеры и samples/
В папке samples/
консольное приложение демонстрирует:
TunnelForgeCoreBuilder
иNetworkConfigurator
.- Асинхронный приём с событием
OnPacketReceived
. - Эхо-сервер поверх туннеля.
Сборка и запуск samples
Windows
cd samples
dotnet build -c Release
.
# поместите рядом wintun.dll
./samples.exe
Linux
cd samples
sudo dotnet build -c Release
sudo ./samples
Лицензия
MIT License — подробности в LICENSE.txt.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 is compatible. 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 is compatible. 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 is compatible. 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 is compatible. 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 was computed. 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 is compatible. |
.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.
-
.NETCoreApp 3.1
- TunnelForge.WinTun (>= 2.1.22)
-
.NETStandard 2.1
- TunnelForge.WinTun (>= 2.1.22)
-
net5.0
- TunnelForge.WinTun (>= 2.1.22)
-
net6.0
- TunnelForge.WinTun (>= 2.1.22)
-
net7.0
- TunnelForge.WinTun (>= 2.1.22)
-
net8.0
- TunnelForge.WinTun (>= 2.1.22)
-
net9.0
- TunnelForge.WinTun (>= 2.1.22)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated | |
---|---|---|---|
3.0.7 | 48 | 7/5/2025 | |
3.0.6 | 58 | 7/5/2025 | |
3.0.5 | 61 | 7/5/2025 | |
3.0.4 | 60 | 7/5/2025 | |
3.0.3 | 61 | 7/5/2025 | |
3.0.2 | 61 | 7/5/2025 | |
3.0.1 | 59 | 7/5/2025 | |
3.0.0 | 61 | 7/5/2025 | |
2.1.15 | 85 | 7/4/2025 | |
2.1.14 | 86 | 7/4/2025 | |
2.1.13 | 141 | 6/30/2025 | |
2.1.12 | 188 | 6/28/2025 | |
2.1.11 | 172 | 6/24/2025 | |
2.1.10 | 209 | 6/24/2025 | |
2.1.9 | 217 | 6/23/2025 | |
2.1.8 | 204 | 6/23/2025 | |
2.1.7 | 206 | 6/23/2025 | |
2.1.6 | 208 | 6/23/2025 | |
2.1.5 | 210 | 6/23/2025 | |
2.1.4 | 218 | 6/22/2025 | |
2.1.3 | 213 | 6/22/2025 | |
2.1.2 | 179 | 6/21/2025 | |
2.1.1 | 217 | 6/19/2025 | |
2.1.0 | 213 | 6/18/2025 |