Created
October 12, 2010 00:38
-
-
Save bussiere/621465 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
# MetaProject v 0.2102 | |
# -*- 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 | |
import SocketServer | |
SocketServer.TCPServer.allow_reuse_address = True | |
""" | |
Thanks to : | |
People from irc : | |
Flox,Luyt | |
People from stack Overflow (http://stackoverflow.com/): | |
Philippe Leybaert,Platinum Azure,methodin,Suresh Kumar,S.Lott,MatTheCat, | |
kevpie,Ignacio Vazquez-Abrams,adamk,Frédéric Hamidi,THC4k,THC4k,Blam,bstpierre | |
People from 42 le mag : | |
Whidou | |
""" | |
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 | |
class Serversmtp(SocketServer.BaseRequestHandler): | |
def handle(self): | |
self.data = self.request.recv(1024) | |
socket = self.request | |
print "%s wrote:" % self.client_address[0] | |
self.data = self.traitement(self.data) | |
socket.sendto(self.data, self.client_address) | |
def traitement(self,data): | |
return "toto" | |
class Pages : | |
def __init__(self): | |
self.balisep = re.compile("<\?.*\?>",re.DOTALL) | |
self.header = re.compile("HTTP/1.0 200 OK\r\nContent-type:text/html;charset=utf8\r\n\r\n",re.DOTALL) | |
self.quest = re.compile("\?>|\r\?>|\<\?|\<\?\r",re.DOTALL) | |
def root(self,cgi=None): | |
return self.decompress_html("""eNqzySjJzbHjsknKT6m04yrJhECbpCKgWGZuukJxUbKtUlpiWWZyfp4ekFCyg8jZcxUUZeaVKCiV | |
5JfkK2krgUSVoGLFqTlpegUmBiYamlz2dlxcNvoQ0230wZYBAId3I/o=""") | |
def faviconico(self): | |
return self.decompress_img("""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 self.decompress_html("""eNqzySjJzbHjsknKT6m04yrLLy1WSC1JLVZIVCjJL8nnstGHSNjog9UBAGolDzo=""") | |
def p404(self): | |
return self.decompress_html("""eNqzySjJzbHjsknKT6m04zIxMFFIScwrVihJVEhLTE5VUOSy0YdI2eiDVQIAZBgOeA==""") | |
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"+zlib.decompress(base64.decodestring(html)) | |
commands = self.balisep.findall(page) | |
for c in commands : | |
command = self.quest.sub("",c) | |
with stdoutIO() as s: | |
exec(command) | |
result = s.getvalue() | |
result = self.header.sub("",result) | |
page = page.replace(c,result) | |
return page | |
class Serverhttp(SocketServer.BaseRequestHandler): | |
def handle(self): | |
self.Pages = Pages() | |
self.GET = re.compile("GET.*?HTTP") | |
self.POST = re.compile("POST.*?HTTP") | |
self.data = self.request.recv(1024) | |
socket = self.request | |
print "%s wrote:" % self.client_address[0] | |
self.data = self.traitement(self.data) | |
socket.sendto(self.data, self.client_address) | |
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) | |
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 == "" : | |
return self.Pages.root() | |
elif url in dir(self.Pages) and url != "": | |
return getattr(self.Pages,url)() | |
else : | |
return self.Pages.p404() | |
def serve_thread(host, port): | |
if port == 4242 : | |
server = SocketServer.TCPServer((host, port), Serverhttp,bind_and_activate=True) | |
elif port == 25 : | |
server = SocketServer.TCPServer((host, port), Serversmtp,bind_and_activate=True) | |
server.serve_forever() | |
if __name__ == "__main__": | |
threading.Thread(target=serve_thread,args=('10.92.250.130', 4242)).start() | |
threading.Thread(target=serve_thread,args=('localhost', 25)).start() | |
print "toto" | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment