TaskManager 를 이용 하여 2 만 개의 대리 IP 를 기어 올 라 자동 투표 기능 을 실현 하 다

1.한 사람 이 여러 표를 던 질 수 있 는 지,안 되면 한 사람 이 여러 표를 던 지 는 것 을 제한 하 는 것 은 무엇 입 니까?
답:투표 사 이 트 는 IP 나 한 사용자 가 한 표 만 던 질 수 있 도록 제한 하여 악의 적 인 표 긁 기 행 위 를 방지 합 니 다.
2.하나의 IP 한 표 라면 여러 개의 IP 를 대표 하여 많은 표를 던 질 수 있 습 니까?
답:답 은 긍정 적 이다.
3.어떤 방법 으로 코드 에서 자신 이 요청 한 IP 를 바 꿀 수 있 습 니까?
응답:HTTP 요청 시 프 록 시 IP 설정
4.여러 개의 프 록 시 IP 를 어디서 얻 고 얻 은 후에 코드 자동화 투 표를 어떻게 사용 해 야 합 니까?
답:문장 뒤의 내용 을 보 세 요.
이 편 은 Task Manager 내 장 된 미 션-대리 IP 파충류 구현 디 테 일 을 소개 합 니 다.준비 해 야 할 지식:HtmlAgility Pack 해석 HTML,Quart.net.
에이전트 IP 소개
바 이 두 백과 소개:프 록 시(영어:Proxy)는 네트워크 프 록 시 라 고도 부 르 며 특수 한 네트워크 서비스 로 하나의 네트워크 단말기(일반적으로 클 라 이언 트)가 이 서 비 스 를 통 해 다른 네트워크 단말기(일반적으로 서버)와 비 직접적인 연결 을 할 수 있 도록 합 니 다.일부 게 이 트 웨 이,공유 기 등 네트워크 설 비 는 네트워크 에이전트 기능 을 갖 추고 있다.일반적으로 프 록 시 서 비 스 는 네트워크 단말기 의 프라이버시 나 안전 을 보장 하고 공격 을 방지 하 는 데 유리 하 다 고 생각한다.
현재 많은 제조 업 체 들 이 프 록 시 IP 온라인 획득 을 제공 하지만,많은 업 체 들 이 수 십 개의 테스트 를 제공 하고 있 으 며,더 많은 프 록 시 IP 를 사용 하려 면 비용 을 지불 하고 구 매해 야 한다.여기 서 저 는 많은 대리 IP 를 제공 하 는 사 이 트 를 찾 았 습 니 다.바 이 두'대리 ip'(제 가 광 고 를 한다 고 생각 하지 않도록)또는 오픈 소스 Task Manager 를 참고 하여 이 글 을 소개 할 수 있 습 니 다.
이렇게 많은 온라인 프 록 시 IP 가 있 으 면 글 의 시작 문 제 를 해결 할 수 있 습 니 다.4.그런데 문제 가 있 습 니 다.이 데 이 터 는 모두 웹 페이지 의 것 입 니 다.저 는 코드 에서 어떻게 사용 합 니까?이 는 HtmlAgility Pack 공구 꾸러미 를 사 용 했 습 니 다.이름 을 보면 HTML 을 분석 하 는 데 사 용 될 것 이 라 고 짐작 할 수 있 습 니 다.
HtmlAgilityPack 사용
HtmlAgility Pack 은 HTML 요 소 를 분석 하 는 오픈 소스 라 이브 러 리 입 니 다.가장 큰 특징 은 XPath 를 통 해 HMTL 을 분석 할 수 있 습 니 다.만약 에 C\#로 XML 을 조작 한 적 이 있다 면 HtmlAgility Pack 을 사용 하 는 것 도 편리 할 것 입 니 다.
간단 한 HTML 해석

