IP Adresse mit Datenbank IP´s vergleichen und entsprechend handeln

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 folgendes vor:


    Ich Speichere bei jeder abgeschlossenen Registrierung zu dem Namen die IP. (Funktioniert einwandfrei)
    Anschliessend möchte ich ja verhindern das ein 2er PC mit der Selben adresse und anderem Namen sich erneut Registriert .
    Dazu frage ich bei OnPlayerConnect ja beide Ip´s ab und will diese Vergleichen und entsprechend Kicken oder returnen 1.
    Nun bei der auslesung der DB und des Vergleichens da hakt es . Hier mal mein Code


    new ip[16];
    GetPlayerIp(playerid,ip,sizeof(ip));
    printf("%s ip",ip);
    format(query,sizeof(query),"SELECT NAME FROM Benutzer WHERE IP='%s'",ip);
    mysql_function_query(dbhandle,query,true,"IPCHECK","s",name);



    forward IPCHECK(name[128]);
    public IPCHECK(name[128])
    {
    return 1;
    }


    Wenn ihr mir da ein bisschen auf die Sprünge helft wär das Nett (Wiki hab ich schon durchsucht)


    MFG aeroKeks :D

  • Willkommen in der Scripting Base!


    new ip[16];
    GetPlayerIp(playerid,ip,sizeof(ip));
    printf("%s ip",ip);
    format(query,sizeof(query),"SELECT NAME FROM Benutzer WHERE IP='%s'",ip);
    mysql_function_query(dbhandle,query,true,"IPCHECK","d",playerid);


    forward IPCHECK(playerid);
    public IPCHECK(playerid)
    {
    if(cache_get_row_count() > 0)
    {
    //IP existiert
    Kick(playerid);
    }
    return 1;
    }

  • danke ich werde es ausprobieren.


    noch eine frage wie füge ich nun ausnahmen hinzu z.B. per adminbefehl für die Ip das eine bestimmte xy ip die ich als admin eintippe auf eine ausnahme liste kommt


    /whitelist [wunschip]


    und diese ip dort kann man sich dann 1000x oder mehr drauf registrieren

  • Du erstellst eine zweite Tabelle in die die IPs auf der Whitelist eingetragen werden.
    Dann suchst du nach dem selben Prinzip, wenn für den Spieler bereits eine IP gefunden worden ist, ob die IP in der anderen Tabelle steht, wenn ja ist sie auf der Whitelist und du lässt ihn das Account erstellen, ansonsten nicht. Prinzip ist genau das gleiche.


    Falls dein Code nicht klappt oder du bei der Realisierung hängst, kannst du gerne nochmal Bescheid geben.

  • Hallo nochmal
    ich weiss nicht ob mein Denkansatz so richtig ist wenn ja bitte einfach posten aber wenn nicht dann kannst du oder ihr mir ein bisschen hilfestellung geben wo ich die whitelist kontrolle machen soll...


    hier der Code


    public OnPlayerConnect(playerid)
    {
    if(IsPlayerNPC(playerid)) return 1;
    SetPlayerColor(playerid,CL_GRAU);
    TogglePlayerControllable(playerid,0);

    introstart(playerid);
    //Register-System-MYSQL
    new name[MAX_PLAYER_NAME],query[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(query,sizeof(query),"SELECT DB_ID FROM Benutzer WHERE NAME='%s'",name);
    mysql_function_query(dbhandle,query,true,"UserCheck","i",playerid);
    TextDrawShowForPlayer(playerid, Date);
    new ip[16];
    GetPlayerIp(playerid,ip,sizeof(ip));

    format(query,sizeof(query),"SELECT NAME FROM Benutzer WHERE IP='%s'",ip);
    mysql_function_query(dbhandle,query,true,"IPCHECK","d",playerid);
    return 1;
    }
    forward WHITELISTCHECK(playerid);
    public WHITELISTCHECK(playerid)
    {
    if(cache_get_row_count() >= 1)
    {
    wenn hier mehr als eine der ip adressen des users existieren dann zum registrierungsdialog
    }
    return 1;
    }
    forward IPCHECK(playerid);
    public IPCHECK(playerid)
    {
    if(cache_get_row_count() > 0)
    {
    //IP existiert dann kontrolle in der whitelist

    SCM(playerid,-1,"Du hast dich bereits mit dieser IP-Adresse Registriert.");
    SCM(playerid,-1," Bei einem Multiaccount z.B. für Geschwister melde dich bitte bei Admins mit deiner IP.");
    KickPlayer(playerid);
    }

    return 1;
    }

  • Das gibt vom Ablauf her keinen Sinn.
    Schreibe es so:


    Registrationsbefehl:
    new ip[16], query[128];
    GetPlayerIp(playerid,ip,sizeof(ip));
    format(query,sizeof(query),"SELECT NAME FROM Benutzer WHERE IP='%s'",ip);
    mysql_function_query(dbhandle,query,true,"IPCHECK","d",playerid);



    forward IPCHECK(playerid);
    public IPCHECK(playerid)
    {
    if(cache_get_row_count() > 0)
    {
    new ip[16], query[128];
    GetPlayerIp(playerid,ip,sizeof(ip));
    //IP existiert dann kontrolle in der whitelist
    format(query,sizeof(query),"SELECT NAME FROM Benutzer WHERE IP='%s'",ip);
    mysql_function_query(dbhandle,query,true,"WHITELISTCHECK","d",playerid);
    return 1;
    }
    //Hier den Register Dialog anzeigen
    return 1;
    }


    forward WHITELISTCHECK(playerid);
    public WHITELISTCHECK(playerid)
    {
    if(cache_get_row_count() < 1)
    {
    SCM(playerid,-1,"Du hast dich bereits mit dieser IP-Adresse Registriert.");
    SCM(playerid,-1," Bei einem Multiaccount z.B. für Geschwister melde dich bitte bei Admins mit deiner IP.");
    return KickPlayer(playerid);
    }
    //Hier den Register Dialog anzeigen
    return 1;
    }



    Wir prüfen erst (IPCHECK) ob der Spieler ein Konto hat, wenn ja dann prüfen wir (WHITELISTCHECK) ob er in der Whitelist steht, wenn nein, dann wird er gekickt.

  • hilfe sobald ich es einfüge startet der server linux nicht mehr auf windows fehlerfreier start
    vlt liegt es an der DB ist aber nur so ein gedanke aber sobald ich es alles ausklammere // funktioniert es auf linux bis auf den crashdetect error


    [crashdetect]: Loaded symbols from gamemodes/MVS.amx
    und danach lädt er aber wie weit weiss ich nicht


    hier der log


    [23:05:19]
    [23:05:19] Server Plugins
    [23:05:19] --------------
    [23:05:19] Loading plugin: crashdetect.so
    [23:05:19] Loaded.
    [23:05:19] Loading plugin: mysql.so
    [23:05:19] >> plugin.mysql: running on 6 threads.
    [23:05:19] >> plugin.mysql: R31 successfully loaded.
    [23:05:19] Loaded.
    [23:05:19] Loaded 2 plugins.


    [23:05:19]
    [23:05:19] Filterscripts
    [23:05:19] ---------------
    [23:05:19] Loading filterscript 'ls_elevator.amx'...
    [23:05:19] Unable to load filterscript 'ls_elevator.amx'.
    [23:05:19] Loaded 0 filterscripts.


    [23:05:19] [crashdetect]: Loaded symbols from gamemodes/MVS.amx
    [23:05:19] Script[gamemodes/MVS.amx]: Run time error 19: "File or function is not found"
    [23:05:19] Number of vehicle models: 0
    [23:07:01] RCON_COMMAND_SENT: gmx
    [23:07:11] [crashdetect]: Loaded symbols from gamemodes/MVS.amx
    [23:07:11] Gamemode MVS wird geladen...
    [23:07:11] wird gestartet
    [23:07:11] password = "" (string)
    [23:07:11] Verbindung zur Datenbank erfolgreich hergestellt !
    [23:07:11] Objecte geladen!
    [23:07:11] Fraktions Cars geladen!
    [23:07:11] Gamemode MVS-Reallife erfolgreich geladen !
    [23:07:11] password = "" (string)
    [23:07:11] password = "" (string)
    [23:07:11]
    ----------------------------------
    [23:07:11] MVS Gamemode by Nils24hero
    [23:07:11] ----------------------------------


    [23:07:11] Number of vehicle models: 0

  • Poste mal den Log deines Windows Servers dazu. Dann vergleichen wir mal.
    Du kannst selbst schon mal schauen ob beide die gleiche Version des Plugins drauf haben, wenn das nicht der Fall ist, dann aktualisiere auf dem Linux Server das Plugin zu der Version die du auf Windows hast.

  • Wäre es nicht sinnvoller das in ein join zu packen? Damit man nur eine statt 2 Querys hat?


    Wahrscheinlich schon, mann müsste einen left join machen, und dann prüfen, ob eine Zeile vorhanden ist, wenn nicht passt alles, und wenn eine Zeile vorhanden ist, muss man sich die Spalte der IP aus der Whitelist Tabelle anschauen, wenn diese nicht leer ist passt auch alles, falls sie leer ist, wird er gekickt.


    Nur ob er das Prinzip dahinter dann noch versteht ist die andere Sache. Es bringt ja nichts wenn er einen Code nutzt den er nicht versteht, daran kann er dann nichts ändern und für etwas anderes übernehmen wird auch schwer.


    aerokeks: Wie bewandt bist mit mit SQL? Würdest du einen Join bevorzugen?