2017-09-30 4 views
0

사용자가 사용자 이름과 암호를 입력하도록 요구하는 파이썬 스크립트에 대한 보안 기능을 생성합니다. 그러면 사용자 이름과 암호가 암호가 존재합니다. 만약 그렇다면, 나는 그 사람이 소프트웨어를 사용할 수 있도록하고 싶다. 나는이 모든 일을했지만 동일한 사용자 이름과 암호를 사용하여 여러 사람에게 해결책을 찾을 수 없습니다. 동일한 로그인을 사용하여 여러 사람이 소프트웨어에 액세스하는 것을 방지하려면 어떻게합니까? 다음은 python 사용자가 파이썬 스크립트를 사용하기 위해 소켓 서버에 로그인하도록하는 방법

순간에 서버 코드 :

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() 

여기에 고객의 샘플입니다 순간에 나를 위해

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

생각했던 것만 큼 큰 문제는 아닐 수도 있습니다. 누군가 다른 컴퓨터에서 소프트웨어를 사용하려면 어떻게해야합니까? 어쨌든 로그인하려는 사용자가 로그인 할 때마다 로그인 한 사용자 목록을 유지해야합니다. – Steampunkery

+0

@Steampunkery 그 점에 대해 생각해보십시오. 지리적 로거 또는 다른보다 복잡한 방법을 생각했지만 로그인 목록이 도움이 될 수 있습니다. 내 자신의 질문을 해결하면 게시됩니다. – Kermit

+0

동일한 네트워크에 있습니까? – dsgdfg

답변

0

솔루션 Steampunkery의 아이디어 @ 사용하고 단지 유지했다 다음과 같이 모든 사용자 이름이 온라인 또는 오프라인 값을 갖는 사전 :

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

그러면 ould는 연결되었을 때 값을 온라인으로 변경하고 연결을 끊을 때 다시 값을 변경합니다.

도움 주셔서 감사합니다.

관련 문제