You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.3 KiB
124 lines
3.3 KiB
#if DELETED
|
|
|
|
using Apewer;
|
|
using Apewer.Network;
|
|
using Apewer.Web;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
|
|
namespace Apewer.Internals
|
|
{
|
|
|
|
internal class WebFromTrusted
|
|
{
|
|
|
|
#region Instance
|
|
|
|
private List<string> _presetips = new List<string>();
|
|
|
|
public List<string> PresetIPs { get { return _presetips; } }
|
|
|
|
public string ClientIP { get; private set; }
|
|
|
|
public string Mode { get; private set; }
|
|
|
|
public string RemoteIP { get; private set; }
|
|
|
|
public string ProxyIP { get; private set; }
|
|
|
|
public bool Trusted { get; private set; }
|
|
|
|
internal WebFromTrusted(IEnumerable<string> hosts)
|
|
{
|
|
foreach (var domain in hosts) AddPreset(domain);
|
|
ClientIP = PageUtility.ClientIP;
|
|
Trusted = GetTrusted();
|
|
}
|
|
|
|
internal WebFromTrusted(params string[] hosts) : this((IEnumerable<string>)hosts) { }
|
|
|
|
private bool AddPreset(string domain)
|
|
{
|
|
if (domain.IsEmpty()) return false;
|
|
|
|
var ip = null as string;
|
|
ip = NetworkUtility.IsIP(domain) ? domain : NetworkUtility.Resolve(domain);
|
|
if (ip.IsEmpty()) return false;
|
|
if (!NetworkUtility.IsIP(ip)) return false;
|
|
|
|
if (!_presetips.Contains(ip)) _presetips.Add(ip);
|
|
return true;
|
|
}
|
|
|
|
private bool GetTrusted()
|
|
{
|
|
var ips = ClientIP.Split(",");
|
|
switch (ips.Length)
|
|
{
|
|
case 1:
|
|
{
|
|
Mode = "direct";
|
|
RemoteIP = ips[0].Split(":")[0];
|
|
|
|
// 信任局域网访问。
|
|
if (NetworkUtility.FromLAN(RemoteIP)) return true;
|
|
|
|
// 检测公网地址。
|
|
if (PresetIPs.Contains(RemoteIP)) return true;
|
|
}
|
|
break;
|
|
case 2:
|
|
{
|
|
Mode = "proxy";
|
|
ProxyIP = ips[1].Split(":")[0];
|
|
RemoteIP = ips[0].Split(":")[0];
|
|
|
|
// 拒绝匿源代理。
|
|
if (RemoteIP.IsEmpty()) return false;
|
|
|
|
// 信任局域网中的代理。
|
|
if (NetworkUtility.FromLAN(ProxyIP)) return true;
|
|
|
|
// 信任公网远端。(CDN:Remote=Preset Proxy=CDN)
|
|
if (PresetIPs.Contains(RemoteIP)) return true;
|
|
|
|
#if DEBUG
|
|
|
|
// 信任预置 IP 代理。(本地调试:Remote=127.0.0.1 Proxy=Preset)
|
|
if (PresetIPs.Contains(ProxyIP)) return true;
|
|
|
|
#endif
|
|
|
|
}
|
|
break;
|
|
default:
|
|
{
|
|
Mode = "other";
|
|
}
|
|
break;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Static Methods
|
|
|
|
/// <summary>获取远端 IP。</summary>
|
|
public static string GetRemoteIP()
|
|
{
|
|
var ip = PageUtility.ClientIP;
|
|
var iof = ip.IndexOf(",");
|
|
if (iof > -1) ip = ip.Substring(0, iof);
|
|
ip = ip.Split(":")[0];
|
|
return ip;
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|