mirror of
https://github.com/2dust/v2rayN.git
synced 2025-08-29 14:26:20 +00:00
添加指定节点路由功能
This commit is contained in:
parent
aef61de475
commit
88d79cb139
2 changed files with 65 additions and 5 deletions
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using v2rayN.Base;
|
using v2rayN.Base;
|
||||||
|
@ -22,6 +23,7 @@ namespace v2rayN.Forms
|
||||||
|
|
||||||
private void RoutingRuleSettingDetailsForm_Load(object sender, EventArgs e)
|
private void RoutingRuleSettingDetailsForm_Load(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
LoadTagData();
|
||||||
if (Utils.IsNullOrEmpty(rulesItem.outboundTag))
|
if (Utils.IsNullOrEmpty(rulesItem.outboundTag))
|
||||||
{
|
{
|
||||||
ClearBind();
|
ClearBind();
|
||||||
|
@ -32,6 +34,15 @@ namespace v2rayN.Forms
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void LoadTagData()
|
||||||
|
{
|
||||||
|
|
||||||
|
//ID列表 // 有重复时,以第一个为准
|
||||||
|
|
||||||
|
var list = config.vmess.Select(v => "[" + v.remarks + "]" + "(" + v.address + ":" + v.port + ")");
|
||||||
|
cmbOutboundTag.Items.AddRange(list.ToArray());
|
||||||
|
}
|
||||||
|
|
||||||
private void EndBindingData()
|
private void EndBindingData()
|
||||||
{
|
{
|
||||||
if (rulesItem != null)
|
if (rulesItem != null)
|
||||||
|
|
|
@ -73,6 +73,7 @@ namespace v2rayN.Handler
|
||||||
//outbound
|
//outbound
|
||||||
outbound(node, ref v2rayConfig);
|
outbound(node, ref v2rayConfig);
|
||||||
|
|
||||||
|
extraTagOutbound(config, ref v2rayConfig);
|
||||||
//dns
|
//dns
|
||||||
dns(config, ref v2rayConfig);
|
dns(config, ref v2rayConfig);
|
||||||
|
|
||||||
|
@ -147,7 +148,7 @@ namespace v2rayN.Handler
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
v2rayConfig.inbounds = new List<Inbounds>();
|
v2rayConfig.inbounds = new List<Inbounds>();
|
||||||
|
//socks
|
||||||
Inbounds inbound = GetInbound(config.inbound[0], Global.InboundSocks, 0, true);
|
Inbounds inbound = GetInbound(config.inbound[0], Global.InboundSocks, 0, true);
|
||||||
v2rayConfig.inbounds.Add(inbound);
|
v2rayConfig.inbounds.Add(inbound);
|
||||||
|
|
||||||
|
@ -175,6 +176,15 @@ namespace v2rayN.Handler
|
||||||
inbound4.settings.accounts = new List<AccountsItem> { new AccountsItem() { user = config.inbound[0].user, pass = config.inbound[0].pass } };
|
inbound4.settings.accounts = new List<AccountsItem> { new AccountsItem() { user = config.inbound[0].user, pass = config.inbound[0].pass } };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//自定义TAG
|
||||||
|
//var offset = 4;
|
||||||
|
//var vmessList = config.vmess.Where(v => v.tag != null && v.tag.Trim().Length > 0).ToList();
|
||||||
|
//foreach (var inboundConfig in vmessList)
|
||||||
|
//{
|
||||||
|
// v2rayConfig.inbounds.Add(GetInbound(config.inbound[0], "TAG-SOCKS-" + inboundConfig.tag, offset++, true));
|
||||||
|
// v2rayConfig.inbounds.Add(GetInbound(config.inbound[0], "TAG-HTTP-" + inboundConfig.tag, offset++, false));
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
@ -204,6 +214,7 @@ namespace v2rayN.Handler
|
||||||
return inbound;
|
return inbound;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 路由
|
/// 路由
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -228,7 +239,7 @@ namespace v2rayN.Handler
|
||||||
{
|
{
|
||||||
if (item.enabled)
|
if (item.enabled)
|
||||||
{
|
{
|
||||||
routingUserRule(item, ref v2rayConfig);
|
routingUserRule(item, ref v2rayConfig, config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -240,7 +251,7 @@ namespace v2rayN.Handler
|
||||||
{
|
{
|
||||||
foreach (var item in lockedItem.rules)
|
foreach (var item in lockedItem.rules)
|
||||||
{
|
{
|
||||||
routingUserRule(item, ref v2rayConfig);
|
routingUserRule(item, ref v2rayConfig, config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -251,10 +262,11 @@ namespace v2rayN.Handler
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
private static int routingUserRule(RulesItem rules, ref V2rayConfig v2rayConfig)
|
private static int routingUserRule(RulesItem rules, ref V2rayConfig v2rayConfig, Config config)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
||||||
if (rules == null)
|
if (rules == null)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -351,18 +363,55 @@ namespace v2rayN.Handler
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static int extraTagOutbound(Config config, ref V2rayConfig v2rayConfig)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var vmessList = config.vmess.ToList();
|
||||||
|
var idSet = new HashSet<String>();// 去重 ,有重复的,按第一个为准
|
||||||
|
foreach (var v in vmessList)
|
||||||
|
{
|
||||||
|
var id = "[" + v.remarks + "]" + "(" + v.address + ":" + v.port + ")";
|
||||||
|
if (idSet.Contains(id))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
outbound(v, ref v2rayConfig, true, id);
|
||||||
|
idSet.Add(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// vmess协议服务器配置
|
/// vmess协议服务器配置
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="node"></param>
|
/// <param name="node"></param>
|
||||||
/// <param name="v2rayConfig"></param>
|
/// <param name="v2rayConfig"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private static int outbound(VmessItem node, ref V2rayConfig v2rayConfig)
|
private static int outbound(VmessItem node, ref V2rayConfig v2rayConfig, bool extraTagOutbounds = false, string extraTagOutboundTag = "")
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var config = LazyConfig.Instance.GetConfig();
|
var config = LazyConfig.Instance.GetConfig();
|
||||||
Outbounds outbound = v2rayConfig.outbounds[0];
|
Outbounds outbound = v2rayConfig.outbounds[0];
|
||||||
|
if (extraTagOutbounds)
|
||||||
|
{
|
||||||
|
string result = Utils.GetEmbedText(SampleClient);
|
||||||
|
//转成Json
|
||||||
|
V2rayConfig sampleV2rayConfig = Utils.FromJson<V2rayConfig>(result);
|
||||||
|
outbound = sampleV2rayConfig.outbounds[0];
|
||||||
|
//取得一个示例实例
|
||||||
|
outbound.tag = extraTagOutboundTag;
|
||||||
|
v2rayConfig.outbounds.Add(outbound);
|
||||||
|
}
|
||||||
if (node.configType == EConfigType.Vmess)
|
if (node.configType == EConfigType.Vmess)
|
||||||
{
|
{
|
||||||
VnextItem vnextItem;
|
VnextItem vnextItem;
|
||||||
|
|
Loading…
Reference in a new issue