mirror of
https://github.com/snltty/linker.git
synced 2025-10-20 23:59:27 +08:00
测试
This commit is contained in:
@@ -2,50 +2,144 @@
|
||||
|
||||
namespace linker.tun
|
||||
{
|
||||
/// <summary>
|
||||
/// 设备接口
|
||||
/// </summary>
|
||||
public interface ILinkerTunDevice
|
||||
{
|
||||
/// <summary>
|
||||
/// 设备名
|
||||
/// </summary>
|
||||
public string Name { get; }
|
||||
/// <summary>
|
||||
/// 是否正在运行
|
||||
/// </summary>
|
||||
public bool Running { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 启动
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="gateway"></param>
|
||||
/// <param name="prefixLength"></param>
|
||||
/// <param name="error"></param>
|
||||
/// <returns></returns>
|
||||
public bool SetUp(IPAddress address, IPAddress gateway, byte prefixLength, out string error);
|
||||
/// <summary>
|
||||
/// 关闭
|
||||
/// </summary>
|
||||
public void Shutdown();
|
||||
|
||||
/// <summary>
|
||||
/// 设置MTU
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
public void SetMtu(int value);
|
||||
/// <summary>
|
||||
/// 设置NAT转发
|
||||
/// </summary>
|
||||
public void SetNat();
|
||||
/// <summary>
|
||||
/// 移除NAT转发
|
||||
/// </summary>
|
||||
public void RemoveNat();
|
||||
|
||||
/// <summary>
|
||||
/// 添加路由
|
||||
/// </summary>
|
||||
/// <param name="ips"></param>
|
||||
/// <param name="ip"></param>
|
||||
public void AddRoute(LinkerTunDeviceRouteItem[] ips, IPAddress ip);
|
||||
/// <summary>
|
||||
/// 删除路由
|
||||
/// </summary>
|
||||
/// <param name="ip"></param>
|
||||
public void DelRoute(LinkerTunDeviceRouteItem[] ip);
|
||||
|
||||
/// <summary>
|
||||
/// 读取数据包
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ReadOnlyMemory<byte> Read();
|
||||
/// <summary>
|
||||
/// 写入数据包
|
||||
/// </summary>
|
||||
/// <param name="buffer"></param>
|
||||
/// <returns></returns>
|
||||
public bool Write(ReadOnlyMemory<byte> buffer);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 网卡读取数据回调
|
||||
/// </summary>
|
||||
public interface ILinkerTunDeviceCallback
|
||||
{
|
||||
/// <summary>
|
||||
/// 回调
|
||||
/// </summary>
|
||||
/// <param name="packet"></param>
|
||||
/// <returns></returns>
|
||||
public Task Callback(LinkerTunDevicPacket packet);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 数据包
|
||||
/// </summary>
|
||||
public struct LinkerTunDevicPacket
|
||||
{
|
||||
/// <summary>
|
||||
/// 协议版本,4或者6
|
||||
/// </summary>
|
||||
public byte Version;
|
||||
/// <summary>
|
||||
/// 源IP
|
||||
/// </summary>
|
||||
public ReadOnlyMemory<byte> SourceIPAddress;
|
||||
/// <summary>
|
||||
/// 目标IP
|
||||
/// </summary>
|
||||
public ReadOnlyMemory<byte> DistIPAddress;
|
||||
/// <summary>
|
||||
/// 带4字节头的包
|
||||
/// </summary>
|
||||
public ReadOnlyMemory<byte> Packet;
|
||||
/// <summary>
|
||||
/// 原始IP包
|
||||
/// </summary>
|
||||
public ReadOnlyMemory<byte> IPPacket;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加路由项
|
||||
/// </summary>
|
||||
public sealed class LinkerTunDeviceRouteItem
|
||||
{
|
||||
/// <summary>
|
||||
/// IP
|
||||
/// </summary>
|
||||
public IPAddress Address { get; set; }
|
||||
public byte Mask { get; set; }
|
||||
/// <summary>
|
||||
/// 掩码
|
||||
/// </summary>
|
||||
public byte PrefixLength { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设备状态
|
||||
/// </summary>
|
||||
public enum LinkerTunDeviceStatus
|
||||
{
|
||||
/// <summary>
|
||||
/// 无
|
||||
/// </summary>
|
||||
Normal = 0,
|
||||
Starting = 1,
|
||||
/// <summary>
|
||||
/// 正在操作
|
||||
/// </summary>
|
||||
Operating = 1,
|
||||
/// <summary>
|
||||
/// 运行中
|
||||
/// </summary>
|
||||
Running = 2
|
||||
}
|
||||
}
|
||||
|
@@ -150,10 +150,10 @@ namespace linker.tun
|
||||
{
|
||||
string[] commands = ips.Select(item =>
|
||||
{
|
||||
uint maskValue = NetworkHelper.MaskValue(item.Mask);
|
||||
uint maskValue = NetworkHelper.MaskValue(item.PrefixLength);
|
||||
IPAddress _ip = NetworkHelper.ToNetworkIp(item.Address, maskValue);
|
||||
|
||||
return $"ip route add {_ip}/{item.Mask} via {ip} dev {Name} metric 1 ";
|
||||
return $"ip route add {_ip}/{item.PrefixLength} via {ip} dev {Name} metric 1 ";
|
||||
}).ToArray();
|
||||
if (commands.Length > 0)
|
||||
{
|
||||
@@ -164,9 +164,9 @@ namespace linker.tun
|
||||
{
|
||||
string[] commands = ip.Select(item =>
|
||||
{
|
||||
uint maskValue = NetworkHelper.MaskValue(item.Mask);
|
||||
uint maskValue = NetworkHelper.MaskValue(item.PrefixLength);
|
||||
IPAddress _ip = NetworkHelper.ToNetworkIp(item.Address, maskValue);
|
||||
return $"ip route del {_ip}/{item.Mask}";
|
||||
return $"ip route del {_ip}/{item.PrefixLength}";
|
||||
}).ToArray();
|
||||
CommandHelper.Linux(string.Empty, commands);
|
||||
}
|
||||
|
@@ -60,8 +60,8 @@ namespace linker.tun
|
||||
{
|
||||
string[] commands = ips.Select(item =>
|
||||
{
|
||||
IPAddress _ip = NetworkHelper.ToNetworkIp(item.Address, item.Mask);
|
||||
return $"route add -net {_ip}/{item.Mask} {ip}";
|
||||
IPAddress _ip = NetworkHelper.ToNetworkIp(item.Address, item.PrefixLength);
|
||||
return $"route add -net {_ip}/{item.PrefixLength} {ip}";
|
||||
}).ToArray();
|
||||
if (commands.Length > 0)
|
||||
{
|
||||
@@ -72,8 +72,8 @@ namespace linker.tun
|
||||
{
|
||||
string[] commands = ip.Select(item =>
|
||||
{
|
||||
IPAddress _ip = NetworkHelper.ToNetworkIp(item.Address, item.Mask);
|
||||
return $"route delete -net {_ip}/{item.Mask}";
|
||||
IPAddress _ip = NetworkHelper.ToNetworkIp(item.Address, item.PrefixLength);
|
||||
return $"route delete -net {_ip}/{item.PrefixLength}";
|
||||
}).ToArray();
|
||||
if (commands.Length > 0)
|
||||
{
|
||||
|
@@ -23,7 +23,7 @@ namespace linker.tun
|
||||
if (linkerTunDevice == null) return LinkerTunDeviceStatus.Normal;
|
||||
|
||||
return operating == 1
|
||||
? LinkerTunDeviceStatus.Starting
|
||||
? LinkerTunDeviceStatus.Operating
|
||||
: linkerTunDevice.Running
|
||||
? LinkerTunDeviceStatus.Running
|
||||
: LinkerTunDeviceStatus.Normal;
|
||||
|
@@ -125,7 +125,7 @@ namespace linker.tun
|
||||
{
|
||||
string[] commands = ips.Select(item =>
|
||||
{
|
||||
uint maskValue = NetworkHelper.MaskValue(item.Mask);
|
||||
uint maskValue = NetworkHelper.MaskValue(item.PrefixLength);
|
||||
IPAddress mask = NetworkHelper.GetMaskIp(maskValue);
|
||||
IPAddress _ip = NetworkHelper.ToNetworkIp(item.Address, maskValue);
|
||||
|
||||
@@ -141,7 +141,7 @@ namespace linker.tun
|
||||
{
|
||||
string[] commands = ip.Select(item =>
|
||||
{
|
||||
uint maskValue = NetworkHelper.MaskValue(item.Mask);
|
||||
uint maskValue = NetworkHelper.MaskValue(item.PrefixLength);
|
||||
IPAddress mask = NetworkHelper.GetMaskIp(maskValue);
|
||||
IPAddress _ip = NetworkHelper.ToNetworkIp(item.Address, maskValue);
|
||||
return $"route delete {_ip}";
|
||||
|
@@ -73,7 +73,6 @@ export default {
|
||||
currentDom.value.handleValidate().then((json)=>{
|
||||
step.value.json = Object.assign(step.value.json,json.json);
|
||||
step.value.form = Object.assign(step.value.form,json.form);
|
||||
console.log(step.value);
|
||||
step.value.step ++;
|
||||
}).catch(()=>{
|
||||
});
|
||||
|
@@ -51,7 +51,6 @@ export default {
|
||||
|
||||
const globalData = injectGlobalData();
|
||||
const tuntap = useTuntap();
|
||||
console.log(tuntap);
|
||||
const ruleFormRef = ref(null);
|
||||
const state = reactive({
|
||||
show: true,
|
||||
|
@@ -280,7 +280,7 @@ namespace linker.plugins.tuntap
|
||||
{
|
||||
List<TuntapVeaLanIPAddressList> ipsList = ParseIPs(tuntapInfos.Values.ToList());
|
||||
TuntapVeaLanIPAddress[] ips = ipsList.SelectMany(c => c.IPS).ToArray();
|
||||
linkerTunDeviceAdapter.DelRoute(ipsList.SelectMany(c => c.IPS).Select(c => new LinkerTunDeviceRouteItem { Address = c.OriginIPAddress, Mask = c.MaskLength }).ToArray());
|
||||
linkerTunDeviceAdapter.DelRoute(ipsList.SelectMany(c => c.IPS).Select(c => new LinkerTunDeviceRouteItem { Address = c.OriginIPAddress, PrefixLength = c.MaskLength }).ToArray());
|
||||
}
|
||||
/// <summary>
|
||||
/// 添加路由
|
||||
@@ -289,7 +289,7 @@ namespace linker.plugins.tuntap
|
||||
{
|
||||
List<TuntapVeaLanIPAddressList> ipsList = ParseIPs(tuntapInfos.Values.ToList());
|
||||
TuntapVeaLanIPAddress[] ips = ipsList.SelectMany(c => c.IPS).ToArray();
|
||||
linkerTunDeviceAdapter.AddRoute(ipsList.SelectMany(c => c.IPS).Select(c => new LinkerTunDeviceRouteItem { Address = c.OriginIPAddress, Mask = c.MaskLength }).ToArray(), runningConfig.Data.Tuntap.IP);
|
||||
linkerTunDeviceAdapter.AddRoute(ipsList.SelectMany(c => c.IPS).Select(c => new LinkerTunDeviceRouteItem { Address = c.OriginIPAddress, PrefixLength = c.MaskLength }).ToArray(), runningConfig.Data.Tuntap.IP);
|
||||
|
||||
tuntapProxy.SetIPs(ipsList);
|
||||
foreach (var item in tuntapInfos.Values)
|
||||
|
Reference in New Issue
Block a user