• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Ip-Sperre

Status
Für weitere Antworten geschlossen.

b00n

Neues Mitglied
Hallo!

Ich kenne mich leider nicht sehr gut mit PHP aus und habe deshalb eine Frage.
Und zwar möchte ich wissen, wie man folgendes in einem PHP-Code umsetzt:

Wenn die ersten beiden Stellen (Beispiel: 89.241) der Ip des Seitenaufrufers der Ip in einem Textdokument auf dem Server entsprechen, dann kann der jenige den Seiteninhalt sehen! Wenn die Ip der aus dem Textdokument nicht der Ip des Seitenaufrufers entspricht, kann derjenige den Seiteninhalt nicht sehen!

Ich hoffe, dabei kann mir hier jemand helfen =)


Mit freundlichen Grüßen

b00n


PS: Ich hab die Ip-Sperre schon mit .htaccess umgesetzt, aber auf dem Server, wo ich jetzt bin, funktioniert dies nicht mehr!
 
Zuletzt bearbeitet:
Werbung:
So ginge es, bin mir aber nicht wirklich sicher ob das die beste Lösung ist:
PHP:
<?php
    $file = trim(file_get_contents('ip.txt'));
    $split = explode('.', $file);
    $allowed = $split[0].'.'.$split[1];
    $ip = $_SERVER['REMOTE_ADDR'];
    if(!preg_match('%'.$allowed.'\.[0-9\.]+%', $ip))
        echo 'Du kommst hier nicht rein!';
    else
        echo 'Herzlich willkommen!';
?>
 
Ok, vielen Dank, dies hilft mir schon sehr weiter!
Aber wie mache ich es jetzt, dass derjenige dessen Ip im Textdokument steht, den Seiteninhalt sieht und derjenige, dessen Ip nicht im Textdokument steht, nur eine weiße Seite sieht! (Also nicht mit echo "Text")

Sorry, aber ich kenne mich nicht wirklich damit aus =/

Mit freundlichen Grüßen

b00n

PS: Geht das jetzt auch, wenn ich 2 Ip-Adressen im Textdokument angebe?
Also, dass zwei Leute den Seiteninhalt sehen können?

/Edit: Das geht nicht mit 2 Ip's! Wie geht das mit 2 Ip's, die die Seite sehen können ?
 
Zuletzt bearbeitet:
Werbung:
nj du machst deine anderen datein, also die die erscheinen soll, wenn man rein kommt(datei1.htm) und die wenn man nicht reinkommt.(datei2.htm)
und dann:

Code:
[LEFT]  [COLOR=#000000] [COLOR=#0000bb]<?php
    $file [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]trim[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]file_get_contents[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]'ip.txt'[/COLOR][COLOR=#007700]));
    [/COLOR][COLOR=#0000bb]$split [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]explode[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]'.'[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]$file[/COLOR][COLOR=#007700]);
    [/COLOR][COLOR=#0000bb]$allowed [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]$split[/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000bb]0[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#dd0000]'.'[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]$split[/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000bb]1[/COLOR][COLOR=#007700]];
    [/COLOR][COLOR=#0000bb]$ip [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]$_SERVER[/COLOR][COLOR=#007700][[/COLOR][COLOR=#dd0000]'REMOTE_ADDR'[/COLOR][COLOR=#007700]];
    if(![/COLOR][COLOR=#0000bb]preg_match[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]'%'[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]$allowed[/COLOR][COLOR=#007700].[/COLOR][COLOR=#dd0000]'\.[0-9\.]+%'[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]$ip[/COLOR][COLOR=#007700]))
        include('datei1.html')[/COLOR][COLOR=#007700];
    else
        [/COLOR][/COLOR][COLOR=#000000][COLOR=#007700]include('datei2.html')[/COLOR][/COLOR][COLOR=#000000][COLOR=#007700];
[/COLOR][COLOR=#0000bb]?>[/COLOR] [/COLOR]   [/LEFT]
@BcF: habs verbessert
 
Zuletzt bearbeitet von einem Moderator:
Mit 2 IPs gehts so (kommt mir aber irgendwie unnötig kompliziert vor :?):
PHP:
<?php
    $file = file_get_contents('ip.txt');
    $splitfile = explode(',', str_replace(array(" ", "\n"), array("", ""), $file));
    foreach($splitfile as $ip):
        $split[] = explode('.', $ip);
    endforeach;
    foreach($split as $split):
        $allowed[] = $split[0].'.'.$split[1];
    endforeach;
    $ip = $_SERVER['REMOTE_ADDR'];
    $subip = preg_replace('%([0-9]+)\.([0-9]+)\.([0-9\.]+)%', '$1.$2', $ip);
    if(!in_array($subip, $allowed))
        echo 'Du kommst hier nicht rein!';
    else
        echo 'Herzlich willkommen!';
?>
In der ip.txt stehen dann die IPs durch Kommata getrennt, z.B.
Code:
1.1.1.1,
2.2.2.2,
3.3.3.3

ODER

1.1.1.1, 2.2.2.2, 3.3.3.3
Oder so ähnlich.

@(old user): Bie deinen includes fehlen Anführungseichen ;)
 
Hallo!

Also, jetzt klappt einiges schon einmal !

Aber wenn ich jetzt die gewünschten Ip's im Textdokument angebe und bei include("datei1.html") und include("datei.html") die gewünschte Datei angebe ( ("test.php") und ("hallo.php")) und anschließend auf die Seite gehe, kommt nur eine weiße Seite!

Was mache ich da noch falsch ?


Mit freundlichen Grüßen

b00n
 
Werbung:
PHP:
<?php

$datei = "ip.txt";
$ips = file($datei);
$USER_IP = $_SERVER['REMOTE_ADDR'];

if(in_array($USER_IP, $ips)){ die('Du wurdest gebannt!'); }

// deine homepage und so ne ^^

?>

die datei ip.txt sieht dann volgendermaßen aus

Code:
127.0.0.1
192.168.0.1
255.255.255.0
123.123.21.45

kannst auch nur eine datei rein schreiben ^^ ist aber auf jeden fall schneller als der komische code von BcF :-D

und zu deinem Include problem... wenn du die dateien einbindest, wieso schreibst du dann nciht nur einmal in deine Hauptdatei das bann zeuchs? Also so:

PHP:
<?php

$datei = "ip.txt";
$ips = file($datei);
$USER_IP = $_SERVER['REMOTE_ADDR'];

if(in_array($USER_IP, $ips)){ die('Du wurdest gebannt!'); }

// deine homepage und so ne ^^

include("./includes/"$_GET['seite'].".html");

?>

Ps: Das ist nur ein beispiel, das es unsicher ist weiß ich!
 
Das hätte ich ja auch hingekriegt :p

Aber sollen ja nur die ersten beiden Stellen überprüft werden(es geht trotzdem einfacher, als mit meinem gerade schnell "hingeschmierten" Code :roll:).

EDIT:
Was mir gerade einfällt, es wäre auch schon ein Stück simpler wenn man in die Textdatei nur die ersten beiden Stellen schreibt, der Rest ist ja unwichtig - dann erspart man sich das Zerlegen.
 
Werbung:
du musst die ips nach kommata trennen:


z.b.
Code:
192.267.0.32,
124.454.0.33,
usw.
 
So, mein nächster Versuch ;)
*.php:
PHP:
<?php
    $allowed = file('ip.txt');
    $ip = explode('.', $_SERVER['REMOTE_ADDR']);
    if(!in_array($ip[0].'.'.$ip[1], $allowed))
        die('<h1>Unauthorized</h1>');
    echo 'Hallo!';
?>
ip.txt (Beispiel):
Code:
12.54
234.45
127.0
Einwände? :p

EDIT:
Regex entfernt ;)
 
Zuletzt bearbeitet:
wenn du mich eminst dann lern PHP :-D sonst versteh cih deinen post irgendwie nicht (old user) ^^

also nur auf den ersten beiden seiten überprüfen ist sone sache... wenn du jetzt sagst das nur auf index1.php und index2.php überprüft werden soll was machst du dann, wenn der, der auf deine seite will gleich auf index3.php geht?^^

so wie ichs gemacht habe scheint mir als die beste lösung.

//Edit: ich habe den einwandt, das du einen regex verwendest... brauch man doch garnicht ^^ viel zu überladen für soetwas :-D
 
Werbung:
Das will einfach irgendwie nicht richtig klappen!
Also ich versuche es noch einmal zu erklären:

Ich habe eine ip.txt-Datei auf dem Server, wo drin zwei Ip's (nur die ersten beiden Stellen davon) stehen!
Wenn man nun auf eine .php-Datei geht sollen nur die Leute, deren Ip in ip.txt steht die Seite sehen können!
Die anderen sollen nur eine weiße Seite sehen oder sie sollen auf eine andere Seite weitergeleitet werden!

Vielleicht hab ich es auch am Anfang falsch erklärt xD
Naja, ich würde mich über eine erneute Antwort freuen =)


Mit freundlichen Grüßen

b00n
 
Zuletzt bearbeitet:
Hab den Regex entfernt ;), ne sinnvollere Möglichkeit als explode() sehe ich aber nicht um an die ersten beiden stellen zu kommen.

@b00n: guck dir meinen Post oben auf dieser Seite an, der Code macht genau das (wenn die Seite weiß sein soll einfach '<h1>Unauthorized</h1>' entfernen).
 
Ja, der Code oben ist eigentlich perfekt (so wie ich es beurteilen kann), aber auch wenn ich die ersten beiden Stellen meiner Ip in ip.txt angebe, kommt, wenn ich die .php-Seite aufrufe die Meldung "Unauthorized" !

Also, irgendwie werden die Ip's aus ip.txt nicht erkannt oO


Mfg

b00n
 
Werbung:
Habs hochgeladen, mit meiner IP versucht und es ging.

Hast du ip.txt auch sicher nach folgenden Kriterien gefüllt:
- Nur die ersten beiden Stellen jeder IP
- Ohne Punkt am ende, also z.B. 127.0
- Eine "Halbadresse" pro Zeile
- Sonst garnichts, auch keine Kommata oder ähnliches
 
Ich habe alles genauso beachtet!
Trotzdem kommt immer "Unauthorized" !

Ich weiß nicht, was ich da falsch mache. . .


Mfg

b00n
 
Werbung:
Nene, ich hab schon die richtige Ip von Wie ist meine IP-Adresse? eingegeben =)

Und ich habe gerade die Ip (ersten beiden Stellen) von einem Freund in die zweite Zeile von ip.txt geschrieben und dann ist er auf meine Seite gegangen und bei ihm stand auch "Unauthorized"!

Also, kann doch etwas an dem Code nicht 100-prozentig stimmen oder?

Also mein Code sieht wie folgt aus:
Code:
[COLOR=#000000][COLOR=#0000bb]<?php
    $allowed [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]file[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]'ip.txt'[/COLOR][COLOR=#007700]);
    [/COLOR][COLOR=#0000bb]$ip [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]explode[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]'.'[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]$_SERVER[/COLOR][COLOR=#007700][[/COLOR][COLOR=#dd0000]'REMOTE_ADDR'[/COLOR][COLOR=#007700]]);
    if(![/COLOR][COLOR=#0000bb]in_array[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$ip[/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000bb]0[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#dd0000]'.'[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]$ip[/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000bb]1[/COLOR][COLOR=#007700]], [/COLOR][COLOR=#0000bb]$allowed[/COLOR][COLOR=#007700]))
        die([/COLOR][COLOR=#dd0000]'<h1>Unauthorized</h1>'[/COLOR][COLOR=#007700]);
    echo [/COLOR][COLOR=#dd0000]'Hallo!'[/COLOR][COLOR=#007700];

//Inhalt meiner Seite

?>
[/COLOR][/COLOR]


Mfg

b00n
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben