Пример #1
0
        public void Start()
        {
            var ipAddress = IpProvider.GetLocalIpAddress(AddressFamily.InterNetwork);

            var tcpListener = _InitializeListener(IPAddress.Parse(ipAddress));

            tcpListener.Start();

            while (true)
            {
                var message = new StringBuilder();

                var tcpClient = tcpListener.AcceptTcpClient();

                var bytes = new byte[256];

                var stream = tcpClient.GetStream();

                if (!stream.DataAvailable)
                {
                    continue;
                }

                var numberOfBytes = stream.Read(bytes, 0, bytes.Length);
                message.AppendFormat("{0}", Encoding.ASCII.GetString(bytes, 0, numberOfBytes));

                if (message.ToString() == string.Empty)
                {
                    continue;
                }

                _windowMessageNotificator.UpdateOrCreateWindowIfNeeded(
                    MessageParser.ParseMessageStringToObject(message.ToString()));
            }
        }
 private void get_ip_providers()
 {
     providers.Clear();
     string[] ps = AISSystem.AppSettingHelper.GetAppSetting("IPProviders").SplitWith("$;");
     foreach (var p in ps)
     {
         string     url       = p.SubBefore("&provider_name");
         string     name      = p.SubAfter("&provider_name=").SubBefore("&");
         string     ip_sp     = p.SubAfter("&ip_sp=").SubBefore("&");
         string     port_sp   = p.SubAfter("&port_sp=").SubBefore("&");
         int?       intervals = p.SubAfter("&intervals=").ExInt();
         IpProvider pro       = new IpProvider {
             name = name, url = url
         };
         if (intervals.HasValue)
         {
             pro.intervals = intervals.Value;
         }
         if (!string.IsNullOrEmpty(ip_sp))
         {
             pro.ip_sp = ip_sp;
         }
         if (!string.IsNullOrEmpty(port_sp))
         {
             pro.port_sp = port_sp;
         }
         providers.Add(pro);
         log(pro.name + " Initialized");
     }
 }
        private void start_get_ips_from_paid_provider(object o)
        {
            IpProvider provider = o as IpProvider;

            while (true)
            {
                try
                {
                    while ((DateTime.Now - provider.lst_get_ip_at).TotalMilliseconds < provider.intervals)
                    {
                        Thread.Sleep(1000);
                    }
                    provider.lst_get_ip_at = DateTime.Now;
                    provider.get_times++;
                    var _ips = get_ip_from_provider(provider.url, provider.ip_sp, provider.port_sp);
                    if (_ips != null && _ips.Count > 0)
                    {
                        provider.total_ips += _ips.Count;
                        _ips.ForEach(x => add_ip_if_pass_test(x, provider.name));
                    }
                    //else
                    //    log(provider.name + " RETRUN EMPTY IP");
                }
                catch (Exception ex)
                {
                    log(provider.name + " ERROR :" + ex.Message);
                }
            }
        }
Пример #4
0
        /// <summary>获取IP地址的物理地址位置</summary>
        /// <param name="addr"></param>
        /// <returns></returns>
        public static String GetAddress(this IPAddress addr)
        {
            if (addr.IsAny())
            {
                return("任意地址");
            }
            else if (IPAddress.IsLoopback(addr))
            {
                return("本地环回地址");
            }
            else if (addr.IsLocal())
            {
                return("本机地址");
            }

            if (_IpProvider == null)
            {
                _IpProvider = ObjectContainer.Current.AutoRegister <IpProvider, IpProviderDefault>().Resolve <IpProvider>();
            }

            return(_IpProvider.GetAddress(addr));
        }
        private async Task <HttpResponseMessage> ValidateRequest(ApiKey key, HttpRequestMessage request,
                                                                 CancellationToken cancellationToken)
        {
            if (key.Type == ApiKey.ApplicationType.Browser)
            {
                var pattern = new Regex(key.RegexPattern, RegexOptions.IgnoreCase);

                var referrer  = request.Headers.Referrer;
                var hasOrigin = request.Headers.Where(x => x.Key == Origin).ToList();

                if (referrer == null && !hasOrigin.Any())
                {
                    return(request.CreateResponse(HttpStatusCode.BadRequest,
                                                  new ResultContainer
                    {
                        Status = (int)HttpStatusCode.BadRequest,
                        Message = "Referrer http header is missing. " +
                                  "Turn off any security solutions that hide this header to use this service."
                    },
                                                  new MediaTypeHeaderValue("application/json")));
                }

                if (!referrer.IsAbsoluteUri)
                {
                    return(request.CreateResponse(HttpStatusCode.BadRequest,
                                                  new ResultContainer
                    {
                        Status = (int)HttpStatusCode.BadRequest,
                        Message = "Referrer http header is invalid. The value must be a vaid URI. e.g. http://my.url.com"
                    },
                                                  new MediaTypeHeaderValue("application/json")));
                }

                var corsOriginHeader = hasOrigin.FirstOrDefault();
                var corsOriginValue  = "";

                if (corsOriginHeader.Key != null)
                {
                    corsOriginValue = corsOriginHeader.Value.SingleOrDefault();
                }

                if (key.AppStatus == ApiKey.ApplicationStatus.Development &&
                    IsLocalDevelopment(referrer, corsOriginValue))
                {
                    return(await base.SendAsync(request, cancellationToken));
                }

                if (!ApiKeyPatternMatches(pattern, corsOriginValue, referrer))
                {
                    return(_invalidResponse);
                }
            }
            else
            {
                var ip = key.Pattern;
                var userHostAddress = IpProvider.GetIp(request);

                if (ip != userHostAddress)
                {
                    return(request.CreateResponse(HttpStatusCode.BadRequest,
                                                  new ResultContainer
                    {
                        Status = (int)HttpStatusCode.BadRequest,
                        Message = string.Format("Invalid API key. The IP you provided does not match what the API " +
                                                "is receiving. Double check your API key or create a new one using `{0}` " +
                                                "as the pattern.", userHostAddress)
                    },
                                                  new MediaTypeHeaderValue("application/json")));
                }
            }

            return(null);
        }
Пример #6
0
        /// <summary>获取IP地址的物理地址位置</summary>
        /// <param name="addr"></param>
        /// <returns></returns>
        public static String GetAddress(this IPAddress addr)
        {
            if (addr.IsAny())
                return "任意地址";
            else if (IPAddress.IsLoopback(addr))
                return "本地环回地址";
            else if (addr.IsLocal())
                return "本机地址";

            if (_IpProvider == null) _IpProvider = ObjectContainer.Current.AutoRegister<IpProvider, IpProviderDefault>().Resolve<IpProvider>();

            return _IpProvider.GetAddress(addr);
        }