This commit is contained in:
snltty
2025-05-02 18:12:34 +08:00
parent 0f0fd1bc8f
commit b34c280407
49 changed files with 164 additions and 110 deletions

View File

@@ -37,7 +37,7 @@ jobs:
release_name: v1.7.7.${{ steps.date.outputs.today }} release_name: v1.7.7.${{ steps.date.outputs.today }}
draft: false draft: false
prerelease: false prerelease: false
body: "1. 一些累计更新\r\n2. 优化ssl证书兼容安卓\r\n3. 打洞和中继优化显示loading增加手动尝试打洞\r\n5. 修改入参格式,增加虚拟网卡设置\r\n5. 如果你设备很多,请尝试升级其中一个成功重启后再升级其它" body: "1. 一些累计更新\r\n2. 优化ssl证书兼容安卓\r\n3. 打洞和中继优化显示loading增加手动尝试打洞\r\n5. 修改入参格式,增加虚拟网卡设置\r\n6. 修复优化了网对网路由工具\r\n7. 如果你设备很多,请尝试升级其中一个成功重启后再升级其它"
- name: publish projects - name: publish projects
run: ./publish.bat "C:\\Android\\android-sdk" run: ./publish.bat "C:\\Android\\android-sdk"
- name: upload-win-x86-oss - name: upload-win-x86-oss

View File

@@ -0,0 +1,25 @@
---
sidebar_position: 11
---
# 11、傻瓜特别版共享局域网
:::tip[说明]
### 共享端
1. 填写服务器信息
2. 可以选择一下你被访问的内网网段,然后开去共享,等变成绿色可用了,连接端就可以访问了
3. 可以复制`共享密钥`去别的地方运行比如在linux下`./linker base64`这样子
4. 可以复制`连接密钥`去给连接端使用
![Docusaurus Plushie](./img/share-server.jpg)
### 连接端
1. 添加一下从共享端得到的`连接密钥`密钥,选择密钥,然后开启连接,等变成绿色就可以使用了
![Docusaurus Plushie](./img/share-connect.jpg)
![Docusaurus Plushie](./img/share-ping.jpg)
:::

View File

@@ -0,0 +1,27 @@
---
sidebar_position: 11
---
# 2.11、特别说明ikuai
:::tip[ikuai特别说明]
1. 在ikuai的WebUI上创建docker容器无法设置权限和添加设备可能无法使用虚拟网卡
2. 我们需要对ikuai做一些操作然后进入ssh去创建docker容器
在操作前进入ssh是这样的
![](./img/ikuai-ssh1.jpg)
先下载 <a href="/update-20241130.bin" target="_blank">update-20241130.bin</a><a href="/iKuai-3.7.16-base.bin" target="_blank">iKuai-3.7.16-base.bin</a>如果ikuai版本不是`3.7.16`,还需要先升级为`3.7.16`
然后依次上传`iKuai-3.7.16-base.bin`升级,重启,再上传`update-20241130.bin`升级,重启
![](./img/ikuai.jpg)
然后再连接ssh就可以了然后就可以看`2.3、安装方法docker`说明去使用docker了
![](./img/ikuai-ssh2.jpg)
:::

View File

@@ -2,7 +2,7 @@
sidebar_position: 9 sidebar_position: 9
--- ---
# 2.9、初始化配置4三方入参调用) # 2.9、初始化配置4入参调用
## 1、使用参数初始化 ## 1、使用参数初始化

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

View File

@@ -1,8 +1,8 @@
--- ---
sidebar_position: 11 sidebar_position: 7
--- ---
# 11、关于app # 7、关于app
:::danger[1、ios] :::danger[1、ios]
1. 我没有iPhone没有Mac没有开发者账号 1. 我没有iPhone没有Mac没有开发者账号

View File

@@ -1,13 +0,0 @@
---
sidebar_position: 7
---
# 7、自己发布
你可以自己发布项目,因为涉及到很多内容,所以建议使用脚本发布
1. 安装 <a href="https://nodejs.org/en/download/package-manager">Nodejs https://nodejs.org/en/download/package-manager</a>
2. 安装 <a href="https://dotnet.microsoft.com/zh-cn/download">.NET8.0 SDK https://dotnet.microsoft.com/zh-cn/download</a> 或者安装 <a href="https://visualstudio.microsoft.com/zh-hans/vs/">vs2022 https://visualstudio.microsoft.com/zh-hans/vs/</a>
3. 发布项目自动压缩,所以你需要安装 <a href="https://www.7-zip.org/">7zip https://www.7-zip.org/</a>
4.`cmd`或者`PowerShell`下运行根目录下`publish.bat`,等待发布完成
5. 发布完成后,在根目录下,`public`>`publish``public`>`publish-zip`

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

View File

@@ -121,7 +121,7 @@ namespace linker.messenger.signin
clientSignInState.PushSignInSuccess(); clientSignInState.PushSignInSuccess();
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) //if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Info($"push signin success"); LoggerHelper.Instance.Info($"push signin success");
GCHelper.FlushMemory(); GCHelper.FlushMemory();

View File

@@ -43,6 +43,56 @@ namespace linker.messenger.tuntap
} }
public static ServiceProvider UseTuntapClient(this ServiceProvider serviceProvider, Dictionary<string, string> configDic) public static ServiceProvider UseTuntapClient(this ServiceProvider serviceProvider, Dictionary<string, string> configDic)
{ {
if (configDic.TryGetValue("Tuntap", out string value))
{
ITuntapClientStore tuntapClientStore = serviceProvider.GetService<ITuntapClientStore>();
ILeaseClientStore leaseClientStore = serviceProvider.GetService<ILeaseClientStore>();
ISignInClientStore signInClientStore = serviceProvider.GetService<ISignInClientStore>();
try
{
JsonElement doc = JsonDocument.Parse(value).RootElement;
if (doc.TryGetProperty("IP", out JsonElement ip))
{
tuntapClientStore.Info.IP = IPAddress.Parse(ip.GetString());
}
if (doc.TryGetProperty("PrefixLength", out JsonElement prefixLength))
{
tuntapClientStore.Info.PrefixLength = prefixLength.GetByte();
}
if (doc.TryGetProperty("Lans", out JsonElement lans))
{
tuntapClientStore.Info.Lans = lans.GetRawText().DeJson<List<TuntapLanInfo>>();
}
if (doc.TryGetProperty("Name", out JsonElement name))
{
tuntapClientStore.Info.Name = name.GetString();
}
if (doc.TryGetProperty("Running", out JsonElement running))
{
tuntapClientStore.Info.Running = running.GetBoolean();
}
if (doc.TryGetProperty("Switch", out JsonElement _switch))
{
tuntapClientStore.Info.Switch = (TuntapSwitch)_switch.GetInt32();
}
if (doc.TryGetProperty("Forwards", out JsonElement forwards))
{
tuntapClientStore.Info.Forwards = forwards.GetRawText().DeJson<List<TuntapForwardInfo>>();
}
if (doc.TryGetProperty("Lease", out JsonElement lease))
{
leaseClientStore.Set(signInClientStore.Group.Id, lease.GetRawText().DeJson<LeaseInfo>());
}
}
catch (Exception ex)
{
LoggerHelper.Instance.Error(ex);
}
tuntapClientStore.Confirm();
leaseClientStore.Confirm();
}
TuntapProxy tuntapProxy = serviceProvider.GetService<TuntapProxy>(); TuntapProxy tuntapProxy = serviceProvider.GetService<TuntapProxy>();
TuntapTransfer tuntapTransfer = serviceProvider.GetService<TuntapTransfer>(); TuntapTransfer tuntapTransfer = serviceProvider.GetService<TuntapTransfer>();
@@ -69,53 +119,7 @@ namespace linker.messenger.tuntap
DecenterClientTransfer decenterClientTransfer = serviceProvider.GetService<DecenterClientTransfer>(); DecenterClientTransfer decenterClientTransfer = serviceProvider.GetService<DecenterClientTransfer>();
decenterClientTransfer.AddDecenters(new List<IDecenter> { serviceProvider.GetService<TuntapDecenter>() }); decenterClientTransfer.AddDecenters(new List<IDecenter> { serviceProvider.GetService<TuntapDecenter>() });
if (configDic.TryGetValue("Tuntap", out string base64))
{
ITuntapClientStore tuntapClientStore = serviceProvider.GetService<ITuntapClientStore>();
ILeaseClientStore leaseClientStore = serviceProvider.GetService<ILeaseClientStore>();
ISignInClientStore signInClientStore = serviceProvider.GetService<ISignInClientStore>();
try
{
JsonElement doc = JsonDocument.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(base64))).RootElement;
if (doc.TryGetProperty("IP", out JsonElement ip))
{
tuntapClientStore.Info.IP = IPAddress.Parse(ip.GetString());
}
if (doc.TryGetProperty("PrefixLength", out JsonElement prefixLength))
{
tuntapClientStore.Info.PrefixLength = prefixLength.GetByte();
}
if (doc.TryGetProperty("Lans", out JsonElement lans))
{
tuntapClientStore.Info.Lans = lans.GetString().DeJson<List<TuntapLanInfo>>();
}
if (doc.TryGetProperty("Name", out JsonElement name))
{
tuntapClientStore.Info.Name = name.GetString();
}
if (doc.TryGetProperty("Running", out JsonElement running))
{
tuntapClientStore.Info.Running = running.GetBoolean();
}
if (doc.TryGetProperty("Switch", out JsonElement _switch))
{
tuntapClientStore.Info.Switch = (TuntapSwitch)_switch.GetInt32();
}
if (doc.TryGetProperty("Forwards", out JsonElement forwards))
{
tuntapClientStore.Info.Forwards = forwards.GetString().DeJson<List<TuntapForwardInfo>>();
}
if (doc.TryGetProperty("Lease", out JsonElement lease))
{
leaseClientStore.Set(signInClientStore.Group.Id, lease.GetString().DeJson<LeaseInfo>());
}
}
catch (Exception ex)
{
LoggerHelper.Instance.Error(ex);
}
tuntapClientStore.Confirm();
}
return serviceProvider; return serviceProvider;
} }

View File

@@ -81,6 +81,10 @@ namespace linker.messenger.tuntap
} }
return new TuntabListInfo { HashCode = version }; return new TuntabListInfo { HashCode = version };
} }
public TuntapStatus Status(ApiControllerParamsInfo param)
{
return tuntapTransfer.Status;
}
/// <summary> /// <summary>
/// 刷新网卡信息 /// 刷新网卡信息
/// </summary> /// </summary>

View File

@@ -1,5 +1,6 @@
using System.Net; using System.Net;
using linker.libs; using linker.libs;
using linker.libs.extends;
using linker.libs.timer; using linker.libs.timer;
using linker.messenger.signin; using linker.messenger.signin;
using linker.messenger.tuntap.messenger; using linker.messenger.tuntap.messenger;
@@ -47,8 +48,13 @@ namespace linker.messenger.tuntap.lease
{ {
info = serializer.Deserialize<LeaseInfo>(resp.Data.Span); info = serializer.Deserialize<LeaseInfo>(resp.Data.Span);
} }
leaseClientStore.Set(signInClientStore.Group.Id, info);
leaseClientStore.Confirm(); if(info.IP.Equals(IPAddress.Any) == false)
{
leaseClientStore.Set(signInClientStore.Group.Id, info);
leaseClientStore.Confirm();
}
return info; return info;
} }
public async Task LeaseChange() public async Task LeaseChange()
@@ -82,27 +88,27 @@ namespace linker.messenger.tuntap.lease
private void LeaseExpTask() private void LeaseExpTask()
{ {
signInClientState.OnSignInSuccess += async (times) => signInClientState.OnSignInSuccess += (times) =>
{ {
try TimerHelper.Async(async () =>
{ {
LeaseInfo info = await GetNetwork(); try
if (info.IP.Equals(IPAddress.Any))
{ {
info = leaseClientStore.Get(signInClientStore.Group.Id); LeaseInfo info = await GetNetwork();
if (info != null && info.IP.Equals(IPAddress.Any) == false) if (info.IP.Equals(IPAddress.Any))
{ {
await AddNetwork(info); info = leaseClientStore.Get(signInClientStore.Group.Id);
if (info != null && info.IP.Equals(IPAddress.Any) == false)
{
await AddNetwork(info);
}
} }
} }
} catch (Exception ex)
catch (Exception ex)
{
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{ {
LoggerHelper.Instance.Error(ex); LoggerHelper.Instance.Error(ex);
} }
} });
}; };
TimerHelper.SetIntervalLong(async () => TimerHelper.SetIntervalLong(async () =>

View File

@@ -5,8 +5,6 @@ namespace linker.messenger.updater
{ {
public static class Entry public static class Entry
{ {
static bool added = false;
static bool used = false;
public static ServiceCollection AddUpdaterClient(this ServiceCollection serviceCollection) public static ServiceCollection AddUpdaterClient(this ServiceCollection serviceCollection)
{ {
serviceCollection.AddSingleton<UpdaterApiController>(); serviceCollection.AddSingleton<UpdaterApiController>();
@@ -56,12 +54,6 @@ namespace linker.messenger.updater
IMessengerResolver messengerResolver = serviceProvider.GetService<IMessengerResolver>(); IMessengerResolver messengerResolver = serviceProvider.GetService<IMessengerResolver>();
messengerResolver.AddMessenger(new List<IMessenger> { serviceProvider.GetService<UpdaterServerMessenger>() }); messengerResolver.AddMessenger(new List<IMessenger> { serviceProvider.GetService<UpdaterServerMessenger>() });
if (used == false)
{
used = true;
IUpdaterInstaller updaterInstaller = serviceProvider.GetService<IUpdaterInstaller>();
}
return serviceProvider; return serviceProvider;
} }
} }

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<project ver="10" name="linker.route.win" libEmbed="true" icon="res\favicon.ico" ui="win" output="linker.route.win.exe" CompanyName="snltty" FileDescription="linker.route.win" LegalCopyright="Copyright (C) snltty 2024" ProductName="linker.route.win" InternalName="linker.route.win" FileVersion="0.0.0.26" ProductVersion="0.0.0.26" publishDir="/dist/" dstrip="false"> <project ver="10" name="linker.route.win" libEmbed="true" icon="res\favicon.ico" ui="win" output="linker.route.win.exe" CompanyName="snltty" FileDescription="linker.route.win" LegalCopyright="Copyright (C) snltty 2024" ProductName="linker.route.win" InternalName="linker.route.win" FileVersion="0.0.0.27" ProductVersion="0.0.0.27" publishDir="/dist/" dstrip="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="Program.cs" path="res\Program.cs" comment="res\Program.cs"/> <file name="Program.cs" path="res\Program.cs" comment="res\Program.cs"/>

Binary file not shown.

View File

@@ -1,6 +1,7 @@
using linker.libs; using linker.libs;
using linker.libs.extends; using linker.libs.extends;
using linker.libs.timer; using linker.libs.timer;
using System;
using System.Buffers.Binary; using System.Buffers.Binary;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Net; using System.Net;
@@ -532,7 +533,7 @@ namespace linker.snat
/// <summary> /// <summary>
/// IPV4 包 /// IPV4 包
/// </summary> /// </summary>
unsafe struct IPV4Packet public unsafe struct IPV4Packet
{ {
byte* ptr; byte* ptr;
@@ -540,6 +541,9 @@ namespace linker.snat
/// 协议版本 /// 协议版本
/// </summary> /// </summary>
public ProtocolType Version => (ProtocolType)((*ptr >> 4) & 0b1111); public ProtocolType Version => (ProtocolType)((*ptr >> 4) & 0b1111);
public ProtocolType Protocol => (ProtocolType)(*(ptr + 9));
/// <summary> /// <summary>
/// 源地址 /// 源地址

View File

@@ -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.257" ProductVersion="0.0.0.257" 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.258" ProductVersion="0.0.0.258" 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"/>

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>linker.web</title><link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin=""/><script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script><script defer="defer" src="js/chunk-vendors.cfba5739.js"></script><script defer="defer" src="js/app.cbba0254.js"></script><link href="css/chunk-vendors.d8267b33.css" rel="stylesheet"><link href="css/app.09dcc3e8.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but linker.web doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html> <!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>linker.web</title><link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin=""/><script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script><script defer="defer" src="js/chunk-vendors.cfba5739.js"></script><script defer="defer" src="js/app.ee325789.js"></script><link href="css/chunk-vendors.d8267b33.css" rel="stylesheet"><link href="css/app.09dcc3e8.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but linker.web doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
"use strict";(self["webpackChunklinker_web"]=self["webpackChunklinker_web"]||[]).push([[239],{7332:function(e,n,a){a.r(n),a.d(n,{default:function(){return O}});var t=a(6768);const s={class:"net-wrap app-wrap"},l={class:"inner absolute flex flex-column flex-nowrap"},i={class:"head"},o={class:"body flex-1 relative"},c={class:"status"};function r(e,n,a,r,u,d){const g=(0,t.g2)("Head"),p=(0,t.g2)("List"),v=(0,t.g2)("Status");return(0,t.uX)(),(0,t.CE)("div",s,[(0,t.Lk)("div",l,[(0,t.Lk)("div",i,[(0,t.bF)(g)]),(0,t.Lk)("div",o,[(0,t.bF)(p)]),(0,t.Lk)("div",c,[(0,t.bF)(v,{config:!1})])])])}a(4114);var u=a(4232);const d=e=>((0,t.Qi)("data-v-6bfe19a3"),e=e(),(0,t.jt)(),e),g={class:"head-wrap"},p={class:"tools flex"},v={class:"label"},h=d((()=>(0,t.Lk)("span",{class:"flex-1"},null,-1))),f={style:{"margin-left":"1rem"}};function k(e,n,a,s,l,i){const o=(0,t.g2)("Refresh"),c=(0,t.g2)("el-icon"),r=(0,t.g2)("el-button"),d=(0,t.g2)("Background");return(0,t.uX)(),(0,t.CE)("div",g,[(0,t.Lk)("div",p,[(0,t.Lk)("span",v,"分组 : "+(0,u.v_)(s.state.group),1),h,(0,t.bF)(r,{size:"small",onClick:s.handleRefresh},{default:(0,t.k6)((()=>[(0,t.eW)(" 刷新(F5)"),(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(o)])),_:1})])),_:1},8,["onClick"]),(0,t.Lk)("div",f,[(0,t.bF)(d,{name:"net"})])])])}var C=a(3830),m=a(144),b=a(7477),L=a(5096),_={components:{Edit:b.ffu,Refresh:b.C42,Background:L.A},setup(){const e=(0,C.B)(),n=(0,m.Kh)({server:(0,t.EW)((()=>e.value.config.Client.Server.Host)),group:(0,t.EW)((()=>e.value.config.Client.Group.Name))}),a=()=>{window.location.reload()};return{state:n,handleRefresh:a}}},w=a(1241);const S=(0,w.A)(_,[["render",k],["__scopeId","data-v-6bfe19a3"]]);var F=S;const x=e=>((0,t.Qi)("data-v-68d1c30a"),e=e(),(0,t.jt)(),e),T={class:"net-list-wrap flex flex-column absolute"},z={class:"flex-1 scrollbar"},E={class:"flex"},A=x((()=>(0,t.Lk)("div",{class:"flex-1"},null,-1))),I={class:"tuntap"},P={class:"page t-c"},B={class:"page-wrap t-c"};function R(e,n,a,s,l,i){const o=(0,t.g2)("DeviceName"),c=(0,t.g2)("UpdaterBtn"),r=(0,t.g2)("TuntapShow"),u=(0,t.g2)("el-pagination");return(0,t.uX)(),(0,t.CE)("div",T,[(0,t.Lk)("div",z,[(0,t.Lk)("ul",null,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(s.devices.page.List,((e,n)=>((0,t.uX)(),(0,t.CE)("li",{key:n},[(0,t.Lk)("dl",null,[(0,t.Lk)("dt",E,[(0,t.Lk)("div",null,[(0,t.bF)(o,{item:e},null,8,["item"])]),A,(0,t.Lk)("div",null,[(0,t.bF)(c,{config:!1,item:e},null,8,["item"])])]),(0,t.Lk)("dd",I,[s.tuntap.list[e.MachineId]?((0,t.uX)(),(0,t.Wv)(r,{key:0,item:e},null,8,["item"])):(0,t.Q3)("",!0)])])])))),128))])]),(0,t.Lk)("div",P,[(0,t.Lk)("div",B,[(0,t.bF)(u,{size:"small",background:"",layout:"prev,pager, next","pager-count":5,total:s.devices.page.Count,"page-size":s.devices.page.Request.Size,"current-page":s.devices.page.Request.Page,onCurrentChange:s.handlePageChange,onSizeChange:s.handlePageSizeChange,"page-sizes":[10,20,50,100,255]},null,8,["total","page-size","current-page","onCurrentChange","onSizeChange"])])])])}var D=a(8104),X=a(7985),y=a(9383),N=a(7115),U=a(263),Q=a(3691),W=a(9983),H={components:{StarFilled:b.BQ2,UpdaterBtn:N.A,DeviceName:U.A,TuntapShow:Q.A},setup(e){(0,C.B)();const n=(0,m.Kh)({}),{devices:a,machineId:s,_getSignList:l,_getSignList1:i,handleDeviceEdit:o,handlePageChange:c,handlePageSizeChange:r,handleDel:u,clearDevicesTimeout:d}=(0,X.r)(),{tuntap:g,_getTuntapInfo:p,handleTuntapRefresh:v,clearTuntapTimeout:h,handleTuntapEdit:f,sortTuntapIP:k}=(0,D.O)(),{_getUpdater:b,_subscribeUpdater:L,clearUpdaterTimeout:_}=(0,y.d)(),{connections:w,forwardConnections:S,_getForwardConnections:F,tuntapConnections:x,_getTuntapConnections:T,socks5Connections:z,_getSocks5Connections:E,handleTunnelConnections:A,clearConnectionsTimeout:I}=(0,W.L2)();return(0,t.sV)((()=>{c(),v(),l(),i(),p(),b(),L()})),(0,t.hi)((()=>{d(),h(),_()})),{state:n,devices:a,machineId:s,handlePageChange:c,handlePageSizeChange:r,tuntap:g}}};const K=(0,w.A)(H,[["render",R],["__scopeId","data-v-68d1c30a"]]);var j=K,q=a(5317),M=a(1387),V={components:{Head:F,List:j,Status:q.A},setup(){document.addEventListener("contextmenu",(function(e){e.preventDefault()}));const e=(0,C.B)(),n=(0,M.rd)();return(0,t.sV)((()=>{0==e.value.hasAccess("NetManager")&&n.push({name:"NoPermission"})})),{}}};const G=(0,w.A)(V,[["render",r],["__scopeId","data-v-6a3f3b43"]]);var O=G}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
"use strict";(self["webpackChunklinker_web"]=self["webpackChunklinker_web"]||[]).push([[61],{7332:function(e,n,a){a.r(n),a.d(n,{default:function(){return O}});var t=a(6768);const s={class:"net-wrap app-wrap"},l={class:"inner absolute flex flex-column flex-nowrap"},i={class:"head"},o={class:"body flex-1 relative"},c={class:"status"};function r(e,n,a,r,u,d){const g=(0,t.g2)("Head"),p=(0,t.g2)("List"),v=(0,t.g2)("Status");return(0,t.uX)(),(0,t.CE)("div",s,[(0,t.Lk)("div",l,[(0,t.Lk)("div",i,[(0,t.bF)(g)]),(0,t.Lk)("div",o,[(0,t.bF)(p)]),(0,t.Lk)("div",c,[(0,t.bF)(v,{config:!1})])])])}a(4114);var u=a(4232);const d=e=>((0,t.Qi)("data-v-6bfe19a3"),e=e(),(0,t.jt)(),e),g={class:"head-wrap"},p={class:"tools flex"},v={class:"label"},h=d((()=>(0,t.Lk)("span",{class:"flex-1"},null,-1))),f={style:{"margin-left":"1rem"}};function k(e,n,a,s,l,i){const o=(0,t.g2)("Refresh"),c=(0,t.g2)("el-icon"),r=(0,t.g2)("el-button"),d=(0,t.g2)("Background");return(0,t.uX)(),(0,t.CE)("div",g,[(0,t.Lk)("div",p,[(0,t.Lk)("span",v,"分组 : "+(0,u.v_)(s.state.group),1),h,(0,t.bF)(r,{size:"small",onClick:s.handleRefresh},{default:(0,t.k6)((()=>[(0,t.eW)(" 刷新(F5)"),(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(o)])),_:1})])),_:1},8,["onClick"]),(0,t.Lk)("div",f,[(0,t.bF)(d,{name:"net"})])])])}var C=a(3830),m=a(144),b=a(7477),L=a(5096),_={components:{Edit:b.ffu,Refresh:b.C42,Background:L.A},setup(){const e=(0,C.B)(),n=(0,m.Kh)({server:(0,t.EW)((()=>e.value.config.Client.Server.Host)),group:(0,t.EW)((()=>e.value.config.Client.Group.Name))}),a=()=>{window.location.reload()};return{state:n,handleRefresh:a}}},w=a(1241);const S=(0,w.A)(_,[["render",k],["__scopeId","data-v-6bfe19a3"]]);var F=S;const x=e=>((0,t.Qi)("data-v-68d1c30a"),e=e(),(0,t.jt)(),e),T={class:"net-list-wrap flex flex-column absolute"},z={class:"flex-1 scrollbar"},E={class:"flex"},A=x((()=>(0,t.Lk)("div",{class:"flex-1"},null,-1))),I={class:"tuntap"},P={class:"page t-c"},B={class:"page-wrap t-c"};function R(e,n,a,s,l,i){const o=(0,t.g2)("DeviceName"),c=(0,t.g2)("UpdaterBtn"),r=(0,t.g2)("TuntapShow"),u=(0,t.g2)("el-pagination");return(0,t.uX)(),(0,t.CE)("div",T,[(0,t.Lk)("div",z,[(0,t.Lk)("ul",null,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(s.devices.page.List,((e,n)=>((0,t.uX)(),(0,t.CE)("li",{key:n},[(0,t.Lk)("dl",null,[(0,t.Lk)("dt",E,[(0,t.Lk)("div",null,[(0,t.bF)(o,{item:e},null,8,["item"])]),A,(0,t.Lk)("div",null,[(0,t.bF)(c,{config:!1,item:e},null,8,["item"])])]),(0,t.Lk)("dd",I,[s.tuntap.list[e.MachineId]?((0,t.uX)(),(0,t.Wv)(r,{key:0,item:e},null,8,["item"])):(0,t.Q3)("",!0)])])])))),128))])]),(0,t.Lk)("div",P,[(0,t.Lk)("div",B,[(0,t.bF)(u,{size:"small",background:"",layout:"prev,pager, next","pager-count":5,total:s.devices.page.Count,"page-size":s.devices.page.Request.Size,"current-page":s.devices.page.Request.Page,onCurrentChange:s.handlePageChange,onSizeChange:s.handlePageSizeChange,"page-sizes":[10,20,50,100,255]},null,8,["total","page-size","current-page","onCurrentChange","onSizeChange"])])])])}var D=a(8104),X=a(7985),y=a(9383),N=a(7115),U=a(263),Q=a(3694),W=a(9983),H={components:{StarFilled:b.BQ2,UpdaterBtn:N.A,DeviceName:U.A,TuntapShow:Q.A},setup(e){(0,C.B)();const n=(0,m.Kh)({}),{devices:a,machineId:s,_getSignList:l,_getSignList1:i,handleDeviceEdit:o,handlePageChange:c,handlePageSizeChange:r,handleDel:u,clearDevicesTimeout:d}=(0,X.r)(),{tuntap:g,_getTuntapInfo:p,handleTuntapRefresh:v,clearTuntapTimeout:h,handleTuntapEdit:f,sortTuntapIP:k}=(0,D.O)(),{_getUpdater:b,_subscribeUpdater:L,clearUpdaterTimeout:_}=(0,y.d)(),{connections:w,forwardConnections:S,_getForwardConnections:F,tuntapConnections:x,_getTuntapConnections:T,socks5Connections:z,_getSocks5Connections:E,handleTunnelConnections:A,clearConnectionsTimeout:I}=(0,W.L2)();return(0,t.sV)((()=>{c(),v(),l(),i(),p(),b(),L()})),(0,t.hi)((()=>{d(),h(),_()})),{state:n,devices:a,machineId:s,handlePageChange:c,handlePageSizeChange:r,tuntap:g}}};const K=(0,w.A)(H,[["render",R],["__scopeId","data-v-68d1c30a"]]);var j=K,q=a(718),M=a(1387),V={components:{Head:F,List:j,Status:q.A},setup(){document.addEventListener("contextmenu",(function(e){e.preventDefault()}));const e=(0,C.B)(),n=(0,M.rd)();return(0,t.sV)((()=>{0==e.value.hasAccess("NetManager")&&n.push({name:"NoPermission"})})),{}}};const G=(0,w.A)(V,[["render",r],["__scopeId","data-v-6a3f3b43"]]);var O=G}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,8 +1,10 @@
using linker.libs; using linker.libs;
using linker.libs.timer; using linker.libs.timer;
using linker.snat; using linker.snat;
using System.Linq;
using System.Net; using System.Net;
using static linker.snat.LinkerDstMapping; using static linker.snat.LinkerDstMapping;
using static linker.snat.LinkerSrcNat;
namespace linker.tun namespace linker.tun
{ {
@@ -320,7 +322,6 @@ namespace linker.tun
return linkerTunDevice.Write(buffer); return linkerTunDevice.Write(buffer);
} }
/// <summary> /// <summary>
/// 设置IP映射列表 /// 设置IP映射列表
/// </summary> /// </summary>

View File

@@ -3,6 +3,7 @@ using System.ServiceProcess;
using System.Diagnostics; using System.Diagnostics;
using linker.messenger.entry; using linker.messenger.entry;
using linker.libs.extends; using linker.libs.extends;
using System.Text;
namespace linker namespace linker
{ {
@@ -49,7 +50,7 @@ namespace linker
public static void Run(string[] args) public static void Run(string[] args)
{ {
LinkerMessengerEntry.Initialize(); LinkerMessengerEntry.Initialize();
LinkerMessengerEntry.Build(); LinkerMessengerEntry.Build();
@@ -70,10 +71,11 @@ namespace linker
Dictionary<string, string> configDic = new Dictionary<string, string>(); Dictionary<string, string> configDic = new Dictionary<string, string>();
try try
{ {
configDic = args[0].DeJson<Dictionary<string, string>>(); configDic = Encoding.UTF8.GetString(Convert.FromBase64String(args[0])).DeJson<Dictionary<string, string>>();
} }
catch (Exception) catch (Exception ex)
{ {
LoggerHelper.Instance.Error(ex);
} }
return configDic; return configDic;
} }

View File

@@ -24,7 +24,8 @@
2. 优化ssl证书兼容安卓 2. 优化ssl证书兼容安卓
3. 打洞和中继优化显示loading增加手动尝试打洞 3. 打洞和中继优化显示loading增加手动尝试打洞
5. 修改入参格式,增加虚拟网卡设置 5. 修改入参格式,增加虚拟网卡设置
5. 如果你设备很多,请尝试升级其中一个成功重启后再升级其它</Description> 6. 修复优化了网对网路由工具
7. 如果你设备很多,请尝试升级其中一个成功重启后再升级其它</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>

View File

@@ -1,7 +1,8 @@
v1.7.7 v1.7.7
2025-05-01 01:35:23 2025-05-02 18:12:34
1. 一些累计更新 1. 一些累计更新
2. 优化ssl证书兼容安卓 2. 优化ssl证书兼容安卓
3. 打洞和中继优化显示loading增加手动尝试打洞 3. 打洞和中继优化显示loading增加手动尝试打洞
5. 修改入参格式,增加虚拟网卡设置 5. 修改入参格式,增加虚拟网卡设置
5. 如果你设备很多,请尝试升级其中一个成功重启后再升级其它 6. 修复优化了网对网路由工具
7. 如果你设备很多,请尝试升级其中一个成功重启后再升级其它