1 2 3 4 5 6 7 8 9 10 11 12 13 14
<p>Kopiere die angezeigte IP-Adresse, füge sie in das Feld unten ein und drücke den Knopf "Senden" <br> <?php echo $_SERVER['REMOTE_ADDR']; ?> </p> <form action="ip.pl" method="post" enctype="multipart/form-data" > <table align="left"> </td> <td>IP:</td> <td><textarea name=IP size=15></textarea></td> <td colspan=2 align=center> <input type=submit value="Senden"></td> </table> </form>
1 2 3 4 5 6 7
#!/pfad/zu/perl @IP=(IP); open(HTACCESS,">>.htaccess"); foreach $IP (@IP) { print HTACCESS "$IP\n"; } close(HTACCESS);
1
2
3
4
5
6
7
8
9
10
11
12
order deny, allow
#google#
allow from 66.249.64.1
#yandex#
allow from 141.8.147.1
#bing#
allow from 157.55.34.181
#msn#
allow from 199.30.20.58
#user#
allow from 12.34.56.78
deny from all
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
#!/usr/bin/perl use strict; use warnings; use CGI; my $cgi = CGI->new; my $param_IP = $cgi->param('IP'); # Hole den Parameter IP (=Inhalt der Textarea) my @IP = split /\cM?\cJ/, $param_IP if defined($param_IP) and length($param_IP); # Teile mehrzeilige Einträge im Textfeld in einzelne Zeilen und speicher sie ins Array my %IP; # Hash zum merken der IPs open(my $fh,"<", ".htaccess") or die "Cant open .htaccess: $!"; # Datei zum Lesen öffnen while (my $line = <$fh>) { # IP zeilenweise einlesen next if not $line =~ m|allow\s+from\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s*$|i; # ist keine numerische IP, dann weiter bei while $IP{$1}++; # numerische IP merken } close($fh) or die "Cant close .htaccess: $!"; foreach my $IP (@IP) { $IP =~ s/[\cM\cJ]//g; # entferne alle Zeilenenden next if not $IP =~ m|^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$|; # ist keine numerische IP $IP{$1}++; } use Fcntl qw(:flock); open(my $fh,">", ".htaccess") or die "Cant open .htaccess: $!"; flock ($fh, LOCK_EX) or die "Cant lock .htaccess: $!" # Datei sperren gegen mehrfache Schreibzugriffe print $fh "allow from ",$_,"\n" for sort keys %IP; # close($fh) or die "Cant close .htaccess: $!"; print $cgi->header( -status => '204 No Content', # only HTTP header is in response );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!C:/xampp/perl/bin/perl.exe -wT
use strict;
use warnings;
use CGI;
my $cgi = CGI->new;
my $param_IP = $cgi->param('IP'); # Hole den Parameter IP (=Inhalt der Textarea)
my @IP = split /\cM\cJ/, $param_IP if length($param_IP); # Teile mehrzeilige Einträge im Textfeld in einzelne Zeilen und speicher sie ins Array
open(my $fh,">>", ".htaccess") or die "Cant open .htaccess: $!";
foreach my $IP (@IP) {
$IP =~ s/[\cM\cJ]//g; # entferne alle Zeilenenden
print $fh $IP,"\n"; # speichere eine IP
}
close($fh) or die "Cant close .htaccess: $!";
print $cgi->header(
-status => '204 No Content', # only HTTP header is in response
2013-12-23T11:16:48 GwenDragonDu verwendest mod_perl?
hat das einen Grund?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
%% [Mon Dec 23 12:29:36 2013] POST /cgi-bin/ip.pl HTTP/1.1
%% 500 C:/xampp/cgi-bin/ip.pl
%request
Host: axel.spdns.de
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://axel.spdns.de/spielplatz/ip.php
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------15497186223744
Content-Length: 153
-----------------------------15497186223744
Content-Disposition: form-data; name="IP"
149.172.53.122
-----------------------------15497186223744--
%response
%stderr
syntax error at C:/xampp/cgi-bin/ip.pl line 15, at EOF
Execution of C:/xampp/cgi-bin/ip.pl aborted due to compilation errors.
2013-12-23T11:37:01 RaubtierDas in (siehe oben) fehlende ); am Scriptende fehlt hoffentlich nur hier im Board und nicht in deinem Script?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!C:/xampp/perl/bin/perl.exe -wT
use strict;
use warnings;
use CGI;
my $cgi = CGI->new;
my $param_IP = $cgi->param('IP'); # Hole den Parameter IP (=Inhalt der Textarea)
my @IP = split /\cM\cJ/, $param_IP if length($param_IP); # Teile mehrzeilige Einträge im Textfeld in einzelne Zeilen und speicher sie ins Array
open(my $fh,">>", ".htaccess") or die "Cant open .htaccess: $!";
foreach my $IP (@IP) {
$IP =~ s/[\cM\cJ]//g; # entferne alle Zeilenenden
print $fh $IP,"\n"; # speichere eine IP
}
close($fh) or die "Cant close .htaccess: $!";
print $cgi->header(
-status => '204 No Content',); # only HTTP header is in response
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!C:/xampp/perl/bin/perl.exe -wT
use strict;
use warnings;
use CGI;
my $cgi = CGI->new;
my $param_IP = $cgi->param('IP'); # Hole den Parameter IP (=Inhalt der Textarea)
my @IP = split /\cM?\cJ/, $param_IP if defined($param_IP) and length($param_IP); # Teile mehrzeilige Einträge im Textfeld in einzelne Zeilen und speicher sie ins Array
open(my $fh,">>", ".htaccess") or die "Cant open .htaccess: $!";
foreach my $IP (@IP) {
$IP =~ s/[\cM\cJ]//g; # entferne alle Zeilenenden
print $fh 'allow from ';
print $fh $IP,"\n"; # speichere eine IP
}
close($fh) or die "Cant close .htaccess: $!";
print $cgi->header(
-status => '204 No Content',); # only HTTP header is in response
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/pfad/zu/perl
use strict;
use warnings;
use CGI;
my $cgi = CGI->new;
my $param_IP = $cgi->param('IP'); # Hole den Parameter IP (=Inhalt der Textarea)
my @IP = split /\cM?\cJ/, $param_IP if defined($param_IP) and length($param_IP); # Teile mehrzeilige Einträge im Textfeld in einzelne Zeilen und speicher sie ins Array
my %IP; # Hash zum merken der IPs
open(my $fh,"<", ".htaccess") or die "Cant open .htaccess: $!"; # Datei zum Lesen öffnen
while (my $line = <$fh>) { # IP zeilenweise einlesen
next if not $line =~ m|allow\s+from\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s*$|i; # ist keine numerische IP, dann weiter bei while
$IP{$1}++; # numerische IP merken
}
close($fh) or die "Cant close .htaccess: $!";
foreach my $IP (@IP) {
$IP =~ s/[\cM\cJ]//g; # entferne alle Zeilenenden
next if not $IP =~ m|^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$|; # ist keine numerische IP
$IP{$1}++;
}
use Fcntl qw(:flock);
open(my $fh,">", ".htaccess") or die "Cant open .htaccess: $!";
flock ($fh, LOCK_EX) or die "Cant lock .htaccess: $!"; # Datei sperren gegen mehrfache Schreibzugriffe
print $fh "allow from ",$_,"\n" for sort keys %IP; #
close($fh) or die "Cant close .htaccess: $!";
print $cgi->header(
-status => '204 No Content',); # only HTTP header is in response
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
my $cgi = CGI->new;
my $param_IP = $cgi->param('IP'); # Hole den Parameter IP (=Inhalt der Textarea)
my @IP = split /\cM?\cJ/, $param_IP if defined($param_IP) and length($param_IP); # Teile mehrzeilige Einträge im Textfeld in einzelne Zeilen und speicher sie ins Array
my %IP; # Hash zum merken der IPs
open(my $fh,"<", "/var/www/html/spielplatz/.htaccess") or die "Cant open .htaccess: $!"; # Datei zum Lesen öffnen
while (my $line = <$fh>) { # IP zeilenweise einlesen
next if not $line =~ m|allow\s+from\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s*$|i; # ist keine numerische IP, dann weiter bei while
$IP{$1}++; # numerische IP merken
}
close($fh) or die "Cant close .htaccess: $!";
foreach my $IP (@IP) {
$IP =~ s/[\cM\cJ]//g; # entferne alle Zeilenenden
next if not $IP =~ m|^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$|; # ist keine numerische IP
$IP{$1}++;
}
use Fcntl qw(:flock);
open(my $fg,">", "/var/www/html/spielplatz/.htaccess") or die "Cant open .htaccess: $!";
flock ($fg, LOCK_EX) or die "Cant lock .htaccess: $!"; # Datei sperren gegen mehrfache Schreibzugriffe
print $fg "allow from ",$_,"\n" for sort keys %IP; #
close($fg) or die "Cant close .htaccess: $!";
print $cgi->header(
-status => '204 No Content',); # only HTTP header is in response
2023-02-28T11:54:06 GwenDragonWenn es nicht massiv viele Connects per IPv6 gibt oder der Server nicht per IPv6 am WWW hängt, ist das Prüfen auf IPv6 sinnlos.
2023-02-28T12:46:42 GwenDragonHier geht es um einen Webserver, bei dem per .htaccess Client-IPs gesperrt werden sollen.
2023-02-28T12:46:42 GwenDragonWenn der Server kein IPv6 kann ...
2023-02-28T13:36:24 LinuxerWenn der Server nur IPv4 und kein IPv6 kann, dann kann da auch keine IPv6 Anfrage ankommen.
2023-03-01T12:28:23 LinuxerDir ist schon klar, dass IPv6 und IPv4 vollkommen verschiedene Addressierungsarten sind und ein Client mit IPv6 Adresse einen Server mit reiner IPv4 Adresse nicht direkt erreichen kann?
QuoteEine direkte Kommunikation von IP zu IP findet also nicht statt.
2023-03-01T12:54:12 LinuxerTut mir leid, aber ich empfehle Dir dringend, den Besuch eines Kurses zum Thema Netzwerk-Grundlagen oder das Studium eines guten Buches dazu.
Deine Aussage ist schlichtweg falsch für IP-basierte Netzwerke:
QuoteEine direkte Kommunikation von IP zu IP findet also nicht statt.
Edits:
IP-Adressen sind die Grundlage für den Verkehr in einem IP-basierten Netzwerk.
Die Namen für Systeme im Netzwerk sind da quasi drüber gelegt, damit $Mensch sich nicht die Adressen selber merken muss. Es ist für die meisten Menschen nunmal einfacher sich "www.web.de" zu merken, anstatt "82.165.229.138". Im Hintergrund werden diese Namen aber auf IP-Adressen "übersetzt" und mit diesen Adressen findet dann die Verbindung statt.
Vereinfachter Ablauf eines Zugriffs auf einen Webserver:
- Client will an www.example.org eine Anfrage schicken, Z.b: /index.html abholen
- Client versucht www.example.org auf eine IP aufzulösen (dafür gibt es das DNS System)
- Hat der Client eine IP auflösen können, baut er seine Anfrage zu sammen, mit der aufgelösten IP Adresse und seiner eigenen IP Adresse als Absender-Adresse
- Im Datenpaket steht dann u.a. drin, welcher Resource (hier: /index.html) auf dem Server abgefragt werden soll und auch welche Hostname (hier also www.example.org) angesprochen wurde
- Der Server verarbeitet die Anfrage und schickt seine Antwort an die in der Anfrage stehenden Absender-Adresse
QuoteDann schreib halt das Programm für fred um und poste es, anstatt hier rum zu mäkeln.2023-02-28T12:46:42 GwenDragonWenn der Server kein IPv6 kann ...
Dann sperrt das script via .htaccess alle Anfragen die mit IPv6 reinkommen weil kein gültiges IPv4?
2023-02-28T15:07:00 GwenDragonQuoteDann schreib halt das Programm für fred um und poste es, anstatt hier rum zu mäkeln.2023-02-28T12:46:42 GwenDragonWenn der Server kein IPv6 kann ...
Dann sperrt das script via .htaccess alle Anfragen die mit IPv6 reinkommen weil kein gültiges IPv4?
Guest RemEcht, in 2013 waren schon alle auf IPv6 umgestellt, ISP und Server? Ich bezweifele das.Ein Gerücht besagt, dass es auch IPv6 Notation geben soll ...
2023-02-28T12:03:12 GwenDragonGuest RemEcht, in 2013 waren schon alle auf IPv6 umgestellt, ISP und Server? Ich bezweifele das.Ein Gerücht besagt, dass es auch IPv6 Notation geben soll ...
Da ist nämlich meinen Code von 2013 zu bemängeln deinerseit6es eher unpassend.
2023-03-01T07:27:49 fred0815Da die IP im Script schon gemerkt wird, könnte ich damit doch bestimmt auch verhindern, dass jemand eine andere IP statt seiner eigenen einträgt, oder ?
2023-03-01T07:27:49 fred0815Eigentlich wollte ich noch etwas fragen.
Da die IP im Script schon gemerkt wird, könnte ich damit doch bestimmt auch verhindern, dass jemand eine andere IP statt seiner eigenen einträgt, oder ?
2023-02-28T15:10:38 GwenDragon@fred0815 Bei Problemen bitte frage den Gast Rem weiter, der will mehr Kompetenzen haben.
Ich bin hier raus, ich habe auch keine Lust mehr, auf jede gute/schlechte Kritik oder Trollerei anderer zu reagieren.
2023-03-01T10:52:35 LinuxerReaktionen dazu (Hinweis, Kritik oder Trollerei) gab es ja bereits an anderer Stelle in diesem Themenbaum.
Leider ohne weitere Antworten.
2023-03-01T11:22:04 LinuxerNaja, mindestens auf GwenDragons Beitrag msg #194716 hätte ich eine Antwort erwartet.
2023-02-28T13:36:24 LinuxerWenn der Server nur IPv4 und kein IPv6 kann, dann kann da auch keine IPv6 Anfrage ankommen.
Damit braucht auch nichts gesperrt werden.
Wenn Du da einen anderen Wissensstand hast, wie/dass ein IPv6 Paket von einem IPv4 Server verarbeitet werden kann, lass uns bitte daran teilhaben.
1
2
3
4
5
6
if ( param("IP") eq $ENV{REMOTE_IP} # wenn die IP des anfragenden Browsers dieselbe wie per Textarea übersandte
and param('DeleteIP') eq "1" # Wenn das ANkreuzfeld zum löschen angekreuzt ist
)
{
# hier den Code zum Löschen der aus der .htaccess
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use Fcntl qw(:flock);
my $htaccess_file = "/var/www/html/.test";
my $cgi = CGI->new;
my $param_IP = $cgi->param('IP'); # Hole den Parameter IP (=Inhalt der Textarea)
#my $client_ip = $ENV{'REMOTE_ADDR'}; # ermittle IP des Clients, sollte bei CGI gesetzt sein
my $client_ip = "192.168.155.250";
print($client_ip);
if($client_ip =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/)
{
$client_ip = $1;
}
chomp($client_ip);
if($client_ip =~ m/^(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)$/)
{
print("\n$client_ip gefunden\n");
if($1 <= 255 && $2 <= 255 && $3 <= 255 && $4 <= 255)
{
print("Jeder Bereich der IP ist gültig - $1.$2.$3.$4\n");
print("\n$client_ip ist eine IPv4\n");
use Fcntl qw(:flock);
open(my $htaccess_file,">", $htaccess_file) or die "Kann Datei nicht öffnen: $!";
while (<$htaccess_file,>) {
my $line = $client_ip;
my @result = grep ($client_ip);
}
close($htaccess_file) or die "Kann Datei nicht schliessen $!";
}
else
{
print("\n$client_ip ist keine gültige IPv4\n");
}
}
else
{
print("\n$client_ip hat das falsche Format\n");
}
print $cgi->header(
-status => '204 No Content',); # only HTTP header is in response
__END__;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
my $htaccess_file = "/pfad/file";
my $cgi = CGI->new;
my $param_IP = $cgi->param('IP'); # Hole den Parameter IP (=Inhalt der Textarea)
my $client_ip = $ENV{'REMOTE_ADDR'}; # ermittle IP des Clients, sollte bei CGI gesetzt sein
#my $client_ip = "192.168.0.250";
print($client_ip);
if($client_ip =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/)
{
$client_ip = $1;
}
chomp($client_ip);
if($client_ip =~ m/^(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)$/)
{
print("\n$client_ip gefunden\n");
if($1 <= 255 && $2 <= 255 && $3 <= 255 && $4 <= 255)
{
print("Jeder Bereich der IP ist gültig - $1.$2.$3.$4\n");
print("\n$client_ip ist eine IPv4\n");
print `perl -p -i -e 's/allow from $client_ip//g' $htaccess_file`
}
else
{
print("\n$client_ip ist keine gültige IPv4\n");
}
}
else
{
print("\n$client_ip hat das falsche Format\n");
}
print $cgi->header(
-status => '204 No Content',); # only HTTP header is in response
__END__;
Hallo Welt;
1
2
3
4
5
6
prompt $ echo "### test.txt"; cat test.txt; echo "### executing test.py"; python test.py; echo "### cat test.txt"; cat test.txt
### test.txt
Hallo Welt.
### executing test.py
### cat test.txt
prompt $
print $cgi->header('text/plain), $client_ip;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
$remoteip = $_SERVER['REMOTE_ADDR'];
$lesedatei = file("/pfad/datei");
//print_r($lesedatei);
$allow_from = ("allow from");
//echo $allow_from;
$ersetzedurch = ("");
echo $ersetzedurch;
$gesuchtezeile = ("$allow_from $remoteip");
//echo $gesuchtezeile;
foreach ($lesedatei as $zeile)
{
if (strpos($zeile,$gesuchtezeile) !== false )
{
echo "Deine IP wurde gefunden. ";
echo "<br />";
$loeschezeile = str_replace($gesuchtezeile, $ersetzedurch, $lesedatei);
// print_r($loeschezeile);
$schreibedatei = file_put_contents("/pfad/datei", $loeschezeile);
echo '<h2>Die IP ';
echo $remoteip;
echo ' wurde gelöscht</h2>';
echo "<br />";
}
else
{
//echo "Nicht gefunden. ";
}
}
?>
<h2> Jetzt ist dir der Zugang zur Seite wieder verwehrt. </h2>
<h1><a href="index.php" target="_self">Startseite </a></h1>
<?php
$frei = file_get_contents('/pfad/anderedatei.txt');
if (intval($frei) == 0){
echo "Zur Zeit ist niemand freigeschaltet";
} else {
echo "Anzahl Freischaltungen: $frei"; }
?>
<br>
<?php
$filename = '/pfad/anderedatei.txt';
if (file_exists($filename)) {
echo "Zuletzt geprüft:<br />\n " . date ("d.m.Y H:i:s", filemtime($filename));
}
echo "<br />";
?>
2023-03-06T10:14:20 fred0815Ah, dann habe ich das verwechselt, in PHP gibts ja einige Möglichkeiten eine Datei zu öffnen.
1
2
3
4
5
use IO::File;
my $fh = IO::File->new;
$fh->open('logfile', O_CREAT|O_RDWR|O_APPEND) or die $!;
$fh->print("Neue Zeile\n");
$fh->close;