Показать сообщение отдельно

  #950  
Старый 04.01.2010, 14:11
Nik(rus)
Познающий
Регистрация: 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()
 
Ответить с цитированием