Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

REMOTESHELL + DOWNLOAD & UPLOAD DE FICHIER


Information sur la source

Catégorie :Réseau & internet Classé sous : reseaux, remote, shell, clientserveur, Marnage Niveau : Débutant Date de création : 23/10/2007 Date de mise à jour : 24/10/2007 02:48:43 Vu : 1 942

Note :
Aucune note

Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

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

Commentaires et avis

signaler à un administrateur
Commentaire de alix20 le 04/06/2008 19:52:59

ça marche super ! Merci !

Ajouter un commentaire

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


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.