2017-09-30 2 views
0

Je crée de la sécurité pour mon script python nécessitant que l'utilisateur saisisse un nom d'utilisateur et un mot de passe qui sera envoyé à un serveur qui vérifiera alors si le nom d'utilisateur mot de passe existe. Si c'est le cas, je veux que la personne puisse utiliser le logiciel. J'ai fait tout cela cependant je ne peux pas trouver une solution à plusieurs personnes en utilisant le même nom d'utilisateur et mot de passe. Comment puis-je empêcher plusieurs personnes d'accéder au logiciel en utilisant la même connexion?python comment forcer les utilisateurs à se connecter à un serveur socket pour utiliser le script python

est Ci-dessous le code du serveur au moment:

import socket 
import threading 
import sys 

class Server(): 

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    connections = [] 
    def __init__(self): 
     self.sock.bind(("0.0.0.0", 10000)) 
     self.sock.listen(1) 
     mystring = "Welcome" 
     mystrinf = "Not allowed" 
     self.b = mystring.encode('utf-8') 
     self.d = mystrinf.encode("utf-8") 
    def handler(self, c, a): 
     while True: 
      data = c.recv(2024) 
      dara = data.decode("utf-8") 
      for connection in self.connections: 
       with open(r"C:\Users\Tom\PycharmProjects\untitled\names.txt") as f: 
        if dara in [line.strip() for line in f.readlines()]: 
         connection.send(self.b) 
         print(data) 
         break 
        else: 
         connection.send(self.d) 
         print(data) 
         break 
      if not data: 
       self.connections.remove(c) 
       c.close() 
       break 

    def run(self): 
     while True: 
      c, a = self.sock.accept() 
      cThread = threading.Thread(target=self.handler, args=(c,a)) 
      cThread.daemon = True 
      cThread.start() 
      self.connections.append(c) 
      print(self.connections) 



server = Server() 
server.run() 

et voici un échantillon d'un client:

import socket 

host = "********" 
port = 10000     
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((host, port)) 
lol = input("?") 
l = lol.encode("utf-8") 
s.sendall(l) 
data = s.recv(1024) 
dara = data.decode("utf-8") 
s.close() 
print('Received', repr(dara)) 
+0

Ce n'est peut-être pas aussi grave que vous le pensez. Et si quelqu'un voulait utiliser le logiciel sur deux ordinateurs différents? Quoi qu'il en soit, vous devez garder une liste des utilisateurs connectés pour accéder à chaque fois que quelqu'un voulait se connecter. – Steampunkery

+0

@Steampunkery Penser à ce sujet qui a du sens. Je pensais à un géo-logger ou à d'autres moyens plus complexes, mais une liste de connexion peut aider. Va poster si je résous ma propre question! – Kermit

+0

Sur le même réseau? – dsgdfg

Répondre

0

solution pour moi au moment était d'utiliser @ l'idée de Steampunkery et juste garder un dictionnaire avec tous les noms d'utilisateur ayant une valeur en ligne ou hors ligne comme ceci:

Users = {} 
with open(r"---LOCATION OF USERNAMES---") as users: 
    for user in users: 
     cuser = user.replace('\n', "") 
     Users[cuser.lower()] = "offline" 

I w Alors changez simplement la valeur en ligne quand ils sont connectés et changez-les quand ils se déconnectent.

Merci pour l'aide.