Created
October 12, 2010 00:13
-
-
Save bussiere/621444 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
error : | |
Traceback (most recent call last): | |
File "C:\DEV\Python2\lib\SocketServer.py", line 284, in _handle_request_noblock | |
self.process_request(request, client_address) | |
File "C:\DEV\Python2\lib\SocketServer.py", line 310, in process_request | |
self.finish_request(request, client_address) | |
File "C:\DEV\Python2\lib\SocketServer.py", line 323, in finish_request | |
self.RequestHandlerClass(request, client_address, self) | |
TypeError: __call__() takes exactly 3 arguments (4 given) | |
""" | |
# MetaProject | |
# -*- coding: utf-8 -*- | |
import socket | |
import sys | |
import re | |
import base64 | |
import binascii | |
import time | |
import zlib | |
import sys | |
import StringIO | |
import contextlib | |
import smtplib | |
import threading | |
""" | |
Thanks to : | |
People from irc : | |
Flox,Luyt | |
People from stack Overflow : | |
Philippe Leybaert,Platinum Azure,methodin,Suresh Kumar,S.Lott,MatTheCat, | |
kevpie,Ignacio Vazquez-Abrams,adamk,Frédéric Hamidi,THC4k,THC4k,Blam | |
""" | |
def sendmail(exp,dest,msg): | |
server = dest.split("@")[1] | |
s = smtplib.SMTP("localhost") | |
s.sendmail(exp,dest,msg) | |
@contextlib.contextmanager | |
def stdoutIO(stdout=None): | |
old = sys.stdout | |
if stdout is None: | |
stdout = StringIO.StringIO() | |
sys.stdout = stdout | |
yield stdout | |
sys.stdout = old | |
import SocketServer | |
import threading | |
class MetaProject(SocketServer.BaseRequestHandler): | |
def __init__(self,host,port): | |
self.host = host | |
self.port = port | |
if self.port == 80 : | |
self.handler = Serverhttp | |
if self.port == 25 : | |
self.handler = Serversmtp | |
def __call__(self,host,port): | |
self.host = host | |
self.port = port | |
if self.port == 80 : | |
self.handler = Serverhttp | |
if self.port == 25 : | |
self.handler = Serversmtp | |
def handle(self): | |
data = self.request[0].strip() | |
socket = self.request[1] | |
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) | |
message = self.handler.traitement(data) | |
socket.sendto(message, self.client_address) | |
class Serversmtp(): | |
def traitement(self,data): | |
return "toto" | |
class Pages : | |
def root(self,cgi=None): | |
return """eNqtVV1zqkgQfedX3MrrbNVREBnu5ubWCCoajPiRaHyTxEGNiAKC8uu3B7Nb+7JvO1QNNAOnT5/u | |
6Xnc5vHhSXsMk8/bk5bv7tdjmNK7XRz9yNKPXw+f63z9cxevow12H8mf4TrbtFt/CCE6QnRFl2Z1 | |
H4hOoh57EU2OmsRETQPx9/p/D+3fhhXMLRhVrw07yC/ANPSuaOi6BTavihB2UZiwrW1D2sNNp8KL | |
lwhUNheFLaRwoQVeJtDotUXAa0AUlYUmMwzw0YlV6KVeievixiUPM8zhndMrOexaBWhYyPn5hKqn | |
C3BLi0oPQWvgojJtAmSbyMXE+BLEIOMFD5N8j65/NFDeTAIMcunDtXxycKnsgBdnJsFxVMCWZhf2 | |
83ZqYPz+Tgz7PVFwvlWAA+GgaloiQINhj5d2OELpNCxw5yotOFlgoYyZXXBxvqSYpW6oESKDokxr | |
b6vuAdVsSAyt/cRFUDsYdzqSMznx6CMDsN0TB29lIwJMXUkOmi1ykF58aM/n4wL2MeOKLYG2xvsl | |
KtZ3JTe/SNRgUJIE+pAYs61ykHRJAsc6FSTEpRaOwV6WrGClZmz2OGTYgKWVjftgqNrQ9Xgm+XlP | |
jMbDEWXtMiHG5q70yUFE9q0nAjaezXwc31otWEOmvRUQX30LVp4GKjuQsNW9DT+FfkmmBc8VYDB8 | |
V4BzJcFXqSTgZOvPZNtbiiA5fB01tKdvXsA2s2iPuBtNAS8xFLnCgjmutmj210MCPNAP49UHJeWy | |
pJBbtW0OyNYDIbmtGGvjAZVBe7voSfYxv7o4xbYDq73bBncNmYqbH9cFuPykH15WVJfVZkWMjJiy | |
HgwnHQr5lQBb2r6mnNGLtickk8udRDNtZxSqktDktBOMlEVgxk4vFLaBONz1cLs5KuQ4CjA+EWq1 | |
WWhK1AM9j09dAmSkie1sqZCtjRfW2Sigc0pSvigTEvaVRDeXE5JgxMz7Oguz1REDT3xqhPimRDwo | |
D6bK2nroSJ6v5inc2+W5ri2gTnTjHJMEB3KI55WYo3iLHPDdZCHvjKlo98AtOl3B+/0PH93Z+opr | |
N8oL3uuOKgjhb1GKTlMSGlU+UJECJh8D/eXEx63/ToDTtSgw1vYHeRe5Hvbk1TbQEW5DAZDyrggM | |
AvQqsoUpyc7T728L2jpMD505AVJE3I5JM3QWVNmNM3PxnTy1taZfYYSyK5ikbkJsxMQzUY4EV91l | |
Q8UpXFm3jeDePS6Dl4lGGiwJcPROaS/6A2Lvx8Z3WTQ/5zrKZGSCABTD0mM1Y+VAhiqCjGyn9d2+ | |
SDPqX8wPq4DFyxtV8mvZhd3PtlRYSlQLxKhKUCrAzyVE5LdVyATofEugK9ui7lF32oja8f8x/mnb | |
d8Bfvx6e7kfHb+2U7o75j4c8yZMH9qDePmi/nzTtEfej5hH1yfMXx7rT9A==""" | |
def favico(self): | |
return """eNqdk39MVWUYx99zDrZkJJc/dGtqsVZKFmttFhcuF0wXC1bTZmq0qVuWa8t+/NXPW1MQCk3FMBKs | |
LNauoq6AAr2zsFLLHAN1YQXJryzJewXuhV29HO759JyX//uj9933vOe8e7/f5/k+73OUMmR6PEqe | |
meq5FKXmKKWyBLIlO9P7/zUiEzaB02GWt43ycHOUx2St6YwTtxP0DZ6n+LV5LH5DURgwWRJQ5L+p | |
eEi+Xa4zZbP+aD9pByLMaR5jdkuUuV9NcNuhKIFTI4DD0bON3P+Kha/coLDMouAtRYHwl72u6IvE | |
mNvwG57QddJCUdJbY6S3jGmN+w5fYTwhCnackor55FZK3AqTfFmXbDbxSx4T9g1ygh2or0cxTzuk | |
nrSZ2R5HHbpKSVMvjuPAlMOq3XexuErh26HwC3/ZlhmShwFJOPfPON6mTlKb+lGtf2J+McSixov8 | |
Hom6VAaGf6Ww8hZyq8X7exb+KpOCCvGwRXHueJDkSFj77B6bpOnSMLVdfVwdv4477KlJXggWs2iH | |
gbdG4otG7nbx8K5oicbO4jv4eJ2XlrdX8131i4z0dIlSUqZDOBbm+YNFZAs3v1a4NdPw7xJsE2xV | |
NJQu5PNV8/ik5Gb2PpJBdLhfe74cGeTx+gVk75F4H5r4BF55970vddtl4JccvFKPg6tn89FyD8GX | |
ltLesFX7tSXvn3tOcPurJg/sU+TUCeol3z2GhteNv92g4B2D/esWcrH9CI7UMREbpe/Ep1wb6tEe | |
6o5VcG+ZxKy3yNtrkSMecgV5u6UPxMdS4V8b7NW1i0eHad2UxfEnFKG1s7jcFdL7+5rryHx5Pjkf | |
SMxaS/t/sGom2c/mkX7PNvf6NC40lhFaqTj7TArfPmlyprpU58ANyLr7J2669QcyFjSTkdnGDI/0 | |
izmIMrqF7PYHtAd8/LhWeBtNTj1l0rlzja6DO1asvESKmpDzYKmkrOPS+39hmT3Td2zbtG26kzMb | |
FF0bFd+XKi58We6mr3uvqGgAQyVQ1hSGkRCNMdEIi0a/2yDa57HyFYTWKDo2mHzz9Cxif/+h76L7 | |
lzipaVfkbBLLcITnxo9LPhHxMKD/QeQfHOrtILg+k88eTeH8kUqxlGQ0miCv8KT2aZqTWsNU03yl | |
RjR3s6H+93C5/wIoQoi6""" | |
def toto(self): | |
return """eNqzySjJzbHjsknKT6m04yrLLy1WSC1JLVZIVCjJL8nnstGHSNjog9UBAGolDzo=""" | |
def p404(self): | |
return """eNqzySjJzbHjsknKT6m04zIxMFFIScwrVihJVEhLTE5VUOSy0YdI2eiDVQIAZBgOeA==""" | |
class Serverhttp(): | |
def __init__(self): | |
self.Pages = Pages() | |
self.GET = re.compile("GET.*?HTTP") | |
self.POST = re.compile("POST.*?HTTP") | |
self.balisep = re.compile("<\?.*\?>",re.DOTALL) | |
def decompress_img(self,img): | |
img = zlib.decompress(base64.decodestring(img)) | |
return img | |
def decompress_html(self,html) : | |
page = "HTTP/1.0 200 OK\r\nContent-type:text/html;charset=utf8\r\n\r\n" | |
page+=zlib.decompress(base64.decodestring(html)) | |
commands = self.balisep.findall(page) | |
print commands | |
for c in commands : | |
command = c.replace("<? ","") | |
command = c.replace("<?","") | |
command = command.replace(" ?>","") | |
command = command.replace("?>","") | |
print command | |
with stdoutIO() as s: | |
exec(command) | |
page = page.replace(c,s.getvalue()) | |
return page | |
def traitement(self,data): | |
url = self.POST.findall(data) | |
url = self.GET.findall(data) | |
url = url[0].replace("GET","") | |
url = url.replace("POST","") | |
url = url.replace("HTTP","") | |
url = url.replace(" ","") | |
url = re.sub(r"^/","",url) | |
if url != "": | |
urls = url.split("/") | |
if len(urls) != 0 : | |
print urls | |
url = urls[0] | |
print "url %s"%url | |
if url == "favicon.ico": | |
return self.decompress_img(self.Pages.favico()) | |
elif url == "" : | |
return self.decompress_html(self.Pages.root()) | |
elif url in dir(self.Pages) and url != "": | |
return self.decompress_html(getattr(self.Pages,url)()) | |
else : | |
return self.decompress_html(self.Pages.p404()) | |
def serve_thread(host, port): | |
server = SocketServer.TCPServer((host, port), MetaProject(host,port)) | |
server.serve_forever() | |
if __name__ == "__main__": | |
threading.Thread(target=serve_thread,args=('localhost', 47000)).start() | |
threading.Thread(target=serve_thread,args=('localhost', 29000)).start() | |
print "toto" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment