namespace ServiceLib.Services.CoreConfig; public partial class CoreConfigSingboxService { private void GenInbounds() { try { var listen = "0.0.0.0"; var listenPort = AppManager.Instance.GetLocalPort(EInboundProtocol.socks); _coreConfig.inbounds = []; if (!context.IsTunEnabled || (context.IsTunEnabled && _node.Port != listenPort)) { var inbound = new Inbound4Sbox() { type = EInboundProtocol.mixed.ToString(), tag = EInboundProtocol.socks.ToString(), listen = Global.Loopback, }; _coreConfig.inbounds.Add(inbound); inbound.listen_port = listenPort; if (_config.Inbound.First().SecondLocalPortEnabled) { var inbound2 = BuildInbound(inbound, EInboundProtocol.socks2, true); _coreConfig.inbounds.Add(inbound2); } if (_config.Inbound.First().AllowLANConn) { if (_config.Inbound.First().NewPort4LAN) { var inbound3 = BuildInbound(inbound, EInboundProtocol.socks3, true); inbound3.listen = listen; _coreConfig.inbounds.Add(inbound3); //auth if (_config.Inbound.First().User.IsNotEmpty() && _config.Inbound.First().Pass.IsNotEmpty()) { inbound3.users = new() { new() { username = _config.Inbound.First().User, password = _config.Inbound.First().Pass } }; } } else { inbound.listen = listen; } } } if (context.IsTunEnabled) { if (_config.TunModeItem.Mtu <= 0) { _config.TunModeItem.Mtu = Global.TunMtus.First(); } if (_config.TunModeItem.Stack.IsNullOrEmpty()) { _config.TunModeItem.Stack = Global.TunStacks.First(); } var tunInbound = JsonUtils.Deserialize(EmbedUtils.GetEmbedText(Global.TunSingboxInboundFileName)) ?? new Inbound4Sbox { }; tunInbound.interface_name = Utils.IsMacOS() ? $"utun{new Random().Next(99)}" : "singbox_tun"; tunInbound.mtu = _config.TunModeItem.Mtu; tunInbound.auto_route = _config.TunModeItem.AutoRoute; tunInbound.strict_route = _config.TunModeItem.StrictRoute; tunInbound.stack = _config.TunModeItem.Stack; if (_config.TunModeItem.EnableIPv6Address == false) { tunInbound.address = ["172.18.0.1/30"]; } _coreConfig.inbounds.Add(tunInbound); } } catch (Exception ex) { Logging.SaveLog(_tag, ex); } } private Inbound4Sbox BuildInbound(Inbound4Sbox inItem, EInboundProtocol protocol, bool bSocks) { var inbound = JsonUtils.DeepCopy(inItem); inbound.tag = protocol.ToString(); inbound.listen_port = inItem.listen_port + (int)protocol; inbound.type = EInboundProtocol.mixed.ToString(); return inbound; } }