def test_3(self): ipFailCounter = IPFailCounter.IPFailCounter(Global.MAX_TRY_BY_IP) srv = ChallengeServer.ChallengeServer("1.1.1.1", ipFailCounter) msg, keep = srv.receive(Global.getMessage(1, testUserName)) self.assertTrue(keep) self.assertEqual(msg[0], "2") msg, keep = srv.receive(Global.getMessage(4, testUserChallenges[msg[2:].rstrip()]))
def test_2(self): ipFailCounter = IPFailCounter.IPFailCounter(Global.MAX_TRY_BY_IP) srv = ChallengeServer.ChallengeServer("1.1.1.1", ipFailCounter) msg, keep = srv.receive(Global.getMessage(1, testUserName)) self.assertTrue(keep) self.assertEqual(msg[0], "2") msg, keep = srv.receive(Global.getMessage(4, "abcdefgh")) self.assertFalse(keep) self.assertEqual(msg[0], "6")
def main(): print() print() print("Challenge client") print("================") print() host = getString("host", Global.REGEX_HOST) port = getInt("port") user = getString("user", Global.REGEX_USER) print("Connect to %s@%s:%d" % (user, host, port)) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) print("connected") s.send(Global.getMessage(1, user).encode(encoding="UTF-8")) message = getMessage(s) if len(message.getRaw()) == 0: print("Server has disconnect") elif message.isValid(): if message.getCode() == 2: print("chap = '%s'" % message.getContent()) code = getString("chap", Global.REGEX_CHALLENGE) s.send(Global.getMessage(4, code).encode(encoding="UTF-8")) message = getMessage(s) if len(message.getRaw()) == 0: print("Server has disconnect") elif message.isValid(): if message.getCode() == 5: print("User ok!") else: print("Bad chap !") else: print("Error, user unknown !") else: print("Error, user unknown !") else: print("Response not valid !") s.close()
def receive(self, msg): print("recive '%s' state %s" % (msg.rstrip(), self.__state)) message = Global.Message(msg) if not message.isValid(): return self.error(self.errorBadFormat) if message.getCode() == 1 and self.__state == State.StateWaitUser: if not re.match(Global.REGEX_USER, message.getContent()): return self.error(self.errorUser) self.__user = User.User(message.getContent()) if self.__user.isUserValid(): self.__state = State.StateWaitChallenge return Global.getMessage(2, self.__user.getChallenge()), True else: return self.error(self.errorUser) elif message.getCode() == 4 and self.__state == State.StateWaitChallenge: if not re.match(Global.REGEX_USER, message.getContent()): return self.error(self.errorChallenge) if self.__user.isChallengeValid(message.getContent()): self.__state = State.StateConnected return Global.getMessage(5, "Challenge ok"), True else: return self.error(self.errorChallenge) return self.error(self.errorBadProtocol)
def test_1(self): ipFailCounter = IPFailCounter.IPFailCounter(Global.MAX_TRY_BY_IP) srv = ChallengeServer.ChallengeServer("1.1.1.1", ipFailCounter) msg, keep = srv.receive(Global.getMessage(1, "user")) self.assertFalse(keep) self.assertEqual(msg[0], "3")