Du bist nicht angemeldet.

1

Sonntag, 11. März 2012, 15:36

Anti DoS

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
...

	private static final byte MAX_CONS_PER_MIN = 5;

	private HashMap<String, ArrayList<Long>> connections;

	public Server() {
		connections = new HashMap<String, ArrayList<Long>>();
	}

	private void listen() {
		ServerSocket listener;

		try {
			listener = new ServerSocket(port);
		} catch (IOException e) {
			e.printStackTrace();
			return;
		}

		System.out.println(String.format("Listening on port %d.", port));

		while (true) {
			Socket socket;

			try {
				socket = listener.accept();
			} catch (IOException e) {
				e.printStackTrace();
				continue;
			}

			String ip = socket.getInetAddress().getHostAddress();
			ArrayList<Long> cons = connections.get(ip);

			if (cons == null) {
				cons = new ArrayList<Long>();
			}

			long current = System.currentTimeMillis();
			cons.add(current);
			connections.put(ip, cons);

			if (cons.size() > MAX_CONS_PER_MIN) {
				int count = 0;

				for (long con : cons) {
					if (con > current - 60000) {
						count++;

						if (count > MAX_CONS_PER_MIN) {
							break;
						}
					}
				}

				if (count > MAX_CONS_PER_MIN) {
					try {
						socket.close();
					} catch (IOException e) {
						e.printStackTrace();
						continue;
					}
				}
			}

			Client client = new Client(socket);
			new Thread(client).start();
		}
	}

...


Ist aus meinem neuen Emu. Fragt nicht wie ihr das im Banana-Chat implementiert, das solltet ihr schon allein schaffen wenn ihr unbedingt einen Chat hosten wollt (und wenn der Emu nur zu Lernzwecken gebraucht wird, wofür er letzendlich ja auch gedacht ist, braucht ihr das nicht).

Kann man sicherlich noch verbessern, z. B. dort wo die Verbindung vom Socket geschlossen wird kann man auch alle anderen Clients mit derselben IP disconnecten. Ebenfalls hilfreich ist es nach der Anzahl der Bytes die der Server empfängt zu prüfen und Pakete nach auffälligen Modifikationen zu prüfen. Aber das hier sollte zumindest einfache Flooder wie die von Bizzi und Fif, sofern ihr einen einigermaßen guten VPS habt, außer Gefecht setzen.
Tschüß.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Flav« (11. März 2012, 16:08)


Es haben sich bereits 6 registrierte Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

Steelix2011, Diebspiel, wishdream, CraZE, Pwned, Ahmeet

2

Sonntag, 11. März 2012, 18:31

Man kann auch einfach in der SessionHandler eine neue Thread-Instanz erstellen, die 5-10 Sekunden schläft und die Verbindung trennt, und den kompletten SessionHandler beendet, wenn noch kein weiteres OP-Byte angekommen ist. Wäre sicher eine gute Addition zu deinem Schutz, Flavovisch!

Es hat sich bereits 1 registrierter Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

Steelix2011

3

Sonntag, 11. März 2012, 18:35

Man kann dann ja auch nen Counter einbauen, der prueft ob ein paket mehrfach verwendet wird/wurde und closed notfalls die connection. Weil dann kann ein Flooder ned andauernd das selbe "versenden" ohne dass er ausgeschlossen wird.

Aber auch sowas kann man einfach umgehen. Man verwendet einfach pro Connection ein anderen Proxy-Server.

Achja , ich glaub Witti versuchts grad einzubauen hat aber kein plan von dem was er tut xD Mal schauen wen er dafuer anbettelt xD werdet dann auh sys xDD

Es hat sich bereits 1 registrierter Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

Steelix2011

4

Dienstag, 13. März 2012, 17:34

Aber auch sowas kann man einfach umgehen. Man verwendet einfach pro Connection ein anderen Proxy-Server.

Dann sprechen wir aber auch nicht mehr von DoS, sondern von DDoS.
Tschüß.