您的位置: 首页 > 新闻资讯 > > 正文

C#取真实IP地址--多个代理背后的ip地址

发布时间:2020年01月10日 来源:互联网

//多个代理背后的ip地址


C#取真实IP地址--多个代理背后的ip地址


文件名:IPAddress.cs


using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Text.RegularExpressions;

namespace Common

{

    /// <summary>

    /// IPAddress 的摘要说明

    /// </summary>

public class IPAddress : System.Web.UI.Page

{


    public static Int64 toDenaryIp ( string ip )

    {

        Int64 _Int64 = 0;

        string _ip = ip;

        if ( _ip.LastIndexOf ( "." ) > -1 )

        {

            string[] _iparray = _ip.Split ( '.' );


            _Int64 = Int64.Parse ( _iparray.GetValue ( 0 ).ToString() ) * 256 * 256 * 256 + Int64.Parse ( _iparray.GetValue ( 1 ).ToString() ) * 256 * 256 + Int64.Parse ( _iparray.GetValue ( 2 ).ToString() ) * 256 + Int64.Parse ( _iparray.GetValue ( 3 ).ToString() ) - 1;

        }

        return _Int64;

    }


    /// <summary>

    /// /ip十进制

    /// </summary>

    public static Int64 DenaryIp

    {

        get {

            Int64 _Int64 = 0;


            string _ip = IP;

            if ( _ip.LastIndexOf ( "." ) > -1 )

            {

                string[] _iparray= _ip.Split ( '.' );


                _Int64 = Int64.Parse ( _iparray.GetValue ( 0 ).ToString() ) * 256 * 256 * 256 + Int64.Parse ( _iparray.GetValue ( 1 ).ToString() ) * 256 * 256 + Int64.Parse ( _iparray.GetValue ( 2 ).ToString() ) * 256 + Int64.Parse ( _iparray.GetValue ( 3 ).ToString() )-1;

            }

            return _Int64;

        }

    }


    public static string IP

    {

        get

        {

            string result = String.Empty;

            result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

            if ( result != null && result != String.Empty )

            {

               //可能有代理

                if ( result.IndexOf ( "." ) == -1 ) //没有"."肯定是非IPv4格式

                    result = null;

                else

                {

                    if ( result.IndexOf ( "," ) != -1 )

                    {

                         //有",",估计多个代理。取第一个不是内网的IP。

                        result = result.Replace ( " ", "" ).Replace ( "", "" );

                        string[] temparyip = result.Split ( ",;".ToCharArray() );

                        for ( int i = 0; i < temparyip.Length; i++ )

                        {

                            if ( IsIPAddress ( temparyip[i] )

                                    && temparyip[i].Substring ( 0, 3 ) != "10."

                                    && temparyip[i].Substring ( 0, 7 ) != "192.168"

                                    && temparyip[i].Substring ( 0, 7 ) != "172.16." )

                            {

                                return temparyip[i]; //找到不是内网的地址

                            }

                        }

                    }

                    else if ( IsIPAddress ( result ) ) //代理即是IP格式

                        return result;

                    else

                        result = null; //代理中的内容 非IP,取IP

                }


            }


            string IpAddress = ( HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty )  HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

           

            if ( null == result || result == String.Empty )

                result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];


            if ( result == null || result == String.Empty )

                result = HttpContext.Current.Request.UserHostAddress;


            return result;

        }

    }


     //是否ip格式

    public static bool IsIPAddress ( string str1 )

    {

        if ( str1 == null || str1 == string.Empty || str1.Length < 7 || str1.Length > 15 ) return false;


        string regformat = @"^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$";


        Regex regex = new Regex ( regformat, RegexOptions.IgnoreCase );

        return regex.IsMatch ( str1 );

    }



}

}


相关文章内容简介

1 免费代理IP能用于爬虫吗

    免费代理IP能用于爬虫吗?免费代理IP就是不需要花钱,在网络上可以直接提取,然后用来替换IP。并不是所有项目都能用免费代理IP的,例如爬虫就不可以。    免费代理IP的来源比较杂,很多没有用,使用时间短,匿名程度也参差不齐,其中有一些是高度匿名的,但数量有限,也很难挑选。而爬虫工作需要的IP,要求比较高,因为爬虫IP一旦质量不高就会被对方网站发现,被禁止抓取数据,无法完成工作。所以,免费代理IP是不适合爬虫的。但如果免费代理IP的匿名程度够的话,使用效率低,也是符合使用需求的。    爬虫大家都知道,是采集数据的方式。通过采集来的数据分析,可以获取有价值的信息。而代理IP是换IP最方便的工具,爬虫工作是要用代理IP的。    爬虫对被爬的网站来说是毫无利益的,反而会影响到服务器的工作,所以现在都设有反爬程序,IP限制是最基本的。爬虫工作的时候,如果速度快,用同一个IP会有访问的问题,这时网络就会有验证或者直接封锁IP,给爬虫工作带来了很大的困难。 ... [阅读全文]

2 发帖用代理IP有什么好处?

    发帖用代理IP有什么好处?发帖是网络营销的主要途径,在发帖的时候,很多时候都要用到代理IP,这并不奇怪,代理IP给网络营销人员带来了很大的便利。那么,发帖用代理IP有什么好处?    贴吧大家都不陌生,很多人在贴吧交流,一般同一个IP只能发布有限的帖子,评论也是有限制的。如果想大量发帖,就需要用代理IP来解决了。有很多热帖有的是真实评论,有的可能需要代理IP来帮忙,用代理IP去访问网站,用户不会被网站监视限制,或者被封锁了。    随着网络的发展,网络营销是很多公司必须要做的,其中网络影响最重要的途径就是发帖。很多发帖的工作人员都在使用代理IP,但还有很多人并不了解。那么,营销发帖一定要用代理IP吗?    例如贴吧、微博等平台,这些平台发帖可以与其他网友进行交流,起到宣传的作用。但一个IP发帖的数量是有限的,如果想大量发帖,就需要代理IP的帮助。更换IP后,就可以伪装成一个全新的用户,自然不会被平台限制。还有网络营销最常见的问答方式,也需要更换IP后进行自问... [阅读全文]

推荐阅读

  1. 04

    2020-03

    假如不应用代理ip网络爬虫会怎么样?

    假如不应用 代理ip , 网络爬虫 工作中必然无处行得通,因而绝大多数网络爬虫工作人员都是去选购安全性平稳的代理ip。应用了高品质的代理ip后,是否会就可以无顾虑了呢?这一可不容易那

  2. 21

    2020-09

    代理ip私人定制有什么优势?

    私人定制这个字眼大家并不陌生,在我们生活中也是很常见的,比如定制衣服,定制鞋子等,在互联网中也是非常多,所谓定制的概念就是特殊量身定制,那么我们常用的代理ip也可以特殊定制

  3. 23

    2020-05

    使用代理时IP的常见报错原因

    对面很多用户来说,代理IP是日常工作中必不可少的工具,尤其是爬虫用户,更是离不开代理IP。在这些用户日常使用的过程中,不免会遇到各种各样的问题,而这种时候往往让人头大,今天我

  4. 29

    2020-02

    怎么提取稳定api及代理ip?

    首先是IP数量,这个精彩使用网络做业务的人基本都知道,自然不用多说了,IP数量够了质量也要跟上去,高质量的代理IP可以提高做业务的效率和质量。那么什么是高质量的代理IP呢我认为首先

  5. 14

    2020-12

    使用代理ip访问目标网站有什么优势?

    代理ip对大家都并不陌生,很多人需要使用代理ip来完成一些不能完成的工作,那么使用代理ip访问目标网站以及搜索引擎获取想要的信息,并不是直接访问目标网站,而是先访问代理服务器,再

  6. 07

    2020-04

    代理IP质量与哪些因素有关?

    随着互联网大数据的迅速发展,用户对于代理IP的需求也在与日俱增,各种代理IP服务商也是如雨后春笋般的冒出来。当选择多了的时候,质量就变得至关重要了。那么,代理IP的质量与那些因素

因为专业! 所以简单! 产品至上,价格实惠 是我们服务追求的宗旨

免费试用