TunnelForgeCoreNet 2.1.13

Suggested Alternatives

TunnelForgeCoreNet 3.0.0

There is a newer version of this package available.
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" />
                    
Directory.Packages.props
<PackageReference Include="TunnelForgeCoreNet" />
                    
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 TunnelForgeCoreNet --version 2.1.13
                    
#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
                    
Install as a Cake Addin
#tool nuget:?package=TunnelForgeCoreNet&version=2.1.13
                    
Install as a Cake Tool

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 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.

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.6 is deprecated because it has critical bugs.
3.0.5 61 7/5/2025 3.0.5 is deprecated because it has critical bugs.
3.0.4 60 7/5/2025 3.0.4 is deprecated because it has critical bugs.
3.0.3 61 7/5/2025 3.0.3 is deprecated because it has critical bugs.
3.0.2 61 7/5/2025 3.0.2 is deprecated because it has critical bugs.
3.0.1 59 7/5/2025 3.0.1 is deprecated because it has critical bugs.
3.0.0 61 7/5/2025 3.0.0 is deprecated because it has critical bugs.
2.1.15 85 7/4/2025 2.1.15 is deprecated because it is no longer maintained and has critical bugs.
2.1.14 86 7/4/2025 2.1.14 is deprecated because it is no longer maintained and has critical bugs.
2.1.13 141 6/30/2025 2.1.13 is deprecated because it is no longer maintained and has critical bugs.
2.1.12 188 6/28/2025 2.1.12 is deprecated because it is no longer maintained and has critical bugs.
2.1.11 172 6/24/2025 2.1.11 is deprecated because it is no longer maintained and has critical bugs.
2.1.10 209 6/24/2025 2.1.10 is deprecated because it is no longer maintained.
2.1.9 217 6/23/2025 2.1.9 is deprecated because it is no longer maintained.
2.1.8 204 6/23/2025 2.1.8 is deprecated because it has critical bugs.
2.1.7 206 6/23/2025 2.1.7 is deprecated because it has critical bugs.
2.1.6 208 6/23/2025 2.1.6 is deprecated because it has critical bugs.
2.1.5 210 6/23/2025 2.1.5 is deprecated because it has critical bugs.
2.1.4 218 6/22/2025 2.1.4 is deprecated because it has critical bugs.
2.1.3 213 6/22/2025 2.1.3 is deprecated because it has critical bugs.
2.1.2 179 6/21/2025 2.1.2 is deprecated because it has critical bugs.
2.1.1 217 6/19/2025 2.1.1 is deprecated because it has critical bugs.
2.1.0 213 6/18/2025 2.1.0 is deprecated because it has critical bugs.