begin process at 2010 07 29 16:05:23
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & internet

 > REMOTESHELL + DOWNLOAD & UPLOAD DE FICHIER

REMOTESHELL + DOWNLOAD & UPLOAD DE FICHIER


 Information sur la source

Note :
Aucune note
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 :2 492

Auteur : Marnage

Ecrire un message privé
Site perso
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

 Sources du même auteur

STEGANOGRAPHIE
INCRÉMENTE IP
MODULE DE CRYPTOGRAPHIE
ANTI-ROOTKIT

 Sources de la même categorie

Source avec une capture HTTP FORWARDER par matad0r
Source avec Zip GÉNÉRATEUR HTML POUR L'UTILISATION DE PYTHON EN CGI par Just_1
SIMPLE COMPARATEUR IPV4 EN PYTHON par erebos
TÉLCHARGEUR YOUTUBE par rezuz
Source avec Zip LIRE DES FICHIERS PCAP par KimbleMandel

 Sources en rapport avec celle ci

STEGANOGRAPHIE par Marnage
INCRÉMENTE IP par Marnage
MODULE DE CRYPTOGRAPHIE par Marnage
ANTI-ROOTKIT par Marnage
Source avec Zip CLIENT POUR L'ADMINISTRATION A DISTANCE DU PORT MAPPER par taz_iup

Commentaires et avis

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 Mini shell en python [ par chedu06 ] Bonsoir, J'ai un projet qui consiste à réaliser un mini shell en python.Mais pour l'instant je ne sais par où commencer.Explications et pistes (surtou Sauvegarder le résultats du shell automatiquement [ par Vinzfloz ] Bonjour à tous, J'ai réalisé un petit script qui récupère des articles sportifs, trient et retraitent certaines informations. J'execute mon script


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Juillet 2010
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales