Member 13747846 Ответов: 0

Java networking - как навсегда запретить IP-адрес?


Я создаю программу, в которой пользователь входит на сервер с именем пользователя и паролем, известными только серверу. У них есть 4 попытки получить правильное имя пользователя и пароль. Если они не введут правильную регистрационную информацию за 4 попытки, сервер закроет соединение с клиентом.

Следующая часть программы, с которой мне нужна помощь, - это постоянный запрет пользователю подключаться для дальнейших попыток. Когда пользователь входит в систему в первый раз и получает все 4 попытки неправильно, его ip-адрес записывается в файл под названием "userIP.txt".

То, что я пытался сделать, это прочитать файл, и если он соответствует IP-адресу пользователя, они будут запрещены к использованию в программе. Это не работает - когда они возвращаются в программу, она позволяет им снова войти в систему.
Я знаю, что это может быть не лучший способ запретить пользователю доступ к серверу, но мое задание требует, чтобы я запретил его ip-адрес.

Есть идеи, как я могу это исправить?

Вот часть кода сервера:

Что я уже пробовал:

import java.lang.*;
import java.io.*;
import java.net.*;

class Server {
	public static void main(String args[]) throws FileNotFoundException {
		String welcome = "Welcome! The server is now connected.";
		String login = "Enter username and password: ";
		String message; 
		PrintWriter writer = new PrintWriter("userIP.txt");

		try {
			//Detecting the localhost's ip address
			InetAddress localaddr = InetAddress.getLocalHost();
			System.out.println("SERVER\n");
			System.out.println ("Local hostnameIP: " + localaddr );

			// Creating a server socket for connection
			ServerSocket srvr = new ServerSocket(1234);
			System.out.println("Waiting for connection on "+localaddr);
			// Accept incoming connection
			Socket skt = srvr.accept();
			System.out.print("Server has connected!\n");
			// get Input and Output streams
			PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
			out.flush();
			BufferedReader in = new BufferedReader(new InputStreamReader(skt.getInputStream()));
			BufferedReader log = new BufferedReader(new InputStreamReader(skt.getInputStream())); //read input for login
			System.out.print("Sending string: '" + welcome + "'\n");
			out.println(welcome);
			InetAddress clientInetAddress = skt.getInetAddress();
			String ip = clientInetAddress.getHostAddress();
			
			//read file

			String checkIP = "userIP.txt";
			String line = null;
			try {
				FileReader readFile = new FileReader (checkIP);
				BufferedReader br = new BufferedReader (readFile);
				while ((line = br.readLine())!= null) {
					System.out.println("reading file: " + line);
					
					if (line.equals(ip)) {
						System.out.println("IP MATCHES");
						
						//closing server
//						out.println("You are banned. Server closing.");
//						out.close();
//						skt.close();
//						srvr.close();
					}
				}
				br.close();
				
				
			}
			catch (FileNotFoundException ex) {
				System.out.println("Unable to open file '" + checkIP + "'");
			}
			catch(IOException ex) {
				System.out.println("Error reading file '" + checkIP + "'");
			}
			
			//login attempts
			int tries = 4;
			while (tries>0) {
				out.println(login);
				
				//login
				String username = in.readLine();
				System.out.println("Client's username: " + username);

				String password = in.readLine();
				System.out.println("Client's password: " + password);

				if (username.equals("hello123") && password.equals("mypass")) {
					out.println("Correct login!");
					System.out.println ("Client's IP Address: " + ip);
					tries=-1;
				}
				
				else  { //if wrong login - give 3 more tries
					
					tries--;
					System.out.println("Number of tries left: " + tries);
					out.println("Try again. Login attempts left - " + tries);
					
				}
			}
			
			
				if (tries==0){
				out.println("Wrong login - server closing");
				out.close();
				skt.close();
				srvr.close();
				
				//ban ip address permanently 
				System.out.println("local: " + localaddr.getHostAddress()); 
				System.out.println("client: " + ip);
				 
				 //write ip address to file
				writer.println(ip);
				writer.close();
				
			}

Richard MacCutchan

Это должно быть простое дело, чтобы напечатать эти два значения, чтобы увидеть, почему они не совпадают.

0 Ответов