• STATISTIQUES
  • Il y a eu un total de 0 membres et 8507 visiteurs sur le site dans les dernières 24h pour un total de 8 507 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Newbie Contest
    Crackme: 35, Cryptographie: 49, Hacking: 27, Javascript/Java: 17, Logique: 31, Programmation: 23, Stéganographie: 53
    Challenges
    [FR] Secuser
    Actualité de la sécurité informatique, fiches virus et hoax, alertes par email, antivirus gratui...
    Hacking
    [EN] social-engineer
    Site dédié au Social Engineering en général.
    Hacking
    [FR] Microcontest
    Cryptographie: 7, Mathématiques: 8, Image Son Vidéo: 5, Intelligence artificielle: 3, Réseau: 2, Divers: 7, Phy...
    Challenges
    [EN] Net Force
    Javascript: 9, Java Applets: 6, Cryptography: 16, Exploits: 7, Cracking: 14, Programming: 13, Internet: 15, Steganograph...
    Challenges
    [EN] PHPFreaks
    PHPFreaks est un site dédié à l'apprentissage et l'enseignement du PHP. Ici vous trouver...
    Programmation
    [FR] Zenk-Security
    La communauté zenk-security a pour objet principal la sécurité informatique, nous sommes des tou...
    Hacking

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
p2p maison
17-03-2013, 03h24
Message : #3
InstinctHack Hors ligne
Posting Freak
*



Messages : 1,366
Sujets : 184
Points: 299
Inscription : Dec 2011
RE: p2p maison
Voilà un petit code en python qui pourras servir de base :
J'ai essayer de commenter un peu le truc, mais certaines parties reste dégeu et la gestion d'erreurs est loin d'etre parfaite :') c'est du tcp, je vais rtfm pour udp

Code PYTHON :

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys, time, socket,threading

class Node():
    """
        Cette classe représente un node
    """

    def __init__(self,Port):
        """
            Cette fonction démarre le serveur sur le port 1024, puis se met sur écoute
        """

        print("Création du node...")
        print("\tConfiguration en cours...")

        self.Host = '127.0.0.1'
        self.Port = int(Port)
        self.Socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.Socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)#Cette ligne corrige un problème de libération de port
        self.Nodes=dict()#Dictionnaires qui stockeras les connexions avec les autres nodes
        print("\tConfiguration terminé.")

        try:
            self.Socket.bind((self.Host,self.Port))#on tente de l'utiliser
        except:
            print("Creation de la socket impossible")
            sys.exit()

        print("\tMise sur écoute.")
        self.Socket.listen(1)
        print("\tAttente de connexion.")
        print("Création du node terminé.")
        print("\n\n")

        threading.Thread(None, self.command, None, (), {}).start()#on lance le thread pour pouvoir lancer des commandes
        while True:
            Connexion, Address = self.Socket.accept() # accepte les connexions de l'exterieur
            id_connexion=str(Address[0])+":"+str(Address[1])#on créer l'id de connexion (forme : 127.0.0.1:1024)
            print("Client connecté, adresse IP %s, port %s" % (Address[0],Address[1]))
            """ Puis on l'ajoute dans notre bdd """
            self.Nodes[id_connexion]={
                "Connexion":Connexion,
                "Address":Address
            }
            print(self.Nodes)#on affiche les nodes
            self.Nodes[id_connexion]["Connexion"].send("bienvenue. Envoyez vos messages.".encode())#on dis bonjour
            threading.Thread(None, self.recv, None, (), {"Address":Address}).start()#on lance un thread qui écoute ce que le node à as dire

    def recv(self,Address):
        """ Fonction qui ne fait qu'afficher ce que les nodes nous envoit (Cette fonction tourne à x exemplaires (x étant le nombre de node connectés) ) """
        while True:
            try:
                msgClient = self.Nodes[str(Address[0])+":"+str(Address[1])]["Connexion"].recv(512)#on tente de recuperer le message
            except:
                break#si une erreur survient on arrete d'écouter
            print("C>", msgClient.decode())#on affiche le message
            if msgClient.upper() == "FIN" or msgClient =="" or not msgClient:
                break#si le client peut que ça s'arrete, on break aussi
        self.quit(Address)#la boucle d'écoute est finie, donc c'est qu'on veut couper la connexion

    def command(self):
        """ Simple fonction qui tourne sans fin, et envoye le message au node indiqué en premier mot si il existe (exemple 127.0.0.1:1024 ping) """
        while True:
            msg_elements=input("").split()
            node=msg_elements[0]
            if node in self.Nodes:
                del msg_elements[0]
                host=node.split(":")[0]
                port=int(node.split(":")[1])
                self.send((host,port)," ".join(msg_elements))
            else:
                host=node.split(":")[0]
                port=int(node.split(":")[1])
                self.connect((host,port))
                print("Ce node n'existe pas!")

    def send(self,Address,Msg):
        """ Function qui send les data """
#       try:
        self.Nodes[str(Address[0])+":"+str(Address[1])]["Connexion"].send(Msg.encode())
#       except:
#           print("Une erreur est survenue pendant l'envoi des données!")

    def quit(self,Address):
        """ Function utilisé pour couper une connexion """
        try:
            self.send(Address,"Au revoir !")#on dis au revoir
            self.Nodes[str(Address[0])+":"+str(Address[1])]["Connexion"].close()#on close
        except:
            pass#on ignore les erreurs (exemple, si le client as déjà fermer la socket de son coté
        del self.Nodes[str(Address[0])+":"+str(Address[1])]#on le supprime de la bdd
        print("Connexion interrompue.")#on l'affiche

    def connect(self,Address):
        Socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        Socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)#Cette ligne corrige un problème de libération de port
        Socket.connect(Address)
        self.Nodes[str(Address[0])+":"+str(Address[1])]=dict()
        self.Nodes[str(Address[0])+":"+str(Address[1])]["Connexion"]=Socket
        threading.Thread(None, self.recv, None, (), {"Address":Address}).start()#on lance un thread qui écoute ce que le node à as dire

Node(input("Mon port seras ? : "))
 
Citation :un jour en cours de java j'ai attrapé les seins d'une fille mais elle m'a frappé en disant "c'est privé !!"
j'ai pas compris pourquoi, je croyais qu'on était dans la même classe
+1 (0) -1 (0) Répondre


Messages dans ce sujet
p2p maison - par InstinctHack - 16-03-2013, 20h55
RE: p2p maison - par b0fh - 16-03-2013, 21h12
RE: p2p maison - par InstinctHack - 17-03-2013, 03h24
RE: p2p maison - par Creepy_p0ney - 17-03-2013, 15h35

Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut