python 實現代理服務器


# encoding:utf-8
import socket
import thread
import re

def getAddr(d):
 a = re.search("Host: (.*)\r\n", d)
 host = a.group(1)
 a = host.split(":")
 if len(a) == 1:
  return (a[0], 80)
 else:
  return (a[0], int(a[1]))

def client(conn, caddr):
    while 1:
        try:
            data = conn.recv(4096)

            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            addr = getAddr(data)
            print "目的服務器:",addr
            s.connect(addr)
            print '發給目的服務器數據:',data
            s.sendall(data)#將請求數據發給目的服務器
            d = s.recv(40960)#接收目的服務器發過來的數據
            s.close()#斷開與目的服務器的連接
            print '接收目的服務器數據:',d
            conn.sendall(d)#發送給代理的客戶端
        except Exception, e:
            print '代理的客戶端異常:%s, ERROR:%s'%(caddr,e)
            conn.close()
            break

def serve(PORT = 10086):
 # 創建
 IP = "0.0.0.0"
 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 s.bind((IP, PORT))
 s.listen(10)
 print 'proxy start...'
 while True:
  conn, addr = s.accept()
  print 'conn:', conn
  print "addr:", addr
  thread.start_new_thread(client, (conn, addr))

try:
 serve()
except Exception as e:
 print '代理服務器異常',e

print 'server end!!!'

http 代理服務器。 無需指定目的服務器,自動讀取地址並連接。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM