Ich möchte euch heute zeigen, wie ihr euren Rcon Login vor unautorisierten Zugriff schützen könnt. Dies ist mein erstes Tutorial, welches ich schreibe, also seid nicht so streng und gebt mir bitte viele Verbesserungsvorschläge und nützliche Kritik.
Erstmal gehen wir zur Funktion, welche ausgeführt wird, wenn sich jemand als Rcon Administrator einloggt oder es versucht. Diese Funktion ist "OnRconLoginAttempt"
public OnRconLoginAttempt(ip[], password[], success)
Da sehen wir schonmal die Parameter:
- ip[] --> Die IP, welche versucht sich als Rcon Administrator einzuloggen oder sich einloggt.
- password[] --> Das Passwort, welches benutzt wurde, um sich einzuloggen oder es zu versuchen
- success --> Ob der Login erfolgreich war oder nicht.
Als erstes wollen wir herausfinden, welcher Spieler versucht hat sich als Rcon Administrator einzuloggen oder sich als dieser eingeloggt hat.
Da es in dieser Funktion kein "playerid" gibt, müssen wir das leider auf eine andere Art und Weise herausfinden.
Da sehen wir, dass wir ja die IP des Spielers haben. Deswegen werden wir jetzt alle Spieler nach ihrer IP-Adresse abfragen und diese dann mit der vorhandenen IP vergleichen.
Das tun wir am besten mit einer Schleife.
In dieser Schleife erstellen wir einen String mit dem Namen "pip" mit einer Länge von 16.
Nun wollten wir ja alle IP Adressen der Spieler auf dem Server abfragen und dann mit der IP des Rcon Logins vergleichen.
Um die IP-Adressen mit der anderen zu vergleichen, speichern wir zunächst immer die IP des Spielers in "pip".
Danach fragen wir ab, ob die IP des jeweiligen Spielers mit der IP des Logins übereinstimmt.
public OnRconLoginAttempt(ip[], password[], success)
{
for(new i=0; i<MAX_PLAYERS; i++) // Unsere Schleife, welche alle Spieler durchgeht und für jeden Spieler folgendes ausführt.
{
new pip[16]; // Hier wird der String "pip" erstellt.
GetPlayerIp(i, pip, sizeof(pip)); // Hier erhalten wir vom jeweiligen Spieler die IP und speichern diese in den String "pip" ein.
if(!strcmp(ip, pip, true)) // Abfrage, ob die IP-Adressen übereinstimmen.
{
}
}
return 1;
}
Nun findet das Script letzendlich heraus, welcher Spieler versucht hat sich als Rcon Administrator einzuloggen.
Da wir wollen, dass der Übeltäter am Ende gebannt wird, wäre es angebracht abzufragen, ob der Täter ein Administrator ist.
Denn einen Administrator wollen wir ja nicht bannen. Das wäre ja sonst ziemlich doof.
Deswegen bauen wir noch eine Abfrage ein, ob der Spieler ein Administrator ist und führen dann noch ein Script aus, wenn er keiner ist.
Die Administratorabfrage müsst ihr an euer Skript anpassen, sonst funktioniert es nicht!
Aber nun erstmal zur Abfrage.
public OnRconLoginAttempt(ip[], password[], success)
{
for(new i=0; i<MAX_PLAYERS; i++)
{
new pip[16];
GetPlayerIp(i, pip, sizeof(pip));
if(!strcmp(ip, pip, true))
{
if(!SpielerDaten[i][pAdmin]) // Wenn der Spieler KEIN Administrator ist, werden die in den nachfolgenden geschweiften Klammern eingefügten Befehle ausgeführt.
{
}
}
}
return 1;
}
Jetzt müssen wir nur noch die Befehle einfügen, was mit dem Spieler passieren soll, welcher versucht hat, sich unautorisierten Zugriff zu Administratorrechten zu verschaffen.
Wir nehmen die Funktion "BanEx". Diese Funktion bannt den Spieler und gibt zugleich noch einen Grund an.
Natürlich könnt ihr die Bannfunktionen an euer Skript anpassen, was auch sehr angebracht wäre.
Da ich aber nicht weiß, was für Skripte ihr benutzt, belasse ich es in diesem Tutorial bei einer Standardfunktion.
Da wir den Spieler dann gebannt haben, muss die Schleife ja nicht weiter durchlaufen. Deswegen setzen wir unter "BanEx" noch ein "return 0;"
public OnRconLoginAttempt(ip[], password[], success)
{
for(new i=0; i<MAX_PLAYERS; i++)
{
new pip[16];
GetPlayerIp(i, pip, sizeof(pip));
if(!strcmp(ip, pip, true))
{
if(!SpielerDaten[i][pAdmin])
{
BanEx(i,"Loginversuch als Rcon-Administrator"); // Hier bannen wir den Spieler und geben als Grund "Loginversuch als Rcon-Administrator" an.
return 0;
}
}
}
return 1;
}
Fertig! Wir haben den Login als Rcon-Admin erfolgreich gegen unautorisierten Zugriff geschützt.
Für Kritik und Verbesserungsvorschläge bin ich jederzeit offen.
Mit freundlichen Grüßen
Artus