string HTML = @"<html><head><title>      </title></head><body> 
   <div id='div1' title='div1'> 
   <table> 
    <tr> 
    <td>1</td> 
    <td title='cn'>cn</td> 
    </tr> 
   </table> 
   </div> 
  </body></html>"; 
  var doc = new HtmlDocument(); 
  doc.LoadHtml(HTML); 
  //       
  Console.WriteLine("  title:"+doc.DocumentNode.SelectSingleNode("/html/head/title").InnerText); 
  //  div1     1 
  HtmlNode divNode1 = doc.GetElementbyId("div1"); 
  //  div1     2 
  HtmlNode divNode2 = doc.DocumentNode.SelectSingleNode("//div[@id='div1']"); 
  //    1   2     
  Console.WriteLine("   1   2    :" + (divNode1 == divNode2)); 
  //      table 
  HtmlNodeCollection tableCollection = doc.DocumentNode.SelectNodes("//table"); 
  Console.WriteLine("  table  :"+tableCollection.Count); 
  //  table   td      
  HtmlNodeCollection tdCollection = tableCollection[0].SelectNodes("tr/td"); 
  foreach (var td in tdCollection) 
  { 
  HtmlAttribute atr = td.Attributes["title"]; 
  Console.WriteLine("td InnerText:" + td.InnerText + " | td title   :" + (atr == null ? "" : atr.Value)); 
  } 
  Console.Read();
돌아가다
대리 IP 파충류 실현
HtmlAgility Pack 의 간단 한 조작 을 알 게 된 후에 정식 적 으로 기어 오 르 는 과정 에 들 어 갔다.기어 오 르 는 웹 페이지 의 IP 봉쇄 기능(한 동안 요청 빈도 가 현재 IP 를 너무 높 게 봉쇄 함)때문에 디자인 과정 에서 저 는 기어 오 르 는 다섯 번 의 대리 IP 를 사용 하여 사이트 의 제한 을 돌파 했다(자신 이 나 쁜 것 을 느 꼈 다).

전체 실현 논리
.net 에서 WebRequest 를 사용 하면 HTTP 의 get Post 요청 을 모 의 할 수 있 습 니 다.마지막 으로 원 하 는 것 은 요청 할 때 사용 할 프 록 시 IP 를 설정 할 수 있 습 니 다.빨간색 코드 에 중점 을 두 고 있 습 니 다.

/// <summary> 
 ///        
 /// </summary> 
 /// <param name="Url"></param> 
 /// <param name="type"></param> 
 /// <returns></returns> 
 public static string GetUrltoHtml(string Url, string type) 
 { 
  try 
  { 
  System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url); 
 
  WebProxy myProxy = new WebProxy("192.168.15.11", 8015); 
  //    (        ,        ) 
  myProxy.Credentials = new NetworkCredential("admin", "123456"); 
  //           
  wReq.Proxy = myProxy; 
  // Get the response instance. 
  System.Net.WebResponse wResp = wReq.GetResponse(); 
  System.IO.Stream respStream = wResp.GetResponseStream(); 
  // Dim reader As StreamReader = New StreamReader(respStream) 
  using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.GetEncoding(type))) 
  { 
   return reader.ReadToEnd(); 
  } 
  } 
  catch (System.Exception ex) 
  { 
  //errorMsg = ex.Message; 
  } 
  return ""; 
 } 
프 록 시 IP 를 어떻게 사용 하 는 지 알 고 우리 의 목표 에 한 걸음 더 가 까 워 졌 습 니 다.다음은 프 록 시 IP 획득 의 실현 입 니 다.코드 가 좀 많 기 때문에 저 는 중요 한 부분 만 붙 였 습 니 다.IpProxyGet.cs 소스 코드 는 글 의 끝 에 가서 스스로 다운로드 할 수 있 습 니 다.

/// <summary> 
 ///       
 /// </summary> 
 /// <returns>   </returns> 
 private static int GetTotalPage(string IPURL, string ProxyIp) 
 { 
 var doc = new HtmlDocument(); 
 doc.LoadHtml(GetHTML(IPURL, ProxyIp)); 
 var res = doc.DocumentNode.SelectNodes(@"//div[@class='pagination']/a"); 
 if (res != null && res.Count > 2) 
 { 
  int page; 
  if (int.TryParse(res[res.Count - 2].InnerText, out page)) 
  { 
  return page; 
  } 
 } 
 return 1; 
 } 
각 페이지 HTML 데이터 분석

