Accueil > > > REMOTESHELL + DOWNLOAD & UPLOAD DE FICHIER
REMOTESHELL + DOWNLOAD & UPLOAD DE FICHIER
Information sur la source
Description
Si vous avez 2 pc a des endrois different vous pourrais utiliser se mini programme pour vous connecter l'un a l'autre pour y prendre/maitre des fichier ou éxécuter des commande dans un shell . Je poste la source car je ne crois pas avoir vu de source qui permaite de telecharger ou d uploader des fichier en passent par une socket .
Source
- ################## 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 ##################
Conclusion
Le code du serveur et de toute évidence très moche , je le mais ici que dans l'éventualité ou quelqu'un aurais du temp a perdre et essaye cette petit application client/serveur ... Donc pas la peinne de vous acharner dessu je ferais la sourde oreille, prefairer critiquer le client svp ... .
Historique
- 24 octobre 2007 02:48:43 :
- Gerre quelque erreur en plus ... code source un peux plus propre
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
récupérer un objet shell (folder) sous windows [ par GwenArDu ]
Bonjour à tous !Je n'arrive pas à trouver comment utiliser l'API windows BrowsForFolder pour récupérer un objet folder depuis python.Merci !<a href="h
|
Derniers Blogs
[RIA SERVICES] MAITRE - DéTAIL ET DOMAINDATASOURCE[RIA SERVICES] MAITRE - DéTAIL ET DOMAINDATASOURCE par Audrey
A l'occasion d'un projet client, j'ai utilisé RIA Services avec Silverlight 3 (mais cela fonctionne aussi avec la version 4), et je l'ai utilisé pour une interface façon Maitre / Détail. Voici comment j'ai procédé pour arriver à mes fins. Nous allons pren...
Cliquez pour lire la suite de l'article par Audrey CSDL FUNCTIONCSDL FUNCTION par Matthieu MEZIL
Dans mon post précédent , j'ai utilisé une CSDL Function afin de générer une requête SQL avec un DateDiff utilisant la date courante sur la BD à partir d'une requête LINQ. Dans le cadre de ce post , vous avez probablement remarqué que dans le cadre de plu...
Cliquez pour lire la suite de l'article par Matthieu MEZIL LINQ TO ENTITIESLINQ TO ENTITIES par Matthieu MEZIL
Cette semaine je suis à Montréal en tant que speaker sur Entity Framework pour l'évènement confoo . J'en profite pour remercier les organisateurs de cet évènement de m'avoir fait confiance et Access-IT de m'avoir permis d'y participer. En parallèle, j'ai ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL FAIRE APPARAITRE L'ONGLET 'DéVELOPPEUR' DANS OFFICE 2010FAIRE APPARAITRE L'ONGLET 'DéVELOPPEUR' DANS OFFICE 2010 par neodante
La nouvelle interface d'Office 2010 à amener quelques modifications par rapport à celle de 2007. Certes mineures, ces modifications ont fait disparaître la case à cocher de l'onglet 'Développeur' en première page du panneau du 'bouton Office' (dans Office...
Cliquez pour lire la suite de l'article par neodante [ASTUCE] PATCH POUR MICROSOFT FORUMS NNTP BRIDGE V1[ASTUCE] PATCH POUR MICROSOFT FORUMS NNTP BRIDGE V1 par pierre
Si vous avez téléchargé comme moi Microsoft Forums NNTP Bridge V1 avant le 11 mars 2010 (voir [Astuce] Disponibilité de Microsoft Forum NNTP Bridge Version 1.0), un problème de date localisée pour les non anglais était présent. Un patch est disponibl...
Cliquez pour lire la suite de l'article par pierre
Logiciels
Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods Konvertor (4.00)KONVERTOR (4.00)Le logiciel est un gestionnaire multimedia affichant, jouant et convertissant plus de 2000 format... Cliquez pour télécharger Konvertor
|