die variable für IP's?{'REMOTE_ADDR'}
Alain
- cgi
0 $xNeTworKx0 Alain0 $xNeTworKx0 Alain0 $xNeTworKx0 Alain0 $xNeTworKx0 Alain
0 Sönke Tesch0 Alain
sorry das ich so spät noch störe,
ich versuchs nun mit dem cgi da ich mit server confic sowieso kein
meister bin und natürlich auch nicht unbedingt mit den cgi's.
Dennoch versuch ich durch andere cgis und selfhtml seit gestern morgen
rauszufinden wie ich die variable finde für IP's(REMOTE_ADDR)
zum vergleichen einer liste (werd noch wahnsinnig).
Ok ich möchte es hier mal die variable schreiben:
$ip_now = $ENV{'REMOTE_ADDR'};
$ip_ab = "64.2.240.1";
@ip_ac =~ split(/^\d+.\d+.\d+.\d+$/);
foreach $ip_ab (@ip_ac)
{
if ($ip_ab == $ip_now)
{print "Content-type: text/html\n\n";
print "your IP $ip_now was banned from this chat\n";}}
das problem ist dass nun der browser meldet "keine daten" oder so,
aber dafür kein error 500 meldet.
was ist daran falsch?
Wäre froh um einen Rat.
Gruss Alain
Hallo,
ich versuchs nun mit dem cgi da ich mit server confic sowieso kein
meister bin und natürlich auch nicht unbedingt mit den cgi's.
Dennoch versuch ich durch andere cgis und selfhtml seit gestern morgen
rauszufinden wie ich die variable finde für IP's(REMOTE_ADDR)
zum vergleichen einer liste (werd noch wahnsinnig).
Ok ich möchte es hier mal die variable schreiben:
$ip_now = $ENV{'REMOTE_ADDR'};
$ip_ab = "64.2.240.1";
@ip_ac =~ split(/^\d+.\d+.\d+.\d+$/);
Wozu dient hier die Zeile, ich komm da irgendwie nicht ganz mit.
foreach $ip_ab (@ip_ac)
{
if ($ip_ab == $ip_now)
Du hast hier Strings und keine Zahlen, also eq statt == .Verwendest du nicht -w und use strict ?
{print "Content-type: text/html\n\n";
print "your IP $ip_now was banned from this chat\n";}}
Hmmm hier mal eine Möglichkeit :
#!/usr/bin/perl -w
use strict;
my @gesperrte_ips = ('212.34.57.14','47.2.234.6','12.234.75.2','255.67.4.21','195.3.133.87','93.45.2.46');
print "Content-type:text/html\n\n";
foreach(@gesperrte_ips) {
if ($_ eq $ENV{'REMOTE_ADDR'}) {
print "Deine IP $_ ist gesperrt !\n";
}
}
Hallo,
Guten tag,
$ip_now = $ENV{'REMOTE_ADDR'};
$ip_ab = "64.2.240.1";
@ip_ac =~ split(/^\d+.\d+.\d+.\d+$/);
Muss man $ip_ab nicht splitten mit @ip_ac um die ip genau zu
formulieren? Desshalb diese zeile.
Wozu dient hier die Zeile, ich komm da irgendwie nicht ganz mit.
foreach $ip_ab (@ip_ac)
{
if ($ip_ab == $ip_now)
Die variable $ip_now wird benötigt noch für eine zweite funktion
die aber eigentlich nichts mit der überprüfung von der liste zu tun hat.
Du hast hier Strings und keine Zahlen, also eq statt == .Verwendest du nicht -w und use strict ?
hab ich schon aber nützt mir nicht viel,da der browser nur
"Software error:
Execution of /homepages/16/d1234567/htdocs/temp1/indextest.cgi
aborted due to compilation errors."meldet.
Wie übrigens auch bei Deinem Beispiel. >>>>?
{print "Content-type: text/html\n\n";
print "your IP $ip_now was banned from this chat\n";}}
Hmmm hier mal eine Möglichkeit :
#!/usr/bin/perl -w
use strict;
my @gesperrte_ips = ('212.34.57.14','47.2.234.6','12.234.75.2','255.67.4.21','195.3.133.87','93.45.2.46');
print "Content-type:text/html\n\n";
foreach(@gesperrte_ips) {
if ($_ eq $ENV{'REMOTE_ADDR'}) {
print "Deine IP $_ ist gesperrt !\n";
}
}
Kann es sein dass wenn einmal ein fehler passiert ist der server nur noch dies meldet?
Mein host ist bei puretec.
Gruss vom Alain
Hallo,
Guten tag,
$ip_now = $ENV{'REMOTE_ADDR'};
$ip_ab = "64.2.240.1";
@ip_ac =~ split(/^\d+.\d+.\d+.\d+$/);
Muss man $ip_ab nicht splitten mit @ip_ac um die ip genau zu
formulieren? Desshalb diese zeile.
Wozu willst du denn die IP in die einzelnen Teile zerlegen. Das verstehe ich nicht?
foreach $ip_ab (@ip_ac)
{
if ($ip_ab == $ip_now)
Die variable $ip_now wird benötigt noch für eine zweite funktion
die aber eigentlich nichts mit der überprüfung von der liste zu tun hat.
Kein Problem, dann fügst du eben $ip_now statt $ENV{'REMOTE_ADDR'} in meinem Script ein.
Du hast hier Strings und keine Zahlen, also eq statt == .Verwendest du nicht -w und use strict ?
hab ich schon aber nützt mir nicht viel,da der browser nur
"Software error:
Execution of /homepages/16/d1234567/htdocs/temp1/indextest.cgi
aborted due to compilation errors."meldet.
Wie übrigens auch bei Deinem Beispiel. >>>>?
Doch, mein Bsp. funktioniert. Was steht den im Errolog ? Ich kenne Puretec nicht, vielleicht liegt es daran daß der Pfad zu Perl nicht stimmt (#!/usr/bin/perl). Aber schwer zu sagen, ohne zu wissen was im Errolog steht. Was zu beachten ist, das Script funktioniert natürlich nicht von der Eingabeaufforderung aus, da dort keine IP zurückgegeben wird.
Natürlich kannst du jetzt auch hergehen, und rückfragen, ob eine IP ausgegeben wird.Ich wollte es im Bsp. nur vereinfacht darstellen.
{print "Content-type: text/html\n\n";
print "your IP $ip_now was banned from this chat\n";}}
Hmmm hier mal eine Möglichkeit :
#!/usr/bin/perl -w
use strict;
my @gesperrte_ips = ('212.34.57.14','47.2.234.6','12.234.75.2','255.67.4.21','195.3.133.87','93.45.2.46');
print "Content-type:text/html\n\n";
foreach(@gesperrte_ips) {
if ($_ eq $ENV{'REMOTE_ADDR'}) {
print "Deine IP $_ ist gesperrt !\n";
}
}
Kann es sein dass wenn einmal ein fehler passiert ist der server nur noch dies meldet?
Nein, der Server raunzt nur, wenn wirklich ein Fehler darin vorkommt.
$xNeTworKx.
hallo $xNeTworKx,
Super es funtzt,
ich hatte vergessen die htaccess einzufügen jetzt gehts :-)
Eine Frage der gesperrten Ip_liste hät ich noch,
kann man da beliebig viele ip's in die liste einfügen oder gibts da
eine begrenzung?
Gruss vom Alain
Hi,
kann man da beliebig viele ip's in die liste einfügen oder gibts da
eine begrenzung?
Du kannst so viel da rein stopfen, bis der Speicher voll ist :)
$xNeTworKx.
Hi,
hallo,
hmmmmm,klingt ja gut :-)
kann man da beliebig viele ip's in die liste einfügen oder gibts da
eine begrenzung?
wie ist das, könnte man auch einen teil der IP also z.B. '24.234'
in die liste einfügen um grundsätzlich alle ,die mit IP24.234 beginnen auszugrenzen
oder brauchts da noch einen code mehr?
Du kannst so viel da rein stopfen, bis der Speicher voll ist :)
$xNeTworKx.
Gruss vom Alain
Hi,
wie ist das, könnte man auch einen teil der IP also z.B. '24.234'
in die liste einfügen um grundsätzlich alle ,die mit IP24.234 beginnen auszugrenzen
oder brauchts da noch einen code mehr?
Eine Möglichkeit von vielen, wäre, daß du in der Schleife statt einem Vergleich, einen regulären Suchausdruck einfügst. Du vergleichst einfach die IP mit allen Strings im Array. wenn zB '234.23' ein Strings ist, wird jetzt auch eine IP, die beispielsweise 234.23.46.21 lautet ausgegrenzt :
foreach(@gesperrte_ips) {
if ($ENV{'REMOTE_ADDR'} =~ /^$_/) {
print "Die IP $ENV{'REMOTE_ADDR'} ist gesperrt !\n";
}
}
Hi,
wie ist das, könnte man auch einen teil der IP also z.B. '24.234'
in die liste einfügen um grundsätzlich alle ,die mit IP24.234 beginnen auszugrenzen
oder brauchts da noch einen code mehr?
Eine Möglichkeit von vielen, wäre, daß du in der Schleife statt einem Vergleich, einen regulären Suchausdruck einfügst. Du vergleichst einfach die IP mit allen Strings im Array. wenn zB '234.23' ein Strings ist, wird jetzt auch eine IP, die beispielsweise 234.23.46.21 lautet ausgegrenzt :
foreach(@gesperrte_ips) {
if ($ENV{'REMOTE_ADDR'} =~ /^$_/) {
print "Die IP $ENV{'REMOTE_ADDR'} ist gesperrt !\n";
}
}
Besten dank an Dich,
es klappt so genau wie ich es möchte :-)
Gruss vom Alain
if ($ip_ab == $ip_now)
{print "Content-type: text/html\n\n";
print "your IP $ip_now was banned from this chat\n";}}
Zwei Hinweise:
1. Der Server ist darauf angewiesen, daß Du in _jedem_ Fall die Content-Type:-Kopfzeile ausgibst. Diese Zeile muß also über der if-Abfrage stehen.
2. Kopfzeilen sollten mit \r\n enden, nicht \n. In Deinem Fall müsste es also
print "Content-Type: text/html\r\n\r\n";
heißen.
Davon abgesehen könnte Dich eventuell eine Apache-Einstellung namens deny interessieren, mit der sich anhand einer einer ganzen Reihe Möglichkeiten von IPs über Domains bis zu sonstigen Sachen, auf exakte Treffer, teilweise Treffer oder auch mittels Mustern, Verbindungen aussperren lassen: http://httpd.apache.org/docs/mod/mod_access.html.
Von der Last her eine ganze Ecke günstiger als extra Perl zu starten und obendrein wohl auch sicherer. Ob Du mod_access tatsächlich gebrauchen kannst, kommt allerdings drauf an, was genau Du vor hast.
Gruß,
soenk.e
if ($ip_ab == $ip_now)
{print "Content-type: text/html\n\n";
print "your IP $ip_now was banned from this chat\n";}}
Hallo soenk.e,
Zwei Hinweise:
- Der Server ist darauf angewiesen, daß Du in _jedem_ Fall die Content-Type:-Kopfzeile ausgibst. Diese Zeile muß also über der if-Abfrage stehen.
- Kopfzeilen sollten mit \r\n enden, nicht \n. In Deinem Fall müsste es also
print "Content-Type: text/html\r\n\r\n";
heißen.
Danke für die Hinweise :-)
aber das cgi läuft (siehe weiter unten)
Davon abgesehen könnte Dich eventuell eine Apache-Einstellung namens deny interessieren, mit der sich anhand einer einer ganzen Reihe Möglichkeiten von IPs über Domains bis zu sonstigen Sachen, auf exakte Treffer, teilweise Treffer oder auch mittels Mustern, Verbindungen aussperren lassen: http://httpd.apache.org/docs/mod/mod_access.html.
Von der Last her eine ganze Ecke günstiger als extra Perl zu starten und obendrein wohl auch sicherer. Ob Du mod_access tatsächlich gebrauchen kannst, kommt allerdings drauf an, was genau Du vor hast.
das mit deny,allow funktioniert eben leider nicht so ganz
(vielleicht was falsch),sonst
würde ich schon lieber dieses nehmen anstatt das cgi.
Weiss auch nicht wesshalbes nicht geht.
Was ich damit bezwecken möchte ist folgendes,
von zeit zu zeit check ich die server log-datei ,wenn ich sehe das irgend
ein Benutzer mit ner festen IP-adresse versucht in ein verzeichniss einzudringen
wo er normalerweise nichts verloren hat,
dann möchte ich ihm(durch seine IP-addresse)
den zugang zu diesem verzeichniss
sperren, falls er es trotzdem schafft mit password/username.
Mit dem cgi schreibe ich diese Ip's nachträglich rein um somit eventuell
diesem user,wenn er das nächstemal schafft in dieses verzeichniss einzudringen
den zugang zu verweigern durch seine IP.
gruss Alain
Gruß,
soenk.e
Zwei Hinweise:
- Der Server ist darauf angewiesen, daß Du in _jedem_ Fall die Content-Type:-Kopfzeile ausgibst. Diese Zeile muß also über der if-Abfrage stehen.
- Kopfzeilen sollten mit \r\n enden, nicht \n. In Deinem Fall müsste es also
print "Content-Type: text/html\r\n\r\n";
heißen.
Danke für die Hinweise :-)
aber das cgi läuft (siehe weiter unten)
Hab's mir jetzt nicht weiter angeschaut, aber Du solltest trotzdem auf diese beiden Punkte achten. Das es bei Dir läuft heißt ja noch lange nicht, daß es woanders läuft.
Davon abgesehen könnte Dich eventuell eine Apache-Einstellung namens deny interessieren, mit der sich anhand einer einer ganzen
das mit deny,allow funktioniert eben leider nicht so ganz
(vielleicht was falsch),sonst
würde ich schon lieber dieses nehmen anstatt das cgi.
Weiss auch nicht wesshalbes nicht geht.
Also an
Order deny,allow
Deny from 1.2.3.4
kann man eigentlich nicht viel falsch machen :)
Was ich damit bezwecken möchte ist folgendes,
von zeit zu zeit check ich die server log-datei ,wenn ich sehe das irgendein Benutzer mit ner festen IP-adresse versucht in ein Verzeichniss einzudringen wo er normalerweise nichts verloren hat, dann möchte ich ihm(durch seine IP-addresse) den zugang zu diesem verzeichniss sperren
Woher willst Du wissen, daß diese Adresse fest ist? Ich habe irgendwie Zweifel, ob das, was Du da vor hast, überhaupt halbwegs sicher greift und somit den Aufwand rechtfertigt.
Falls Du tatsächlich einen Eindringling feststellst, solltest Du nicht die Adresse sperren, von der er kommt, sondern Namen und Passwort, die er benutzt hat. Ansonsten geht er einfach zu seinem Nachbarn und logt sich von da aus ein - da kannst Du Adressen sperren soviel Du willst.
Gruß,
soenk.e