private void HandleOneClient(TcpClient tcpClient) { if (!Stopwatch.IsRunning) { Stopwatch.Start(); } using (var networkStream = tcpClient.GetStream()) { using (var reader = new StreamReader(networkStream)) { var input = reader.ReadLine(); if (input == "get.pass") { PasswordFileHandler.SendPasswordFile(_passwordsPath, networkStream); } else if (input == "get.words") { SendDictionarySubset(networkStream); } else if (input.Contains("get.nextset")) { var inputArray = input.Split('#'); for (var i = 1; i < inputArray.Length - 1; i++) { var userPassPair = inputArray[i].Split(':'); PasswordFileHandler.WriteClearPasswordFile(_crackedPasswordsPath, new[] { userPassPair[0] }, new[] { userPassPair[1] }); } _dictionaryHandler.SetsReceived++; SendDictionarySubset(networkStream); } } } }
public void StartServer(int nrOfSubsets) { _dictionaryHandler = new DictionaryHandler(nrOfSubsets); _running = true; Console.WriteLine("The master server has been started"); var serverEndPoint = new IPEndPoint(IPAddress.Any, Port); var tcpServer = new TcpListener(serverEndPoint); tcpServer.Start(); Stopwatch = new Stopwatch(); while (_running) { if (!_dictionaryHandler.IsWorkDone()) { Console.WriteLine("The server is now listening for connections"); var tcpClient = tcpServer.AcceptTcpClient(); Console.WriteLine("A client has connected to the server"); var t = Task.Run(() => HandleOneClient(tcpClient)); Thread.Sleep(500); } else { Console.WriteLine("Server has finished the subsets and is attempting a graceful shutdown."); Console.WriteLine("The passwords that were successfully cracked can be found in bin foler 'crackedPasswords'"); Stopwatch.Stop(); Console.WriteLine("Total time: " + Stopwatch.Elapsed); _dictionaryHandler.CleanUp(); PasswordFileHandler.StampPasswordFile(_crackedPasswordsPath); _running = false; } } }