c# 프록시 빠르게 살아있는지 체크 > 응용프로그램개발

본문 바로가기

팝업레이어 알림

팝업레이어 알림이 없습니다.
사이트 내 전체검색


회원로그인

카카오톡친구추가 제임스 SNS마케팅 사용자모임 네이버밴드초대

접속IP:54.87.18.165



응용프로그램개발

c# 프록시 빠르게 살아있는지 체크

페이지 정보

작성자 운영자 작성일14-12-18 02:11 조회729회 댓글1건

본문

출처:http://stackoverflow.com/questions/12249702/what-is-the-fastest-way-for-checking-a-big-proxy-list-on-a-specific-web-site

 

 

 

 

  public static void MyChecker()
    {
        string[] lines = File.ReadAllLines(txtProxyListPath.Text);
        List<string> list_lines = new List<string>(lines);
        List<string> list_lines_RemovedDup = new List<string>();
        HashSet<string> HS = new HashSet<string>();
        int Duplicate_Count = 0;
        int badProxy = 0;
        int CheckedCount = 0;

        foreach (string line in list_lines)
        {
            string[] line_char = line.Split(':');
            string ip = line_char[0];
            string port = line_char[1];
            if (CanPing(ip))
            {
                if (SoketConnect(ip, port))
                {
                    if (CheckProxy(ip, port))
                    {
                        string ipAndport = ip + ":" + port;
                        if (HS.Add(ipAndport))
                        {
                            list_lines_RemovedDup.Add(ipAndport);
                            CheckedCount++;
                        }
                        else
                        {
                            Duplicate_Count++;
                            CheckedCount++;
                        }
                    }
                    else
                    {
                        badProxy++;
                        CheckedCount++;
                    }
                }
                else
                {
                    badProxy++;
                    CheckedCount++;
                }
            }
            else
            {
                badProxy++;
                CheckedCount++;
            }
    }

    public static bool CanPing(string ip)
    {
        Ping ping = new Ping();

        try
        {
            PingReply reply = ping.Send(ip, 2000);
            if (reply == null)
                return false;

            return (reply.Status == IPStatus.Success);
        }
        catch (PingException Ex)
        {
            return false;
        }
    }

    public static bool SoketConnect(string ip, string port)
    {
        var is_success = false;
        try
        {
            var connsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            connsock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 200);
            System.Threading.Thread.Sleep(500);
            var hip = IPAddress.Parse(ip);
            var ipep = new IPEndPoint(hip, int.Parse(port));
            connsock.Connect(ipep);
            if (connsock.Connected)
            {
                is_success = true;
            }
            connsock.Close();
        }
        catch (Exception)
        {
            is_success = false;
        }
        return is_success;
    }

    public static bool CheckProxy(string ip, string port)
    {
        try
        {
            WebClient WC = new WebClient();
            WC.Proxy = new WebProxy(ip, int.Parse(port));
            WC.DownloadString("http://SpecificWebSite.com");
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }

 

 

 

 

 

 

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Proxy = null;   // set proxy here
request.Timeout = 10000; 
request.Method = "HEAD";

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    Console.WriteLine(response.StatusCode);
}
public static bool TestProxy(string ipAddress, int port, out string errorMsg, out double connectionSeconds) {
  Stopwatch stopWatch = new Stopwatch();
  errorMsg = "";
  connectionSeconds = -1;

  try {
    stopWatch.Start();
    var client = new RestClient("https://webapi.theproxisright.com/");
    client.Proxy = new WebProxy(ipAddress, port);

    var request = new RestRequest("api/ip", Method.GET);
    request.Timeout = 10000;
    request.RequestFormat = DataFormat.Json;

    var response = client.Execute(request);
    if (response.ErrorException != null) {
      throw response.ErrorException;
    }
    return (response.Content == ipAddress);
  } catch (Exception ex) {
    errorMsg = ex.Message;
    return false;
  } finally {
    stopWatch.Stop();
    connectionSeconds = stopWatch.Elapsed.TotalSeconds;
  }
}

 

Task.Factory.StartNew(() => {
    try {
      string errorMsg;
      double connectionTime;
      var success = TestProxy("1.2.3.4",3128, out errorMsg, out connectionTime);

      //Log Result
    } catch (Exception ex) {
      //Log Error
    }
  });

 

 

 

 

 

Note, one can also use the REST API on the above site to query for working proxies: https://theproxisright.com/#apidemo

 

(Disclosure, I worked on the above site)

 

  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오스토리로 보내기

댓글목록

응용프로그램개발 목록

Total 3건 1 페이지
응용프로그램개발 목록
번호 제목 글쓴이 날짜 조회
3 visual studio 2008 배포프로젝트 설치 파일 만들기 인기글첨부파일 운영자 03-23 621
2 INI 파일 읽고 쓰기 C#, VB.NET, and VBScript 인기글첨부파일관련링크 운영자 03-21 317
열람중 c# 프록시 빠르게 살아있는지 체크 댓글1 인기글 운영자 12-18 730
게시물 검색


홈쇼핑 인기상품을 국내 최저가로 구매하실 분들만 들어 오세요.^0^

*패쇄몰*이라 국내 최저가가 가능합니다.

새로운 상품을 매일 공동구매로 진행.

*패쇄몰*이라 싸게 판매가 되어 금방 매진이 됩니다.(꼭 참고 하세요)

오셔서 득템 하세요. ^0^

후회하지 않습니다.^0^

교환,반품,A/S도 철저히 이루어 집니다.

아래 주소로 들어오시면 됩니다.^0^

▶밴드 바로가기 클릭◀
https://bit.ly/2q69oFl

접속자집계

오늘
190
어제
299
최대
5,398
전체
1,954,914
Copyright © http://jamesoft.kr All rights reserved.
상단으로
모바일 버전으로 보기