Example #1
0
            public static IPHost GetServerIPHost()
            {
                IPHost iphost = new IPHost()
                {
                    IP   = dataCache.GetCache(AppConfig.GetCacheKey(CacheConst.serverIP)) as string,
                    Host = dataCache.GetCache(AppConfig.GetCacheKey(CacheConst.serverHost)) as string,
                };

                return(iphost);
            }
 /// <summary>
 /// Sets up the proxy configuration based on the addresses in <paramref name="allowedProxies"/>.
 /// </summary>
 /// <param name="config">The <see cref="NetworkConfiguration"/> containing the config settings.</param>
 /// <param name="allowedProxies">The string array to parse.</param>
 /// <param name="options">The <see cref="ForwardedHeadersOptions"/> instance.</param>
 internal static void AddProxyAddresses(NetworkConfiguration config, string[] allowedProxies, ForwardedHeadersOptions options)
 {
     for (var i = 0; i < allowedProxies.Length; i++)
     {
         if (IPNetAddress.TryParse(allowedProxies[i], out var addr))
         {
             AddIpAddress(config, options, addr.Address, addr.PrefixLength);
         }
         else if (IPHost.TryParse(allowedProxies[i], out var host))
         {
             foreach (var address in host.GetAddresses())
             {
                 AddIpAddress(config, options, address, address.AddressFamily == AddressFamily.InterNetwork ? 32 : 128);
             }
         }
     }
 }
Example #3
0
            public static IPHost GetIPAccordingHost(string hostName)
            {
                IPHost iphost = new IPHost()
                {
                    Host = hostName
                };
                var ip = System.Net.Dns.GetHostAddresses(hostName);

                for (int i = 0; i < ip.Length; i++)
                {
                    if (IsIPAddress(ip[i].ToString()))
                    {
                        iphost.IP = ip[i].ToString();
                        return(iphost);
                    }
                }
                return(iphost);
            }
Example #4
0
        public void TestBindInterfaces(string source, string bindAddresses, bool ipv6enabled, string result)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            if (bindAddresses == null)
            {
                throw new ArgumentNullException(nameof(bindAddresses));
            }

            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }

            var conf = new NetworkConfiguration()
            {
                LocalNetworkAddresses = bindAddresses.Split(','),
                EnableIPV6            = ipv6enabled,
                EnableIPV4            = true
            };

            NetworkManager.MockNetworkSettings = "192.168.1.208/24,-16,eth16|200.200.200.200/24,11,eth11";
            using var nm = new NetworkManager(GetMockConfig(conf), new NullLogger <NetworkManager>());
            NetworkManager.MockNetworkSettings = string.Empty;

            _ = nm.TryParseInterface(result, out Collection <IPObject>?resultObj);

            // Check to see if dns resolution is working. If not, skip test.
            _ = IPHost.TryParse(source, out var host);

            if (resultObj != null && host?.HasAddress == true)
            {
                result = ((IPNetAddress)resultObj[0]).ToString(true);
                var intf = nm.GetBindInterface(source, out _);

                Assert.Equal(intf, result);
            }
        }
Example #5
0
        /// <summary>
        /// Tries to identify the string and return an object of that class.
        /// </summary>
        /// <param name="addr">String to parse.</param>
        /// <param name="result">IPObject to return.</param>
        /// <returns>True if the value parsed successfully.</returns>
        private static bool TryParse(string addr, out IPObject result)
        {
            if (!string.IsNullOrEmpty(addr))
            {
                // Is it an IP address
                if (IPNetAddress.TryParse(addr, out IPNetAddress nw))
                {
                    result = nw;
                    return(true);
                }

                if (IPHost.TryParse(addr, out IPHost h))
                {
                    result = h;
                    return(true);
                }
            }

            result = IPNetAddress.None;
            return(false);
        }
Example #6
0
 public void ValidHostStrings(string address)
 {
     Assert.True(IPHost.TryParse(address, out _));
 }
