
04.01.2010, 14:11
|
|
Познающий
Регистрация: 19.06.2009
Сообщений: 34
Провел на форуме: 88269
Репутация:
10
|
|
PyRoxy - мини-проксик на питоне (чуток кривой, с картинками небольшой баг, иногда не принимает... но ведь картинки не самое главное?  )
Из фич - некоторые картинки все-же показывает (видимо пакет с большими картинками... большеват), меняет Юзер-Агент, да и вроде-как даже POST исполняет!
Код:
# -*- coding: cp1251 -*-
import SocketServer
import re
import socket
import urllib
import httplib
import thread
class MyTCPHandler(SocketServer.BaseRequestHandler):
def handle(self):
self.data = self.request.recv(4096)
if (self.data != ""):
get = re.search("GET ([^: ]*):([^ ]*) ([^ \n]*)\n",self.data)
self.data = re.sub("User-Agent: [^\n]*\n","User-Agent: " + str(uagent) + "\n",self.data,1)
if not get:
get = re.search("POST ([^: ]*):([^ ]*) ([^ \n]*)\n",self.data)
if get:
print "GET: " + str(get.group(1)) + ":" + str(get.group(2))
print "-----------------------------------"
host = urllib.splithost(get.group(2))
ip = 0
try:
ip = socket.getaddrinfo(host[0],80)
ip = ip[0][4][0]
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((ip,80))
sock.send(self.data)
if get.group(2).endswith('.png') or get.group(2).endswith('.jpg') or get.group(2).endswith('.jpeg') or get.group(2).endswith('.gif'):
conn = httplib.HTTPConnection(host[0])
conn.request('GET',host[1])
res = conn.getresponse()
data = res.read()
conn.close()
self.request.send(data)
recv2 = sock.recv(4096)
recv = ""
while recv2 <> "":
reg = re.search("<title>(.*)</title>",recv2)
if reg:
title = str(reg.group(1)) + " ^ UnDer PyRoxy"
recv = re.sub("<title>.*</title>","<title>" + str(title) + "</title>",recv2,1)
recv += recv2
recv2 = sock.recv(4096)
self.request.send(recv)
except:
recv = "HTTP/1.1 200 OK\nDate: 123\nServer: SOME!\nContent-Length: 120\nConnection: close\nContent-Type: text/html; charset=windows-1251\n\n <html><title>PyRoxy: ERROR</title><body><div align='center'><font color='red'>Error connecting to server</font></div></body></html>"
self.request.send(recv)
else:
recv = "HTTP/1.1 200 OK\nDate: 123\nServer: SOME!\nContent-Length: 120\nConnection: close\nContent-Type: text/html; charset=windows-1251\n\n <html><title>PyRoxy: ERROR</title><body><div align='center'><font color='red'>Unknown packet</font></div></body></html>"
self.request.send(recv)
print "_._._._._-=PyRoxy v. 0.1=-_._._._._"
print "-----------------------------------"
uagent = "AK-47"
socket.setdefaulttimeout(1000)
HOST, PORT = "127.0.0.1", 9999
print "Binding on " + str(HOST) + ":" + str(PORT)
print "-----------------------------------"
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()
|
|
|