IP System

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo zusammen, ich habe mich heute, eigentlich noch viel zu früh an ein IP System gewagt


    In dem System soll folgendes passieren


    -Spieler Verbindet, IP wird in der Datenbank überprüft
    -Bei der Registrierung sollen folgende Dinge eingetragen werden:

    • SpielerName
    • IP
    • Datum

    Beim Login
    - Wenn IP nicht übereinstimmend -> Kick
    - Wenn IP übereinstimmen -> Login


    -Admin setzt IP fest in die Datenbank (manuell)
    -IP soll überschrieben werden





    Hier dazu all das was ich bereits geschrieben habe:


    Mein Enum was ich erstellt habe

    new IPInfo[MAX_PLAYERS][IPEnum];
    enum IPEnum
    {
    PlayerName[MAX_PLAYER_NAME],
    IP,
    PlayerIP,
    Datum,
    }



    Bei OnPlayerConnect (Ich musste ja das Ban /Tban system noch mit einbinden deswegen alles so durcheinander


    public OnPlayerConnect(playerid)
    {

    //-------------------IP SYSTEM ANFANG -------------------------

    new name[MAX_PLAYER_NAME],query[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(query,sizeof(query),"SELECT id FROM user WHERE username='%s'",name);
    mysql_function_query(dbhandle,query,true,"OnUserCheck","i",playerid);
    {
    new name1[25], query1[60],pID,string[128],query2[60];
    GetPlayerName(playerid, name1, 25);
    mysql_format(dbhandle, query1, 60, "SELECT * FROM `timeban` WHERE `Spieler`='%e'", name);
    mysql_tquery(dbhandle, query1, "@CheckBannedUser", "i", playerid);
    {
    new playersip[16];
    GetPlayerIp(pID,playersip,sizeof(playersip));
    format(string,sizeof(string),"Die IP vom Spieler %s ist %s !",getPlayerName(pID),playersip);
    mysql_format(dbhandle, query2, 60, "SELECT * FROM `PlayerIP` WHERE `PlayerName`='%e'", name);
    mysql_tquery(dbhandle, query1, "@CheckIP", "i", playerid);
    if(IPInfo[playerid][PlayerIP]) ! = 0)) return print("PlayerIP noch nicht vorhanden Spieler: %s", GetPlayerName(playerid)); // ----> DIESE ZEILE BETRIFFT DEN ERROR

    }
    else
    {
    SendClientMessage(playerid,-1,"Deine IP wurde nicht in der Whitelist gefunden, Du wirst nun gekickt");
    print("IP vorhanden %s",GetPlayerName(playerid));
    }
    }





    Dann /getip und /setip
    /getip geht /setip hab ich noch n icht testen können
    //IP Überprüfung
    ocmd:getip(playerid,params[])
    {
    if(!isAdmin(playerid,2)) SendClientMessage(playerid,-1,"Du hast kein Admin Level 2");
    {
    new pID,string[128];

    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,-1,"INFO : /getip [playerid] !");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,-1,"Spieler nicht verbunden");

    {
    new playersip[16];
    GetPlayerIp(pID,playersip,sizeof(playersip));
    format(string,sizeof(string),"Die IP vom Spieler %s ist %s !",getPlayerName(pID),playersip);
    SendClientMessage(playerid,-1,string);
    }
    }
    return 1;
    }


    ocmd:setip(playerid,params[])
    {
    if(!isAdmin(playerid,2)) SendClientMessage(playerid,-1,"Du hast kein Admin Level 2");
    {
    new pID,string[128];

    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,-1,"INFO : /setip [playerid] !");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,-1,"Spieler nicht verbunden");

    {
    new playersip[16];
    GetPlayerIp(pID,playersip,sizeof(playersip));
    format(string,sizeof(string),"Die IP vom Spieler %s ist %s und wurde erfolgreich in die DB eingetragen!",getPlayerName(pID),playersip);
    SendClientMessage(playerid,-1,string);
    format(query,sizeof(query),"INSERT INTO PlayerIP (IP,SpielerName) VALUES ('%f','%s')",playerisip,SpielerName);
    print(query); // <--- diese Zeile
    mysql_function_query(dbhandle,query,true,"CheckIP","i",carid);
    }
    else if(playersip <= 1)
    {
    format(string,sizeof(string),"Die IP vom Spieler %s ist %s und ist bereits in der DB vorhanden!",getPlayerName(pID),playersip);
    SendClientMessage(playerid,-1,string);
    }
    }
    return 1;
    }



    und zum schluss das noch




    @CheckIP(playerid);
    @CheckIP(playerid)
    {
    new rows, fields, ,string[256], IP[16],Datum[20];

    cache_get_data(rows, fields);
    if(rows)
    {
    IP = cache_get_field_content_float(0, "IP",IP);
    Datum = cache_get_field_content(0,"Registrierungsdatum",name);

    if(0() > IP)
    {
    format(string,sizeof(string),"Deine IP wurde in der Datenbank gefunden. Lasse bitte überprüfen ob bereits ein Account besteht. Name: %s IP: %f ",GetPlayerName(playerid),IP);
    SendClientMessage(playerid,-1,string);
    format(string,sizeof(string),"Du hast dich an folgendem Tage registriert : ",Datum);
    }
    else
    {
    format(query,sizeof(query),"INSERT INTO PlayerIP (PlayerName,IP) VALUES ('%s','%f')",getPlayerName(playerid),sInfo[playerid][IP]);
    print(query); // <--- diese Zeile
    mysql_function_query(dbhandle,query,true,"CheckIP","i",carid);
    return 1;
    //Eure Sache
    }
    }
    else return 1;//Eure Sache;
    return 1;
    }


    public CheckIP(playerid,IP)
    {
    IPInfo[playerid][db_id]= cache_insert_id(dbhandle);
    return 1;
    }



    Und hier die eigentlichen Errors


    E:\SAMP\gamemodes\Script1.pwn(1485) : error 029: invalid expression, assumed zero
    E:\SAMP\gamemodes\Script1.pwn(1485) : warning 215: expression has no effect
    E:\SAMP\gamemodes\Script1.pwn(1485) : error 001: expected token: ";", but found ")"
    E:\SAMP\gamemodes\Script1.pwn(1485) : error 029: invalid expression, assumed zero
    E:\SAMP\gamemodes\Script1.pwn(1485) : fatal error 107: too many error messages on one line


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.




    Das betrifft in allen Fällen diese Zeile


    beim OnplayerConnect


    if(IPInfo[playerid][PlayerIP]) ! = 0)) return print("PlayerIP noch nicht vorhanden Spieler: %s", GetPlayerName(playerid));









    EDIT 1: Screen


    Falls euch der Screen weiterhilft meine Datenbank :D


  • Du hast da eine Menge falsch.
    mysql_function_query(dbhandle,query,true,"OnUserCheck","i",playerid);
    {
    new name1[25], query1[60],pID,string[128],query2[60];
    GetPlayerName(playerid, name1, 25);
    mysql_format(dbhandle, query1, 60, "SELECT * FROM `timeban` WHERE `Spieler`='%e'", name);
    mysql_tquery(dbhandle, query1, "@CheckBannedUser", "i", playerid);
    {
    new playersip[16];
    GetPlayerIp(pID,playersip,sizeof(playersip));
    format(string,sizeof(string),"Die IP vom Spieler %s ist %s !",getPlayerName(pID),playersip);
    mysql_format(dbhandle, query2, 60, "SELECT * FROM `PlayerIP` WHERE `PlayerName`='%e'", name);
    mysql_tquery(dbhandle, query1, "@CheckIP", "i", playerid);
    if(IPInfo[playerid][PlayerIP]) ! = 0)) return print("PlayerIP noch nicht vorhanden Spieler: %s", GetPlayerName(playerid)); // ----> DIESE ZEILE BETRIFFT DEN ERROR

    }
    else
    {
    SendClientMessage(playerid,-1,"Deine IP wurde nicht in der Whitelist gefunden, Du wirst nun gekickt");
    print("IP vorhanden %s",GetPlayerName(playerid));
    }
    }
    Du kannst doch unter mysql_function_query keine geschweifte Klammer öffnen, da wurde doch nichts abgefragt.
    Schaue dir das alles noch einmal richtig an!


    EDIT:
    IP ist kein Float sondern ein String, das müsstest du in deiner Datenbank ändern.

  • Schaue dir das alles noch einmal richtig an!

    Heißt ich soll jetzt was machen?


    Ist mein erstes System was ich baue (mit MYSQL)






    EDIT1:
    also so oder wie

    Spoiler anzeigen
    public OnPlayerConnect(playerid)
    {

    //-------------------IP SYSTEM ANFANG -------------------------

    new name[MAX_PLAYER_NAME],query[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(query,sizeof(query),"SELECT id FROM user WHERE username='%s'",name);
    mysql_function_query(dbhandle,query,true,"OnUserCheck","i",playerid);
    new name1[25], query1[60],pID,string[128],query2[60];
    GetPlayerName(playerid, name1, 25);
    mysql_format(dbhandle, query1, 60, "SELECT * FROM `timeban` WHERE `Spieler`='%e'", name);
    mysql_tquery(dbhandle, query1, "@CheckBannedUser", "i", playerid);
    {
    new playersip[16];
    GetPlayerIp(pID,playersip,sizeof(playersip));
    format(string,sizeof(string),"Die IP vom Spieler %s ist %s !",getPlayerName(pID),playersip);
    mysql_format(dbhandle, query2, 60, "SELECT * FROM `PlayerIP` WHERE `PlayerName`='%e'", name);
    mysql_tquery(dbhandle, query1, "@CheckIP", "i", playerid);
    if(IPInfo[playerid][PlayerIP]) ! = 0)) return print("PlayerIP noch nicht vorhanden Spieler: %s", GetPlayerName(playerid));

    }
    else
    {
    SendClientMessage(playerid,-1,"Deine IP wurde nicht in der Whitelist gefunden, Du wirst nun gekickt");
    print("IP vorhanden %s",GetPlayerName(playerid));
    }

  • Einfach aus Prinzip, wieso wird er bei falscher IP gekickt ? Wegen multi account ok, 2 accounts bei 1 Ip -> nicht möglich...
    Aber wenn jemand keine statische ip hat, kann er nichtmehr connecten, nach einen router neustart? Ist doch extrem umständlich.. Ich selbst hab eine dynamische ip, und könnte mich nie mehr einloggen^^


    Du kannst das System umbauen um multiaccount, halbwegs, einzudämmen...


    Aber so ist das doch nicht machbar^^..


    Mfg

  • Einfach aus Prinzip, wieso wird er bei falscher IP gekickt ? Wegen multi account ok, 2 accounts bei 1 Ip -> nicht möglich...
    Aber wenn jemand keine statische ip hat, kann er nichtmehr connecten, nach einen router neustart? Ist doch extrem umständlich.. Ich selbst hab eine dynamische ip, und könnte mich nie mehr einloggen^^


    Du kannst das System umbauen um multiaccount, halbwegs, einzudämmen...


    Aber so ist das doch nicht machbar^^..


    sorry kenne mich da nicht so aus. Unterschied zwischen "Dynamischer" und Statischer IP" war nochmal was?!

  • Ich hab jetzt z.B die Ip 127.0.0.1 -> wäre localhost aber egal^^


    Wenn ich jetzt meinen router neu starte bekomme ich die ip 168.1.1.0 etc... Beim nächsten mal 168.5.5.2 ka... Wenn du jz nur 1 speicherst wird er dann gekickt..


    Oder lieg ich falsch?

  • nein es wird ja nur geprüft ob der Spieler mit derselben Ip wie bei der Registrierung kommt


    Ist diese eine andere funktioniert der Login prozess normal




    EDIT
    Wenn du noch irgendwelche Zeilen brauchst, sag bescheid



    Ich habe alternativ auch Teamviewer

    Einmal editiert, zuletzt von Silbermond ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • Heißt im Endeffekt


    Dynamische IP User = Können beliebig Multiaccs machen
    Statische IP User = werden erwischt weil die IP gesehen wird


    Korrekt?

  • Theoretisch korrekt, du könntest auch die IP-Range sperren. Das würde dann aber unter Umständen auch umschuldige mit ausschließen. Die Frage ist eher ob es für einen SA-MP Server nötig ist solche Schritte einzuleiten. Ich würde mal behaupten ein Großteil der Nutzer macht sich nicht die Mühe mit Router-neustarten und schiess-mich-tot, nur um einen Ban zu umgehen. Aber da kann ich mich auch irren.

    The fact is, I am right. And if you think I'm wrong, you are wrong.


  • Heißt ich soll das ganze Manuell machen oder wie?


    nicht zwingend, kannst ja eine seite im forum einrichten, indem eine Anfrage nur einen klick benötigt um bearbeitet zu werden. User schickt eine Art "Bewerbung" an einen Bot, Admin schaut sich die an, passt alles ->klickt nur auf freischalten und der Account wird erstellt. Man kann ja WBB3 mit SA:MP verbinden

    Dieser Beitrag wurde bereits 763 mal editiert, zuletzt von »Anker.« (Vor einem Moment)


    "eingetragende Stand -Ins"


  • Genau.


    User schickt Anfrage ab -> wird überprüft -> Account erstellt -> Passwort per PN weitergegeben -> User freut sich und kann auf dem Server spielen.


    Ich dachte eher, das der User ein Formular ausfüllt mit Name, wunschpasswort und eben einener kleinen Berwerbung. Der Admin liest sich den bewerbungsteil durch, klickt gegebenenfalls auf bestätigen, und aut0omatisch wird ein account auf dem Server und im Forum mit den Wunschdaten erstellt. Nun wird man noch per Email benachrichtigt dass man auf dem Server spielen kann.

    Dieser Beitrag wurde bereits 763 mal editiert, zuletzt von »Anker.« (Vor einem Moment)


    "eingetragende Stand -Ins"