Das die Datei überschrieben wird, wenn man sie öffnet, ist mir jetzt neu, das passiert in python nicht, wenn ich sie mit ", w" öffne.
Jetzt habe ich herausgefunden, dass man auch die Kommandozeile mit print `` nehmen kann. Dieser Einzeiler in Zeile 30 tut was er soll:
print `perl -p -i -e 's/allow from $client_ip//g' /pfad/file`
Leider bekomme ich, wenn ich das Script über das Formular abschicke, den Fehler "malformed header from script 'opt_out_test18.pl': Bad Header: 192.168.0.250".
Das ganze Script:
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__;
Was habe ich da schon wieder falsch ?
Last edited: 2023-03-05 11:40:41 +0100 (CET)