# ist keine numerische IP, dann weiter bei while
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
#!C:/pfad/zu/perl/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
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
<p>Wenn dir der Zugriff verweigert wird, kannst du dich wieder freischalten lassen !<br>
Nimm die IP-Adresse, welche du unterhalb dieser Zeile siehst, füge sie in das Feld unten ein und drücke den Knopf "Senden"<br>
<?php echo $_SERVER['REMOTE_ADDR']; ?>
</p>
<form action="/cgi-bin/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>
2015-04-22T08:48:22 payx
# ist keine numerische IP
use Data::Validate:IP qw(is_ipv4 is_ipv6);
No such File or Directory, execute of /usr/lib/cgi-bin/ipv6_in_htaccess.pl failed
#!/usr/bin/perl
\d
Data::Validate::IP
1
2
3
4
5
6
7
8
9
10
# DOS-Umbrueche (CRLF line terminators)
user@linux:~ $ file /tmp/t.txt
/tmp/t.txt: ASCII text, with CRLF line terminators
# oeffne Datei im vim, setze FileFormat auf Unix und schreibe und schließe die Datei sofort wieder
user@linux:~ $ vim -c "set ff=unix|wq" /tmp/t.txt
# Kontrolle, nun sind es "Unix" Umbrueche (LF line terminators)
user@linux:~ $ file /tmp/t.txt
/tmp/t.txt: ASCII text
1
2
3
4
5
6
7
8
user@linux:~ $ file /tmp/t.txt*
/tmp/t.txt: ASCII text, with CRLF line terminators
user@linux:~ $ perl -i.bak -pe 's/\r\n/\n/' /tmp/t.txt
user@linux:~ $ file /tmp/t.txt*
/tmp/t.txt: ASCII text
/tmp/t.txt.bak: ASCII text, with CRLF line terminators
aus DOS-Format konvertiert
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl -d
use warnings;
use Data::Validate::IP qw(is_ipv4 is_ipv6);
use CGI qw(:standard);
print header();
my $IP = IP;
if (is_ipv4($IP)) {
print "IPv4\n";
}
else {
print "Keine IPv4\n";
}
$IP = IP;
if (is_ipv6($IP)) {
print "IPv6\n";
}
else {
print "Keine IPv6\n";
}
1
2
3
4
<?php echo $_SERVER['REMOTE_ADDR'];?>
<form action="/cgi-bin/ip.pl" method="post" enctype="multipart/form-data">
<td><textarea name=IP size=38></textarea></td>
<input type=submit value="Senden">
use strict;
my $IP = IP;
use strict;
use = strict;
$cgi->param('IP')
$IP = 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
#!/usr/bin/perl -d
use strict;
use warnings;
use Data::Validate::IP qw(is_ipv4 is_ipv6);
use CGI qw(:standard);
print header();
my $cgi = CGI->new;
my $param_IP = $cgi->param('IP');
if (is_ipv4($IP)) {
print "IPv4\n";
}
else {
print "Keine IPv4\n";
}
my $IP = IP;
if (is_ipv6($IP)) {
print "IPv6\n";
}
else {
print "Keine IPv6\n";
}
my $param_IP = $cgi->param('IP');
my $IP = $cgi->param('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
#!/usr/bin/perl use strict; use warnings; use Data::Validate::IP qw(is_ipv4 is_ipv6); use CGI qw(:standard); print header(); my $cgi = CGI->new; my $param_IP = $cgi->param('IP'); if (is_ipv4($param_IP)) { print "IPv4\n"; } else { print "Keine IPv4\n"; } if (is_ipv6($param_IP)) { print "IPv6\n"; } else { print "Keine IPv6\n"; }
2015-04-24T16:30:18 fred0815Barewords sind Wörter ohne Anführungsstriche, hab ich das richtig verstanden ? Denn das beklagt der Debugger immer.
Bareword found, Operator expected, near "2a02"
(Missing Operator before a02)