begin process at 2012 02 05 01:05:03
  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 :3 176

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

SOCKET MULTITHREAD SIMPLE par Guillamue06
TRANSFERT DE FICHIER PAR SOCKET par Guillamue06
Source avec une capture AUTO-FOLLOW/UNFOLLOW [TWITTER] EN [PERL] UTILISANT NET::TWIT... par GeroXXXX
Source avec Zip PINGEUR RÉSEAU par jeanbleo44
Source avec Zip Source avec une capture LISTING ET LOGS DES CONNEXIONS ET DECONNEXIONS DE MACHINES Q... par saigneurdushi

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture NOTEPAD POUR PYTHON par grephit
Source avec Zip Source avec une capture REMOTE WINDOWS PROMPT par NqrK
STEGANOGRAPHIE par Marnage
INCRÉMENTE IP par Marnage
MODULE DE CRYPTOGRAPHIE par Marnage

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...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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,468 sec (4)

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