mirror of
https://github.com/snltty/linker.git
synced 2025-09-27 05:25:57 +08:00
177
This commit is contained in:
2
.github/workflows/dotnet.yml
vendored
2
.github/workflows/dotnet.yml
vendored
@@ -37,7 +37,7 @@ jobs:
|
||||
release_name: v1.7.7.${{ steps.date.outputs.today }}
|
||||
draft: 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
|
||||
run: ./publish.bat "C:\\Android\\android-sdk"
|
||||
- name: upload-win-x86-oss
|
||||
|
25
src/linker.doc.web/docs/11、傻瓜特别版(共享局域网).md
Normal file
25
src/linker.doc.web/docs/11、傻瓜特别版(共享局域网).md
Normal file
@@ -0,0 +1,25 @@
|
||||
---
|
||||
sidebar_position: 11
|
||||
---
|
||||
|
||||
# 11、傻瓜特别版(共享局域网)
|
||||
|
||||
:::tip[说明]
|
||||
|
||||
### 共享端
|
||||
|
||||
1. 填写服务器信息
|
||||
2. 可以选择一下你被访问的内网网段,然后开去共享,等变成绿色可用了,连接端就可以访问了
|
||||
3. 可以复制`共享密钥`去别的地方运行,比如在linux下`./linker base64`这样子
|
||||
4. 可以复制`连接密钥`去给连接端使用
|
||||
|
||||

|
||||
|
||||
### 连接端
|
||||
|
||||
1. 添加一下从共享端得到的`连接密钥`密钥,选择密钥,然后开启连接,等变成绿色就可以使用了
|
||||
|
||||

|
||||

|
||||
:::
|
||||
|
27
src/linker.doc.web/docs/2、首次运行/2.11、特别说明(ikuai).md
Normal file
27
src/linker.doc.web/docs/2、首次运行/2.11、特别说明(ikuai).md
Normal file
@@ -0,0 +1,27 @@
|
||||
---
|
||||
sidebar_position: 11
|
||||
---
|
||||
|
||||
# 2.11、特别说明(ikuai)
|
||||
|
||||
:::tip[ikuai特别说明]
|
||||
|
||||
1. 在ikuai的WebUI上创建docker容器无法设置权限和添加设备,可能无法使用虚拟网卡
|
||||
2. 我们需要对ikuai做一些操作,然后进入ssh去创建docker容器
|
||||
|
||||
在操作前,进入ssh是这样的
|
||||
|
||||

|
||||
|
||||
先下载 <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`升级,重启
|
||||
|
||||

|
||||
|
||||
|
||||
然后再连接ssh,就可以了,然后就可以看`2.3、安装方法(docker)`说明去使用docker了
|
||||
|
||||

|
||||
:::
|
||||
|
@@ -2,7 +2,7 @@
|
||||
sidebar_position: 9
|
||||
---
|
||||
|
||||
# 2.9、初始化配置4(三方入参调用)
|
||||
# 2.9、初始化配置4(入参调用)
|
||||
|
||||
## 1、使用参数初始化
|
||||
|
BIN
src/linker.doc.web/docs/2、首次运行/img/ikuai-ssh1.jpg
Normal file
BIN
src/linker.doc.web/docs/2、首次运行/img/ikuai-ssh1.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 60 KiB |
BIN
src/linker.doc.web/docs/2、首次运行/img/ikuai-ssh2.jpg
Normal file
BIN
src/linker.doc.web/docs/2、首次运行/img/ikuai-ssh2.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
BIN
src/linker.doc.web/docs/2、首次运行/img/ikuai.jpg
Normal file
BIN
src/linker.doc.web/docs/2、首次运行/img/ikuai.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 64 KiB |
@@ -1,8 +1,8 @@
|
||||
---
|
||||
sidebar_position: 11
|
||||
sidebar_position: 7
|
||||
---
|
||||
|
||||
# 11、关于app
|
||||
# 7、关于app
|
||||
|
||||
:::danger[1、ios]
|
||||
1. 我没有iPhone,没有Mac,没有开发者账号
|
@@ -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`
|
BIN
src/linker.doc.web/docs/img/share-connect.jpg
Normal file
BIN
src/linker.doc.web/docs/img/share-connect.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 91 KiB |
BIN
src/linker.doc.web/docs/img/share-ping.jpg
Normal file
BIN
src/linker.doc.web/docs/img/share-ping.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 97 KiB |
BIN
src/linker.doc.web/docs/img/share-server.jpg
Normal file
BIN
src/linker.doc.web/docs/img/share-server.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 125 KiB |
@@ -121,7 +121,7 @@ namespace linker.messenger.signin
|
||||
|
||||
clientSignInState.PushSignInSuccess();
|
||||
|
||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
||||
//if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
||||
LoggerHelper.Instance.Info($"push signin success");
|
||||
|
||||
GCHelper.FlushMemory();
|
||||
|
@@ -43,6 +43,56 @@ namespace linker.messenger.tuntap
|
||||
}
|
||||
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>();
|
||||
TuntapTransfer tuntapTransfer = serviceProvider.GetService<TuntapTransfer>();
|
||||
|
||||
@@ -69,53 +119,7 @@ namespace linker.messenger.tuntap
|
||||
DecenterClientTransfer decenterClientTransfer = serviceProvider.GetService<DecenterClientTransfer>();
|
||||
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;
|
||||
}
|
||||
|
@@ -81,6 +81,10 @@ namespace linker.messenger.tuntap
|
||||
}
|
||||
return new TuntabListInfo { HashCode = version };
|
||||
}
|
||||
public TuntapStatus Status(ApiControllerParamsInfo param)
|
||||
{
|
||||
return tuntapTransfer.Status;
|
||||
}
|
||||
/// <summary>
|
||||
/// 刷新网卡信息
|
||||
/// </summary>
|
||||
|
@@ -1,5 +1,6 @@
|
||||
using System.Net;
|
||||
using linker.libs;
|
||||
using linker.libs.extends;
|
||||
using linker.libs.timer;
|
||||
using linker.messenger.signin;
|
||||
using linker.messenger.tuntap.messenger;
|
||||
@@ -47,8 +48,13 @@ namespace linker.messenger.tuntap.lease
|
||||
{
|
||||
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;
|
||||
}
|
||||
public async Task LeaseChange()
|
||||
@@ -82,27 +88,27 @@ namespace linker.messenger.tuntap.lease
|
||||
|
||||
private void LeaseExpTask()
|
||||
{
|
||||
signInClientState.OnSignInSuccess += async (times) =>
|
||||
signInClientState.OnSignInSuccess += (times) =>
|
||||
{
|
||||
try
|
||||
TimerHelper.Async(async () =>
|
||||
{
|
||||
LeaseInfo info = await GetNetwork();
|
||||
if (info.IP.Equals(IPAddress.Any))
|
||||
try
|
||||
{
|
||||
info = leaseClientStore.Get(signInClientStore.Group.Id);
|
||||
if (info != null && info.IP.Equals(IPAddress.Any) == false)
|
||||
LeaseInfo info = await GetNetwork();
|
||||
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)
|
||||
{
|
||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
||||
catch (Exception ex)
|
||||
{
|
||||
LoggerHelper.Instance.Error(ex);
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
TimerHelper.SetIntervalLong(async () =>
|
||||
|
@@ -5,8 +5,6 @@ namespace linker.messenger.updater
|
||||
{
|
||||
public static class Entry
|
||||
{
|
||||
static bool added = false;
|
||||
static bool used = false;
|
||||
public static ServiceCollection AddUpdaterClient(this ServiceCollection serviceCollection)
|
||||
{
|
||||
serviceCollection.AddSingleton<UpdaterApiController>();
|
||||
@@ -56,12 +54,6 @@ namespace linker.messenger.updater
|
||||
IMessengerResolver messengerResolver = serviceProvider.GetService<IMessengerResolver>();
|
||||
messengerResolver.AddMessenger(new List<IMessenger> { serviceProvider.GetService<UpdaterServerMessenger>() });
|
||||
|
||||
if (used == false)
|
||||
{
|
||||
used = true;
|
||||
IUpdaterInstaller updaterInstaller = serviceProvider.GetService<IUpdaterInstaller>();
|
||||
}
|
||||
|
||||
return serviceProvider;
|
||||
}
|
||||
}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?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"/>
|
||||
<folder name="资源文件" path="res" embed="true" local="false" ignored="false">
|
||||
<file name="Program.cs" path="res\Program.cs" comment="res\Program.cs"/>
|
||||
|
BIN
src/linker.route.win/dist/linker.route.win.exe
vendored
BIN
src/linker.route.win/dist/linker.route.win.exe
vendored
Binary file not shown.
@@ -1,6 +1,7 @@
|
||||
using linker.libs;
|
||||
using linker.libs.extends;
|
||||
using linker.libs.timer;
|
||||
using System;
|
||||
using System.Buffers.Binary;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Net;
|
||||
@@ -532,7 +533,7 @@ namespace linker.snat
|
||||
/// <summary>
|
||||
/// IPV4 包
|
||||
/// </summary>
|
||||
unsafe struct IPV4Packet
|
||||
public unsafe struct IPV4Packet
|
||||
{
|
||||
byte* ptr;
|
||||
|
||||
@@ -540,6 +541,9 @@ namespace linker.snat
|
||||
/// 协议版本
|
||||
/// </summary>
|
||||
public ProtocolType Version => (ProtocolType)((*ptr >> 4) & 0b1111);
|
||||
public ProtocolType Protocol => (ProtocolType)(*(ptr + 9));
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 源地址
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?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"/>
|
||||
<folder name="资源文件" path="res" embed="true" local="false" ignored="false">
|
||||
<file name="favicon.ico" path="res\favicon.ico" comment="res\favicon.ico"/>
|
||||
|
BIN
src/linker.tray.win/dist/linker.tray.win.exe
vendored
BIN
src/linker.tray.win/dist/linker.tray.win.exe
vendored
Binary file not shown.
1
src/linker.tray.win/web/css/183.8371eaf9.css
Normal file
1
src/linker.tray.win/web/css/183.8371eaf9.css
Normal file
File diff suppressed because one or more lines are too long
1
src/linker.tray.win/web/css/239.27766f61.css
Normal file
1
src/linker.tray.win/web/css/239.27766f61.css
Normal file
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
@@ -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
1
src/linker.tray.win/web/js/183.6f63bb04.js
Normal file
1
src/linker.tray.win/web/js/183.6f63bb04.js
Normal file
File diff suppressed because one or more lines are too long
1
src/linker.tray.win/web/js/239.bb090002.js
Normal file
1
src/linker.tray.win/web/js/239.bb090002.js
Normal 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}}]);
|
1
src/linker.tray.win/web/js/25.fd99e5f4.js
Normal file
1
src/linker.tray.win/web/js/25.fd99e5f4.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
src/linker.tray.win/web/js/32.c00f21cc.js
Normal file
1
src/linker.tray.win/web/js/32.c00f21cc.js
Normal file
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
1
src/linker.tray.win/web/js/596.b9acb564.js
Normal file
1
src/linker.tray.win/web/js/596.b9acb564.js
Normal file
File diff suppressed because one or more lines are too long
@@ -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
1
src/linker.tray.win/web/js/754.a7c56d93.js
Normal file
1
src/linker.tray.win/web/js/754.a7c56d93.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
src/linker.tray.win/web/js/898.0352a0a6.js
Normal file
1
src/linker.tray.win/web/js/898.0352a0a6.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
src/linker.tray.win/web/js/app.ee325789.js
Normal file
1
src/linker.tray.win/web/js/app.ee325789.js
Normal file
File diff suppressed because one or more lines are too long
@@ -1,8 +1,10 @@
|
||||
using linker.libs;
|
||||
using linker.libs.timer;
|
||||
using linker.snat;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using static linker.snat.LinkerDstMapping;
|
||||
using static linker.snat.LinkerSrcNat;
|
||||
|
||||
namespace linker.tun
|
||||
{
|
||||
@@ -320,7 +322,6 @@ namespace linker.tun
|
||||
return linkerTunDevice.Write(buffer);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 设置IP映射列表
|
||||
/// </summary>
|
||||
|
@@ -3,6 +3,7 @@ using System.ServiceProcess;
|
||||
using System.Diagnostics;
|
||||
using linker.messenger.entry;
|
||||
using linker.libs.extends;
|
||||
using System.Text;
|
||||
|
||||
namespace linker
|
||||
{
|
||||
@@ -49,7 +50,7 @@ namespace linker
|
||||
|
||||
public static void Run(string[] args)
|
||||
{
|
||||
|
||||
|
||||
|
||||
LinkerMessengerEntry.Initialize();
|
||||
LinkerMessengerEntry.Build();
|
||||
@@ -70,10 +71,11 @@ namespace linker
|
||||
Dictionary<string, string> configDic = new Dictionary<string, string>();
|
||||
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;
|
||||
}
|
||||
|
@@ -24,7 +24,8 @@
|
||||
2. 优化ssl证书,兼容安卓
|
||||
3. 打洞和中继优化,显示loading,增加手动尝试打洞
|
||||
5. 修改入参格式,增加虚拟网卡设置
|
||||
5. 如果你设备很多,请尝试升级其中一个成功重启后再升级其它</Description>
|
||||
6. 修复优化了网对网路由工具
|
||||
7. 如果你设备很多,请尝试升级其中一个成功重启后再升级其它</Description>
|
||||
<Copyright>snltty</Copyright>
|
||||
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
|
||||
|
@@ -1,7 +1,8 @@
|
||||
v1.7.7
|
||||
2025-05-01 01:35:23
|
||||
2025-05-02 18:12:34
|
||||
1. 一些累计更新
|
||||
2. 优化ssl证书,兼容安卓
|
||||
3. 打洞和中继优化,显示loading,增加手动尝试打洞
|
||||
5. 修改入参格式,增加虚拟网卡设置
|
||||
5. 如果你设备很多,请尝试升级其中一个成功重启后再升级其它
|
||||
6. 修复优化了网对网路由工具
|
||||
7. 如果你设备很多,请尝试升级其中一个成功重启后再升级其它
|
Reference in New Issue
Block a user