簡単なQQエージェントの検証

2400 ワード

簡単なQQエージェントの検証
QQは多くの社内で使用が禁止されています.QQを使うために、少しコンピュータを知っている人は代理店を使うことを知っています.QQはsocketとhttpエージェントの2つの機能を提供し、socketエージェントの機能は強いが、一般的な会社は対外的に接続を許可するポート番号が限られており、利用しにくい.ほとんどの会社は外部の80ポートへの接続を許可しており、QQのhttpエージェントを使用することは可能です.しかし、使えるQQエージェントを見つけるのはちょっと面倒なので、以下のPythonコードはQQエージェントの検証を自動的に行う機能を提供しています.
import urllib2
import socket
import re

f = urllib2.urlopen('http://www.proxycn.com/html_proxy/http-1.html')
content = f.read()
f.close()
ipPattern = re.compile(r'(\d+\.\d+\.\d+\.\d+):80')
ipList = ipPattern.findall(content)
print ipList
requestData = "CONNECT http.tencent.com:443 HTTP/1.1\x0d\x0a"
requestData += "Accept: */*\x0d\x0aContent-Type: text/html\x0d\x0a"
requestData += "Proxy-Connection: Keep-Alive\x0d\x0a"
requestData += "Content-length: 0\x0d\x0a\x0d\x0a"
for ip in ipList:

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        s.connect((ip,80))
        s.send(requestData)
        data = s.recv(64)
        if data.find("200 Connection established")!= -1:
            print ip, 'good'
            # A vailable proxy is found once, then exit the program
            s.close
            exit(0)
        else:
            print ip, 'bad'
    except socket.error:
        print ip, 'dead'
    finally:
        s.close

プログラムは利用可能なQQエージェントを見つけた後に終了し、goodで識別します.他の2つのエージェントサーバの状態はdeadであり、ローカルでエージェントサーバに接続できないかbadであり、エージェントサーバと接続できるが、エージェントはQQサーバと通信できないことを示している.
コード構想
エージェント中国で80ポートのエージェントサーバリストを取得しurllib 2モジュールを用いてページデータを取得し,80ポートのIPアドレスをlistに格納する正規表現を解析した.次の数行のコードは簡単ですが、重要なのは、下位レベルのsocketオブジェクトを使用して、適切なパケットを構築してエージェントを通じて、QQサーバとの接続を要求し、読み出した戻りパケットを通じて接続が確立できるかどうかを検証することです.
ここで主にHTTPプロトコルのCONNECTの概念に関して、多くの人はhttpエージェントがただwebブラウズのためにサービスを提供するだけだと思っているかもしれないが、実はCONNECT方法はユーザーがTCPを創立していかなるポートに接続することを許可して、これはエージェントがHTTPだけではなくて、FTP、QQなどのその他のプロトコルにも使用することができることを意味します.ただネット上でCONNECTの方法を提供するエージェントサーバーは比較的に少なくて、私は時々たくさん掃除して、1つの利用可能なエージェントを見つけることができませんでした.逆に言えば、时にはあなたが見つけたホームページを閲覧できるhttpサーバーは、必ずしもQQで使えるとは限らない.QQに必要なのはCONNECTの代理店だ.ウェブブラウズはHTTPプロトコルのGETまたはPOSTメソッドのみを使用するのが一般的で,この2つのメソッドを提供するサーバが多い.
コードの原理を理解して、少し変更して、他のタイプのエージェントの検証に使用することができて、必要なのはいくつかの基本的なネットワークの知識とデータの新聞の送信と受信です.