/// <summary> 
 ///         
 /// </summary> 
 /// <param name="param"></param> 
 private static void DoWork(object param) 
 { 
  //     
  Hashtable table = param as Hashtable; 
  int start = Convert.ToInt32(table["start"]); 
  int end = Convert.ToInt32(table["end"]); 
  List<IPProxy> list = table["list"] as List<IPProxy>; 
  ProxyParam Param = table["param"] as ProxyParam; 
  //     
  string url = string.Empty; 
  string ip = string.Empty; 
  IPProxy item = null; 
  HtmlNodeCollection nodes = null; 
  HtmlNode node = null; 
  HtmlAttribute atr = null; 
  for (int i = start; i <= end; i++) 
  { 
  LogHelper.WriteLog(string.Format("    ,  {0}~{1},    {2}", start, end, i)); 
  url = string.Format("{0}/{1}", Param.IPUrl, i); 
  var doc = new HtmlDocument(); 
  doc.LoadHtml(GetHTML(url, Param.ProxyIp)); 
  //        tr 
  var trs = doc.DocumentNode.SelectNodes(@"//table[@id='ip_list']/tr"); 
  if (trs != null && trs.Count > 1) 
  { 
   LogHelper.WriteLog(string.Format("    {0},    {1}, {2}   ", i, url, trs.Count)); 
   for (int j = 1; j < trs.Count; j++) 
   { 
   nodes = trs[j].SelectNodes("td"); 
   if (nodes != null && nodes.Count > 9) 
   { 
    ip = nodes[2].InnerText.Trim(); 
    if (Param.IsPingIp && !Ping(ip)) 
    { 
    continue; 
    } 
    //   IP    
    item = new IPProxy(); 
    node = nodes[1].FirstChild; 
    if (node != null) 
    { 
    atr = node.Attributes["alt"]; 
    if (atr != null) 
    { 
     item.Country = atr.Value.Trim(); 
    } 
    } 
    item.IP = ip; 
    item.Port = nodes[3].InnerText.Trim(); 
    item.ProxyIp = GetIP(item.IP, item.Port); 
    item.Position = nodes[4].InnerText.Trim(); 
    item.Anonymity = nodes[5].InnerText.Trim(); 
    item.Type = nodes[6].InnerText.Trim(); 
    node = nodes[7].SelectSingleNode("div[@class='bar']"); 
    if (node != null) 
    { 
    atr = node.Attributes["title"]; 
    if (atr != null) 
    { 
     item.Speed = atr.Value.Trim(); 
    } 
    } 
    node = nodes[8].SelectSingleNode("div[@class='bar']"); 
    if (node != null) 
    { 
    atr = node.Attributes["title"]; 
    if (atr != null) 
    { 
     item.ConnectTime = atr.Value.Trim(); 
    } 
    } 
    item.VerifyTime = nodes[9].InnerText.Trim(); 
    list.Add(item); 
   } 
   } 
   LogHelper.WriteLog(string.Format("    {0}, {1}   ", i, trs.Count)); 
  } 
  LogHelper.WriteLog(string.Format("    ,  {0}~{1},    {2}", start, end, i)); 
  } 
 }
최종 적 으로 2 만 여 개의 데 이 터 를 얻 을 수 있 습 니 다.

자동 투표 단순 실현
.net 의 웹 브 라 우 저 컨트롤 을 사용 하여 페이지 를 불 러 옵 니 다.최종 효 과 는 다음 과 같 습 니 다.

\#region 프 록 시 IP 설정 

 private void button2_Click(object sender, EventArgs e) 
 { 
  string proxy = this.textBox1.Text; 
  RefreshIESettings(proxy); 
  IEProxy ie = new IEProxy(proxy); 
  ie.RefreshIESettings(); 
  //MessageBox.Show(ie.RefreshIESettings().ToString()); 
 } 
 #endregion 
 #region     IP 
 private void button3_Click(object sender, EventArgs e) 
 { 
  IEProxy ie = new IEProxy(null); 
  ie.DisableIEProxy(); 
 } 
 #endregion 
 #region      
 private void button1_Click(object sender, EventArgs e) 
 { 
  string url = txt_url.Text.Trim(); 
  if (string.IsNullOrEmpty(url)) 
  { 
  MessageBox.Show("         "); 
  return; 
  } 
  this.webBrowser1.Navigate(url, null, null, null); 
 } 
 #endregion 
총결산
이 편 에서 소개 할 내용 은 여기 서 마 치 겠 습 니 다.다음은 제 기 대 를 적어 주세요!좋아 하 는 친구 가 함께 Task Manager(완전히 개 원 된)를 보완 하여 생활 의 편리 성 을 향상 시 킬 수 있 는 도구 가 되 고 새로운 임 무 를 많이 추가 하 기 를 바 랍 니 다.예 를 들 어 다음 날 비가 오 거나 눈 이 오 면 메 일 로 우산 을 가 져 가라 고...자,이제 소스 코드 를 풀 시간 입 니 다.다음 편 기대 해 주세요!

좋은 웹페이지 즐겨찾기