Example #7
0
 public void InvalidAddressString(string address)
 {
     Assert.False(IPNetAddress.TryParse(address, out _));
     Assert.False(IPHost.TryParse(address, out _));
 }
        /// <summary>
        /// Extension method for adding the jellyfin API to the service collection.
        /// </summary>
        /// <param name="serviceCollection">The service collection.</param>
        /// <param name="pluginAssemblies">An IEnumerable containing all plugin assemblies with API controllers.</param>
        /// <param name="knownProxies">A list of all known proxies to trust for X-Forwarded-For.</param>
        /// <returns>The MVC builder.</returns>
        public static IMvcBuilder AddJellyfinApi(this IServiceCollection serviceCollection, IEnumerable <Assembly> pluginAssemblies, IReadOnlyList <string> knownProxies)
        {
            IMvcBuilder mvcBuilder = serviceCollection
                                     .AddCors()
                                     .AddTransient <ICorsPolicyProvider, CorsPolicyProvider>()
                                     .Configure <ForwardedHeadersOptions>(options =>
            {
                options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
                if (knownProxies.Count == 0)
                {
                    options.KnownNetworks.Clear();
                    options.KnownProxies.Clear();
                }
                else
                {
                    for (var i = 0; i < knownProxies.Count; i++)
                    {
                        if (IPHost.TryParse(knownProxies[i], out var host))
                        {
                            options.KnownProxies.Add(host.Address);
                        }
                    }
                }
            })
                                     .AddMvc(opts =>
            {
                // Allow requester to change between camelCase and PascalCase
                opts.RespectBrowserAcceptHeader = true;

                opts.OutputFormatters.Insert(0, new CamelCaseJsonProfileFormatter());
                opts.OutputFormatters.Insert(0, new PascalCaseJsonProfileFormatter());

                opts.OutputFormatters.Add(new CssOutputFormatter());
                opts.OutputFormatters.Add(new XmlOutputFormatter());

                opts.ModelBinderProviders.Insert(0, new NullableEnumModelBinderProvider());
            })

                                     // Clear app parts to avoid other assemblies being picked up
                                     .ConfigureApplicationPartManager(a => a.ApplicationParts.Clear())
                                     .AddApplicationPart(typeof(StartupController).Assembly)
                                     .AddJsonOptions(options =>
            {
                // Update all properties that are set in JsonDefaults
                var jsonOptions = JsonDefaults.GetPascalCaseOptions();

                // From JsonDefaults
                options.JsonSerializerOptions.ReadCommentHandling         = jsonOptions.ReadCommentHandling;
                options.JsonSerializerOptions.WriteIndented               = jsonOptions.WriteIndented;
                options.JsonSerializerOptions.DefaultIgnoreCondition      = jsonOptions.DefaultIgnoreCondition;
                options.JsonSerializerOptions.NumberHandling              = jsonOptions.NumberHandling;
                options.JsonSerializerOptions.PropertyNameCaseInsensitive = jsonOptions.PropertyNameCaseInsensitive;

                options.JsonSerializerOptions.Converters.Clear();
                foreach (var converter in jsonOptions.Converters)
                {
                    options.JsonSerializerOptions.Converters.Add(converter);
                }

                // From JsonDefaults.PascalCase
                options.JsonSerializerOptions.PropertyNamingPolicy = jsonOptions.PropertyNamingPolicy;
            });

            foreach (Assembly pluginAssembly in pluginAssemblies)
            {
                mvcBuilder.AddApplicationPart(pluginAssembly);
            }

            return(mvcBuilder.AddControllersAsServices());
        }
Example #9
0
            //获取IP地址和host
            public static IPHost GetClientInfo(bool bNeedMac = false)
            {
                string uip   = "未知";
                string uName = "未知";

                try
                {
                    //if (HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
                    //{
                    //    uip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
                    //}
                    //else
                    //{
                    //    uip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
                    //}
#if NET
                    if (HttpContext.Current == null || HttpContext.Current.Request == null)
                    {
                        return(new IPHost());
                    }
                    uip = HttpContext.Current.Request.UserHostAddress;//获取客户端的IP主机地址
#else
                    var httpContext = HttpContext.Current;
                    if (httpContext == null || httpContext.Request == null)
                    {
                        return(new IPHost()
                        {
                            IP = uip, Host = uName
                        });
                    }
                    var apaddr = httpContext.Connection.RemoteIpAddress;
                    uip = apaddr.ToString(); //获取客户端的IP主机地址
#endif

                    IPHostEntry hostEntry  = Dns.GetHostEntry(uip); //获取IPHostEntry实体 ,可能会失败,报告"不知道这样的主机"的错误
                    string      clientName = hostEntry.HostName;    //获取客户端计算机名称
                    uName = clientName;
                    if (!uip.Contains(".") || uip == "127.0.0.1")
                    {
                        uip = GetIPAccordingHost(clientName).IP;
                    }
                }
                catch //(Exception ex)
                {
                    //  LogCom..WriteExceptToFile(ex);//WriteBackupLogToFile时需要构造实体(此时需要获取服务器信息),在此调用会产生循环引用的错误
                }

                IPHost iphost = new IPHost()
                {
                    IP = uip, Host = uName
                };
                try
                {
                    if (bNeedMac && !string.IsNullOrEmpty(uip))
                    {
                        iphost.Mac = "未知";
                        iphost.Mac = GetCustomerMac(iphost.IP);
                        if (iphost.Mac == "00-00-00-00-00-00")
                        {
                            iphost.Mac = getLocalMacAddress();
                        }
                    }
                }
                catch
                {
                }
                return(iphost);
            }
Example #10
0
 public static void TryParse_InvalidAddressString_False(string address)
 => Assert.False(IPHost.TryParse(address, out _));
Example #11
0
 public static Property TryParse_IPv6Address_True(IPv6Address address)
 => IPHost.TryParse(address.Item.ToString(), out _).ToProperty();
Example #12
0
 public static void TryParse_ValidHostStrings_True(string address)
 => Assert.True(IPHost.TryParse(address, out _));
Example #13
0
 public IPObject GetRoot(SRepository repository, string model, bool deferredLoad, IPHost host)
 {
     return new PObject(repository, model, deferredLoad, host);
 }
Example #14
0
 public PPlatform(IPDBLink db, string modelCode, bool defferedLoad, IPHost host)
 {
     Host = host;
     Model = new PModel(db, modelCode, defferedLoad, this);
 }