mirror of
https://github.com/snltty/linker.git
synced 2025-10-27 11:00:25 +08:00
更新
This commit is contained in:
8
.github/workflows/docker.yml
vendored
8
.github/workflows/docker.yml
vendored
@@ -57,9 +57,9 @@ jobs:
|
|||||||
docker tag snltty/linker-musl-x64:latest snltty/linker-musl:amd64 && \
|
docker tag snltty/linker-musl-x64:latest snltty/linker-musl:amd64 && \
|
||||||
docker push snltty/linker-musl:amd64 && \
|
docker push snltty/linker-musl:amd64 && \
|
||||||
docker manifest create snltty/linker-musl:latest snltty/linker-musl:amd64 snltty/linker-musl:arm64 snltty/linker-musl:arm && \
|
docker manifest create snltty/linker-musl:latest snltty/linker-musl:amd64 snltty/linker-musl:arm64 snltty/linker-musl:arm && \
|
||||||
docker manifest create snltty/linker-musl:v1.6.2 snltty/linker-musl:amd64 snltty/linker-musl:arm64 snltty/linker-musl:arm && \
|
docker manifest create snltty/linker-musl:v1.6.3 snltty/linker-musl:amd64 snltty/linker-musl:arm64 snltty/linker-musl:arm && \
|
||||||
docker manifest push snltty/linker-musl:latest && \
|
docker manifest push snltty/linker-musl:latest && \
|
||||||
docker manifest push snltty/linker-musl:v1.6.2 && \
|
docker manifest push snltty/linker-musl:v1.6.3 && \
|
||||||
docker pull --platform linux/arm/v7 snltty/linker-debian-arm:latest && \
|
docker pull --platform linux/arm/v7 snltty/linker-debian-arm:latest && \
|
||||||
docker tag snltty/linker-debian-arm:latest snltty/linker-debian:arm && \
|
docker tag snltty/linker-debian-arm:latest snltty/linker-debian:arm && \
|
||||||
docker push snltty/linker-debian:arm && \
|
docker push snltty/linker-debian:arm && \
|
||||||
@@ -70,6 +70,6 @@ jobs:
|
|||||||
docker tag snltty/linker-debian-x64:latest snltty/linker-debian:amd64 && \
|
docker tag snltty/linker-debian-x64:latest snltty/linker-debian:amd64 && \
|
||||||
docker push snltty/linker-debian:amd64 && \
|
docker push snltty/linker-debian:amd64 && \
|
||||||
docker manifest create snltty/linker-debian:latest snltty/linker-debian:amd64 snltty/linker-debian:arm64 snltty/linker-debian:arm && \
|
docker manifest create snltty/linker-debian:latest snltty/linker-debian:amd64 snltty/linker-debian:arm64 snltty/linker-debian:arm && \
|
||||||
docker manifest create snltty/linker-debian:v1.6.2 snltty/linker-debian:amd64 snltty/linker-debian:arm64 snltty/linker-debian:arm && \
|
docker manifest create snltty/linker-debian:v1.6.3 snltty/linker-debian:amd64 snltty/linker-debian:arm64 snltty/linker-debian:arm && \
|
||||||
docker manifest push snltty/linker-debian:latest && \
|
docker manifest push snltty/linker-debian:latest && \
|
||||||
docker manifest push snltty/linker-debian:v1.6.2
|
docker manifest push snltty/linker-debian:v1.6.3
|
||||||
30
.github/workflows/dotnet.yml
vendored
30
.github/workflows/dotnet.yml
vendored
@@ -33,11 +33,11 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.ACTIONS_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.ACTIONS_TOKEN }}
|
||||||
with:
|
with:
|
||||||
tag_name: v1.6.2
|
tag_name: v1.6.3
|
||||||
release_name: v1.6.2.${{ steps.date.outputs.today }}
|
release_name: v1.6.3.${{ steps.date.outputs.today }}
|
||||||
draft: false
|
draft: false
|
||||||
prerelease: false
|
prerelease: false
|
||||||
body: "1. 修复UI\r\n2. 修复服务端重启无法关闭内网穿透的问题\r\n3. 修复网络掩码计算错误"
|
body: "1. 优化UI,显示网络计算IP数\r\n2. 修复内网穿透不停止直接删除导致的无法再次添加的问题\r\n3. 优化网卡的端口转发\r\n4. 修复网络掩码计算错误\r\n5. 测试中,不要更,不要更,不要更"
|
||||||
- name: upload-win-x86-oss
|
- name: upload-win-x86-oss
|
||||||
id: upload-win-x86-oss
|
id: upload-win-x86-oss
|
||||||
uses: tvrcgo/oss-action@v0.1.1
|
uses: tvrcgo/oss-action@v0.1.1
|
||||||
@@ -47,7 +47,7 @@ jobs:
|
|||||||
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
||||||
bucket: ide-qbcode
|
bucket: ide-qbcode
|
||||||
asset-path: ./public/publish-zip/linker-win-x86.zip
|
asset-path: ./public/publish-zip/linker-win-x86.zip
|
||||||
target-path: /downloads/linker/v1.6.2/linker-win-x86.zip
|
target-path: /downloads/linker/v1.6.3/linker-win-x86.zip
|
||||||
- name: upload-win-x86
|
- name: upload-win-x86
|
||||||
id: upload-win-x86
|
id: upload-win-x86
|
||||||
uses: actions/upload-release-asset@master
|
uses: actions/upload-release-asset@master
|
||||||
@@ -67,7 +67,7 @@ jobs:
|
|||||||
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
||||||
bucket: ide-qbcode
|
bucket: ide-qbcode
|
||||||
asset-path: ./public/publish-zip/linker-win-x64.zip
|
asset-path: ./public/publish-zip/linker-win-x64.zip
|
||||||
target-path: /downloads/linker/v1.6.2/linker-win-x64.zip
|
target-path: /downloads/linker/v1.6.3/linker-win-x64.zip
|
||||||
- name: upload-win-x64
|
- name: upload-win-x64
|
||||||
id: upload-win-x64
|
id: upload-win-x64
|
||||||
uses: actions/upload-release-asset@master
|
uses: actions/upload-release-asset@master
|
||||||
@@ -87,7 +87,7 @@ jobs:
|
|||||||
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
||||||
bucket: ide-qbcode
|
bucket: ide-qbcode
|
||||||
asset-path: ./public/publish-zip/linker-win-arm64.zip
|
asset-path: ./public/publish-zip/linker-win-arm64.zip
|
||||||
target-path: /downloads/linker/v1.6.2/linker-win-arm64.zip
|
target-path: /downloads/linker/v1.6.3/linker-win-arm64.zip
|
||||||
- name: upload-win-arm64
|
- name: upload-win-arm64
|
||||||
id: upload-win-arm64
|
id: upload-win-arm64
|
||||||
uses: actions/upload-release-asset@master
|
uses: actions/upload-release-asset@master
|
||||||
@@ -107,7 +107,7 @@ jobs:
|
|||||||
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
||||||
bucket: ide-qbcode
|
bucket: ide-qbcode
|
||||||
asset-path: ./public/publish-zip/linker-linux-x64.zip
|
asset-path: ./public/publish-zip/linker-linux-x64.zip
|
||||||
target-path: /downloads/linker/v1.6.2/linker-linux-x64.zip
|
target-path: /downloads/linker/v1.6.3/linker-linux-x64.zip
|
||||||
- name: upload-linux-x64
|
- name: upload-linux-x64
|
||||||
id: upload-linux-x64
|
id: upload-linux-x64
|
||||||
uses: actions/upload-release-asset@master
|
uses: actions/upload-release-asset@master
|
||||||
@@ -127,7 +127,7 @@ jobs:
|
|||||||
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
||||||
bucket: ide-qbcode
|
bucket: ide-qbcode
|
||||||
asset-path: ./public/publish-zip/linker-linux-arm.zip
|
asset-path: ./public/publish-zip/linker-linux-arm.zip
|
||||||
target-path: /downloads/linker/v1.6.2/linker-linux-arm.zip
|
target-path: /downloads/linker/v1.6.3/linker-linux-arm.zip
|
||||||
- name: upload-linux-arm
|
- name: upload-linux-arm
|
||||||
id: upload-linux-arm
|
id: upload-linux-arm
|
||||||
uses: actions/upload-release-asset@master
|
uses: actions/upload-release-asset@master
|
||||||
@@ -147,7 +147,7 @@ jobs:
|
|||||||
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
||||||
bucket: ide-qbcode
|
bucket: ide-qbcode
|
||||||
asset-path: ./public/publish-zip/linker-linux-arm64.zip
|
asset-path: ./public/publish-zip/linker-linux-arm64.zip
|
||||||
target-path: /downloads/linker/v1.6.2/linker-linux-arm64.zip
|
target-path: /downloads/linker/v1.6.3/linker-linux-arm64.zip
|
||||||
- name: upload-linux-arm64
|
- name: upload-linux-arm64
|
||||||
id: upload-linux-arm64
|
id: upload-linux-arm64
|
||||||
uses: actions/upload-release-asset@master
|
uses: actions/upload-release-asset@master
|
||||||
@@ -167,7 +167,7 @@ jobs:
|
|||||||
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
||||||
bucket: ide-qbcode
|
bucket: ide-qbcode
|
||||||
asset-path: ./public/publish-zip/linker-linux-musl-x64.zip
|
asset-path: ./public/publish-zip/linker-linux-musl-x64.zip
|
||||||
target-path: /downloads/linker/v1.6.2/linker-linux-musl-x64.zip
|
target-path: /downloads/linker/v1.6.3/linker-linux-musl-x64.zip
|
||||||
- name: upload-linux-musl-x64
|
- name: upload-linux-musl-x64
|
||||||
id: upload-linux-musl-x64
|
id: upload-linux-musl-x64
|
||||||
uses: actions/upload-release-asset@master
|
uses: actions/upload-release-asset@master
|
||||||
@@ -187,7 +187,7 @@ jobs:
|
|||||||
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
||||||
bucket: ide-qbcode
|
bucket: ide-qbcode
|
||||||
asset-path: ./public/publish-zip/linker-linux-musl-arm.zip
|
asset-path: ./public/publish-zip/linker-linux-musl-arm.zip
|
||||||
target-path: /downloads/linker/v1.6.2/linker-linux-musl-arm.zip
|
target-path: /downloads/linker/v1.6.3/linker-linux-musl-arm.zip
|
||||||
- name: upload-linux-musl-arm
|
- name: upload-linux-musl-arm
|
||||||
id: upload-linux-musl-arm
|
id: upload-linux-musl-arm
|
||||||
uses: actions/upload-release-asset@master
|
uses: actions/upload-release-asset@master
|
||||||
@@ -207,7 +207,7 @@ jobs:
|
|||||||
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
||||||
bucket: ide-qbcode
|
bucket: ide-qbcode
|
||||||
asset-path: ./public/publish-zip/linker-linux-musl-arm64.zip
|
asset-path: ./public/publish-zip/linker-linux-musl-arm64.zip
|
||||||
target-path: /downloads/linker/v1.6.2/linker-linux-musl-arm64.zip
|
target-path: /downloads/linker/v1.6.3/linker-linux-musl-arm64.zip
|
||||||
- name: upload-linux-musl-arm64
|
- name: upload-linux-musl-arm64
|
||||||
id: upload-linux-musl-arm64
|
id: upload-linux-musl-arm64
|
||||||
uses: actions/upload-release-asset@master
|
uses: actions/upload-release-asset@master
|
||||||
@@ -227,7 +227,7 @@ jobs:
|
|||||||
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
||||||
bucket: ide-qbcode
|
bucket: ide-qbcode
|
||||||
asset-path: ./public/publish-zip/linker-osx-x64.zip
|
asset-path: ./public/publish-zip/linker-osx-x64.zip
|
||||||
target-path: /downloads/linker/v1.6.2/linker-osx-x64.zip
|
target-path: /downloads/linker/v1.6.3/linker-osx-x64.zip
|
||||||
- name: upload-osx-x64
|
- name: upload-osx-x64
|
||||||
id: upload-osx-x64
|
id: upload-osx-x64
|
||||||
uses: actions/upload-release-asset@master
|
uses: actions/upload-release-asset@master
|
||||||
@@ -247,7 +247,7 @@ jobs:
|
|||||||
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
||||||
bucket: ide-qbcode
|
bucket: ide-qbcode
|
||||||
asset-path: ./public/publish-zip/linker-osx-arm64.zip
|
asset-path: ./public/publish-zip/linker-osx-arm64.zip
|
||||||
target-path: /downloads/linker/v1.6.2/linker-osx-arm64.zip
|
target-path: /downloads/linker/v1.6.3/linker-osx-arm64.zip
|
||||||
- name: upload-osx-arm64
|
- name: upload-osx-arm64
|
||||||
id: upload-osx-arm64
|
id: upload-osx-arm64
|
||||||
uses: actions/upload-release-asset@master
|
uses: actions/upload-release-asset@master
|
||||||
@@ -277,7 +277,7 @@ jobs:
|
|||||||
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
|
||||||
bucket: ide-qbcode
|
bucket: ide-qbcode
|
||||||
asset-path: ./public/publish-zip/linker-windows-route.zip
|
asset-path: ./public/publish-zip/linker-windows-route.zip
|
||||||
target-path: /downloads/linker/v1.6.2/linker-windows-route.zip
|
target-path: /downloads/linker/v1.6.3/linker-windows-route.zip
|
||||||
- name: upload-version-oss
|
- name: upload-version-oss
|
||||||
id: upload-version-oss
|
id: upload-version-oss
|
||||||
uses: tvrcgo/oss-action@v0.1.1
|
uses: tvrcgo/oss-action@v0.1.1
|
||||||
|
|||||||
6
.github/workflows/nuget.yml
vendored
6
.github/workflows/nuget.yml
vendored
@@ -38,6 +38,6 @@ jobs:
|
|||||||
|
|
||||||
- name: Push
|
- name: Push
|
||||||
run: |
|
run: |
|
||||||
nuget push ./linker.tunnel/bin/release/linker.tunnel.1.6.2.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
|
nuget push ./linker.tunnel/bin/release/linker.tunnel.1.6.3.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
|
||||||
nuget push ./linker.libs/bin/release/linker.libs.1.6.2.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
|
nuget push ./linker.libs/bin/release/linker.libs.1.6.3.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
|
||||||
nuget push ./linker.tun/bin/release/linker.tun.1.6.2.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
|
nuget push ./linker.tun/bin/release/linker.tun.1.6.3.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
|
||||||
|
|||||||
@@ -14,9 +14,9 @@
|
|||||||
<Copyright>snltty</Copyright>
|
<Copyright>snltty</Copyright>
|
||||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||||
<Version>1.6.2</Version>
|
<Version>1.6.3</Version>
|
||||||
<AssemblyVersion>1.6.2</AssemblyVersion>
|
<AssemblyVersion>1.6.3</AssemblyVersion>
|
||||||
<FileVersion>1.6.2</FileVersion>
|
<FileVersion>1.6.3</FileVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<project ver="10" name="linker.tray.win" libEmbed="true" icon="..\linker\favicon.ico" ui="win" output="linker.tray.win.exe" CompanyName="snltty" FileDescription="linker.tray.win" LegalCopyright="Copyright (C) snltty 2024" ProductName="linker.tray.win" InternalName="linker.install.win" FileVersion="0.0.0.183" ProductVersion="0.0.0.183" publishDir="/dist/" dstrip="false" local="false" ignored="false">
|
<project ver="10" name="linker.tray.win" libEmbed="true" icon="..\linker\favicon.ico" ui="win" output="linker.tray.win.exe" CompanyName="snltty" FileDescription="linker.tray.win" LegalCopyright="Copyright (C) snltty 2024" ProductName="linker.tray.win" InternalName="linker.install.win" FileVersion="0.0.0.184" ProductVersion="0.0.0.184" publishDir="/dist/" dstrip="false" local="false" ignored="false">
|
||||||
<file name="main.aardio" path="main.aardio" comment="main.aardio"/>
|
<file name="main.aardio" path="main.aardio" comment="main.aardio"/>
|
||||||
<folder name="资源文件" path="res" embed="true" local="false" ignored="false">
|
<folder name="资源文件" path="res" embed="true" local="false" ignored="false">
|
||||||
<file name="favicon.ico" path="res\favicon.ico" comment="res\favicon.ico"/>
|
<file name="favicon.ico" path="res\favicon.ico" comment="res\favicon.ico"/>
|
||||||
|
|||||||
BIN
linker.tray.win/dist/linker.tray.win.exe
vendored
BIN
linker.tray.win/dist/linker.tray.win.exe
vendored
Binary file not shown.
@@ -54,6 +54,11 @@ namespace linker.tun
|
|||||||
public void RemoveNat(out string error);
|
public void RemoveNat(out string error);
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取端口转发
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<LinkerTunDeviceForwardItem> GetForward();
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 添加端口转发
|
/// 添加端口转发
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -117,6 +122,17 @@ namespace linker.tun
|
|||||||
|
|
||||||
public string Key => $"{ListenAddr}:{ListenPort}->{ConnectAddr}:{ConnectPort}";
|
public string Key => $"{ListenAddr}:{ListenPort}->{ConnectAddr}:{ConnectPort}";
|
||||||
}
|
}
|
||||||
|
public sealed class LinkerTunDeviceForwardItemComparer : IEqualityComparer<LinkerTunDeviceForwardItem>
|
||||||
|
{
|
||||||
|
public bool Equals(LinkerTunDeviceForwardItem x, LinkerTunDeviceForwardItem y)
|
||||||
|
{
|
||||||
|
return x.ListenPort == y.ListenPort && x.ConnectAddr.Equals(y.ConnectAddr) && x.ConnectPort == y.ConnectPort;
|
||||||
|
}
|
||||||
|
public int GetHashCode(LinkerTunDeviceForwardItem obj)
|
||||||
|
{
|
||||||
|
return obj.ListenPort.GetHashCode() ^ obj.ConnectAddr.GetHashCode() ^ obj.ConnectPort;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 数据包
|
/// 数据包
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using linker.libs.extends;
|
|||||||
using Microsoft.Win32.SafeHandles;
|
using Microsoft.Win32.SafeHandles;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace linker.tun
|
namespace linker.tun
|
||||||
{
|
{
|
||||||
@@ -188,7 +189,20 @@ namespace linker.tun
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<LinkerTunDeviceForwardItem> GetForward()
|
||||||
|
{
|
||||||
|
string str = CommandHelper.Linux(string.Empty, new string[] { $"iptables -t nat -L PREROUTING" });
|
||||||
|
IEnumerable<LinkerTunDeviceForwardItem> lines = str.Split(Environment.NewLine)
|
||||||
|
.Select(c => Regex.Replace(c, @"\s+", " ").Split(' '))
|
||||||
|
.Where(c => c.Length > 0 && c[0] == "DNAT" && c[1] == "tcp")
|
||||||
|
.Select(c =>
|
||||||
|
{
|
||||||
|
IPEndPoint dist = IPEndPoint.Parse(c[^1].Replace("to:", ""));
|
||||||
|
int port = int.Parse(c[^2].Replace("dpt:", ""));
|
||||||
|
return new LinkerTunDeviceForwardItem { ListenAddr=IPAddress.Any, ListenPort=port, ConnectAddr=dist.Address, ConnectPort=dist.Port };
|
||||||
|
});
|
||||||
|
return lines.ToList();
|
||||||
|
}
|
||||||
public void AddForward(List<LinkerTunDeviceForwardItem> forwards)
|
public void AddForward(List<LinkerTunDeviceForwardItem> forwards)
|
||||||
{
|
{
|
||||||
string[] commands = forwards.Where(c => c != null && c.Enable).SelectMany(c =>
|
string[] commands = forwards.Where(c => c != null && c.Enable).SelectMany(c =>
|
||||||
|
|||||||
@@ -112,6 +112,10 @@ namespace linker.tun
|
|||||||
error = string.Empty;
|
error = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<LinkerTunDeviceForwardItem> GetForward()
|
||||||
|
{
|
||||||
|
return new List<LinkerTunDeviceForwardItem>();
|
||||||
|
}
|
||||||
public void AddForward(List<LinkerTunDeviceForwardItem> forwards)
|
public void AddForward(List<LinkerTunDeviceForwardItem> forwards)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,6 +155,14 @@ namespace linker.tun
|
|||||||
linkerTunDevice?.RemoveNat(out string error);
|
linkerTunDevice?.RemoveNat(out string error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取端口转发
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<LinkerTunDeviceForwardItem> GetForward()
|
||||||
|
{
|
||||||
|
return linkerTunDevice?.GetForward() ?? [];
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 添加端口转发
|
/// 添加端口转发
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ using System.Net;
|
|||||||
using System.Net.NetworkInformation;
|
using System.Net.NetworkInformation;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Runtime.Versioning;
|
using System.Runtime.Versioning;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace linker.tun
|
namespace linker.tun
|
||||||
{
|
{
|
||||||
@@ -192,6 +193,20 @@ namespace linker.tun
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public List<LinkerTunDeviceForwardItem> GetForward()
|
||||||
|
{
|
||||||
|
string str = CommandHelper.Windows(string.Empty, new string[] { $"netsh interface portproxy show v4tov4" });
|
||||||
|
IEnumerable<LinkerTunDeviceForwardItem> lines = str.Split(Environment.NewLine)
|
||||||
|
.Select(c => Regex.Replace(c, @"\s+", " ").Split(' '))
|
||||||
|
.Where(c => c.Length > 0 && c[0] == "0.0.0.0")
|
||||||
|
.Select(c =>
|
||||||
|
{
|
||||||
|
IPEndPoint dist = IPEndPoint.Parse($"{c[2]}:{c[3]}");
|
||||||
|
int port = int.Parse(c[1]);
|
||||||
|
return new LinkerTunDeviceForwardItem { ListenAddr = IPAddress.Any, ListenPort = port, ConnectAddr = dist.Address, ConnectPort = dist.Port };
|
||||||
|
});
|
||||||
|
return lines.ToList();
|
||||||
|
}
|
||||||
public void AddForward(List<LinkerTunDeviceForwardItem> forwards)
|
public void AddForward(List<LinkerTunDeviceForwardItem> forwards)
|
||||||
{
|
{
|
||||||
string[] commands = forwards.Where(c => c != null && c.Enable).Select(c =>
|
string[] commands = forwards.Where(c => c != null && c.Enable).Select(c =>
|
||||||
|
|||||||
@@ -16,9 +16,9 @@
|
|||||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||||
<PackageReleaseNotes>linker tun</PackageReleaseNotes>
|
<PackageReleaseNotes>linker tun</PackageReleaseNotes>
|
||||||
<Version>1.6.2</Version>
|
<Version>1.6.3</Version>
|
||||||
<AssemblyVersion>1.6.2</AssemblyVersion>
|
<AssemblyVersion>1.6.3</AssemblyVersion>
|
||||||
<FileVersion>1.6.2</FileVersion>
|
<FileVersion>1.6.3</FileVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
|
|||||||
@@ -16,9 +16,9 @@
|
|||||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||||
<PackageReleaseNotes>linker tunnel</PackageReleaseNotes>
|
<PackageReleaseNotes>linker tunnel</PackageReleaseNotes>
|
||||||
<Version>1.6.2</Version>
|
<Version>1.6.3</Version>
|
||||||
<AssemblyVersion>1.6.2</AssemblyVersion>
|
<AssemblyVersion>1.6.3</AssemblyVersion>
|
||||||
<FileVersion>1.6.2</FileVersion>
|
<FileVersion>1.6.3</FileVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
|
|||||||
@@ -21,16 +21,18 @@
|
|||||||
<Title>linker</Title>
|
<Title>linker</Title>
|
||||||
<Authors>snltty</Authors>
|
<Authors>snltty</Authors>
|
||||||
<Company>snltty</Company>
|
<Company>snltty</Company>
|
||||||
<Description>1. 修复UI
|
<Description>1. 优化UI,显示网络计算IP数
|
||||||
2. 修复服务端重启无法关闭内网穿透的问题
|
2. 修复内网穿透不停止直接删除导致的无法再次添加的问题
|
||||||
3. 修复网络掩码计算错误</Description>
|
3. 优化网卡的端口转发
|
||||||
|
4. 修复网络掩码计算错误
|
||||||
|
5. 测试中,不要更,不要更,不要更</Description>
|
||||||
<Copyright>snltty</Copyright>
|
<Copyright>snltty</Copyright>
|
||||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||||
<PackageReleaseNotes>linker</PackageReleaseNotes>
|
<PackageReleaseNotes>linker</PackageReleaseNotes>
|
||||||
<Version>1.6.2</Version>
|
<Version>1.6.3</Version>
|
||||||
<AssemblyVersion>1.6.2</AssemblyVersion>
|
<AssemblyVersion>1.6.3</AssemblyVersion>
|
||||||
<FileVersion>1.6.2</FileVersion>
|
<FileVersion>1.6.3</FileVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -35,8 +35,6 @@ namespace linker.plugins.forward
|
|||||||
this.messengerSender = messengerSender;
|
this.messengerSender = messengerSender;
|
||||||
|
|
||||||
clientSignInState.NetworkEnabledHandle += Reset;
|
clientSignInState.NetworkEnabledHandle += Reset;
|
||||||
CheckTask();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Memory<byte> GetData()
|
public Memory<byte> GetData()
|
||||||
@@ -97,23 +95,7 @@ namespace linker.plugins.forward
|
|||||||
Start(false);
|
Start(false);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
private void CheckTask()
|
|
||||||
{
|
|
||||||
TimerHelper.SetInterval(() =>
|
|
||||||
{
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
var items = running.Data.Forwards
|
|
||||||
.Where(c => c.GroupId == fileConfig.Data.Client.Group.Id)
|
|
||||||
.Where(c => c.Started && c.Proxy == false && string.IsNullOrWhiteSpace(c.Msg) == false);
|
|
||||||
foreach (var item in items)
|
|
||||||
{
|
|
||||||
Start(item, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}, 30000);
|
|
||||||
}
|
|
||||||
private void Start(bool errorStop = true)
|
private void Start(bool errorStop = true)
|
||||||
{
|
{
|
||||||
lock (this)
|
lock (this)
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ namespace linker.plugins.forward.proxy
|
|||||||
{
|
{
|
||||||
IPEndPoint _localEndPoint = ep;
|
IPEndPoint _localEndPoint = ep;
|
||||||
socket = new Socket(_localEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
|
socket = new Socket(_localEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
|
||||||
socket.IPv6Only(_localEndPoint.AddressFamily, false);
|
//socket.IPv6Only(_localEndPoint.AddressFamily, false);
|
||||||
socket.ReuseBind(_localEndPoint);
|
//socket.ReuseBind(_localEndPoint);
|
||||||
socket.Listen(int.MaxValue);
|
socket.Listen(int.MaxValue);
|
||||||
|
|
||||||
LocalEndpoint = socket.LocalEndPoint as IPEndPoint;
|
LocalEndpoint = socket.LocalEndPoint as IPEndPoint;
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ namespace linker.plugins.sforward.proxy
|
|||||||
{
|
{
|
||||||
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, port);
|
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, port);
|
||||||
Socket socket = new Socket(localEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
|
Socket socket = new Socket(localEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
|
||||||
socket.IPv6Only(localEndPoint.AddressFamily, false);
|
//socket.IPv6Only(localEndPoint.AddressFamily, false);
|
||||||
socket.ReuseBind(localEndPoint);
|
//socket.ReuseBind(localEndPoint);
|
||||||
socket.Listen(int.MaxValue);
|
socket.Listen(int.MaxValue);
|
||||||
AsyncUserToken userToken = new AsyncUserToken
|
AsyncUserToken userToken = new AsyncUserToken
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
using linker.libs;
|
using linker.libs;
|
||||||
using linker.libs.extends;
|
using linker.libs.extends;
|
||||||
using System;
|
|
||||||
using System.Buffers;
|
using System.Buffers;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ using linker.tun;
|
|||||||
using linker.plugins.tuntap.lease;
|
using linker.plugins.tuntap.lease;
|
||||||
using linker.plugins.decenter;
|
using linker.plugins.decenter;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
using linker.libs.extends;
|
||||||
|
|
||||||
namespace linker.plugins.tuntap
|
namespace linker.plugins.tuntap
|
||||||
{
|
{
|
||||||
@@ -296,26 +297,14 @@ namespace linker.plugins.tuntap
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void AddForward()
|
private void AddForward()
|
||||||
{
|
{
|
||||||
string oldStr = string.Join(",", forwardItems.Select(c => c.Key));
|
|
||||||
var temp = ParseForwardItems();
|
var temp = ParseForwardItems();
|
||||||
var newStr = string.Join(",", temp.Select(c => c.Key));
|
var removes = forwardItems.Except(temp, new LinkerTunDeviceForwardItemComparer());
|
||||||
|
if (removes.Any())
|
||||||
if (oldStr != newStr)
|
|
||||||
{
|
{
|
||||||
DeleteForward();
|
tuntapTransfer.RemoveForward(removes.ToList());
|
||||||
forwardItems = temp;
|
|
||||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
|
||||||
LoggerHelper.Instance.Debug($"add forward : {newStr}");
|
|
||||||
tuntapTransfer.AddForward(forwardItems);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
|
||||||
{
|
|
||||||
LoggerHelper.Instance.Debug($"tuntap forward unchanged old : {oldStr}");
|
|
||||||
LoggerHelper.Instance.Debug($"tuntap forward unchanged new : {newStr}");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
forwardItems = temp;
|
||||||
|
tuntapTransfer.AddForward(forwardItems);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 删除端口转发
|
/// 删除端口转发
|
||||||
|
|||||||
@@ -75,20 +75,6 @@ namespace linker.plugins.tuntap
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task Closed(ITunnelConnection connection, object state)
|
public async Task Closed(ITunnelConnection connection, object state)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
bool online = await clientSignInTransfer.GetOnline(connection.RemoteMachineId);
|
|
||||||
if (online == false)
|
|
||||||
{
|
|
||||||
|
|
||||||
foreach (var item in ip2MachineDic.Where(c => c.Value == connection.RemoteMachineId).Select(c => c.Key).ToList())
|
|
||||||
{
|
|
||||||
ip2MachineDic.TryRemove(item, out string str);
|
|
||||||
ipConnections.TryRemove(item, out ITunnelConnection con);
|
|
||||||
ipRefreshCache.Remove(item);
|
|
||||||
}
|
|
||||||
RefreshConfig();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
RefreshConfig();
|
RefreshConfig();
|
||||||
Version.Add();
|
Version.Add();
|
||||||
await Task.CompletedTask;
|
await Task.CompletedTask;
|
||||||
|
|||||||
@@ -33,16 +33,16 @@ do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
cd public/publish/docker/linux-${p}-x64/${f}
|
cd public/publish/docker/linux-${p}-x64/${f}
|
||||||
docker buildx build -f ${target}/public/publish/docker/linux-${p}-x64/${f}/Dockerfile-${p} --platform="linux/x86_64" --force-rm -t "${image}-${p}-x64:latest" -t "${image}-${p}-x64:v1.6.2" . --push
|
docker buildx build -f ${target}/public/publish/docker/linux-${p}-x64/${f}/Dockerfile-${p} --platform="linux/x86_64" --force-rm -t "${image}-${p}-x64:latest" -t "${image}-${p}-x64:v1.6.3" . --push
|
||||||
cd ../../../../../
|
cd ../../../../../
|
||||||
|
|
||||||
|
|
||||||
cd public/publish/docker/linux-${p}-arm64/${f}
|
cd public/publish/docker/linux-${p}-arm64/${f}
|
||||||
docker buildx build -f ${target}/public/publish/docker/linux-${p}-arm64/${f}/Dockerfile-${p} --platform="linux/arm64" --force-rm -t "${image}-${p}-arm64:latest" -t "${image}-${p}-arm64:v1.6.2" . --push
|
docker buildx build -f ${target}/public/publish/docker/linux-${p}-arm64/${f}/Dockerfile-${p} --platform="linux/arm64" --force-rm -t "${image}-${p}-arm64:latest" -t "${image}-${p}-arm64:v1.6.3" . --push
|
||||||
cd ../../../../../
|
cd ../../../../../
|
||||||
|
|
||||||
cd public/publish/docker/linux-${p}-arm/${f}
|
cd public/publish/docker/linux-${p}-arm/${f}
|
||||||
docker buildx build -f ${target}/public/publish/docker/linux-${p}-arm/${f}/Dockerfile-${p} --platform="linux/arm/v7" --force-rm -t "${image}-${p}-arm:latest" -t "${image}-${p}-arm:v1.6.2" . --push
|
docker buildx build -f ${target}/public/publish/docker/linux-${p}-arm/${f}/Dockerfile-${p} --platform="linux/arm/v7" --force-rm -t "${image}-${p}-arm:latest" -t "${image}-${p}-arm:v1.6.3" . --push
|
||||||
cd ../../../../../
|
cd ../../../../../
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
12
version.txt
12
version.txt
@@ -1,5 +1,7 @@
|
|||||||
v1.6.2
|
v1.6.3
|
||||||
2024-12-09 00:49:52
|
2024-12-09 14:29:54
|
||||||
1. 修复UI
|
1. 优化UI,显示网络计算IP数
|
||||||
2. 修复服务端重启无法关闭内网穿透的问题
|
2. 修复内网穿透不停止直接删除导致的无法再次添加的问题
|
||||||
3. 修复网络掩码计算错误
|
3. 优化网卡的端口转发
|
||||||
|
4. 修复网络掩码计算错误
|
||||||
|
5. 测试中,不要更,不要更,不要更
|
||||||
Reference in New Issue
Block a user