Hi, ihr habt mir das letzte Mal so toll geholfen und jetzt habe ich schon das nächste Problemchen.
Ich möchte mit Perl eine IPv6-Adresse in eine .htaccess schreiben, das Script, das ich habe, prüft aber ob es sich um eine IPv4, also numerische IP handelt. Könnt ihr mir einen Tip geben, wie das Script auch Doppelpunkte und Hexadezimale Eingaben akzeptiert ?
Das ganze muss an dem
# ist keine numerische IP, dann weiter bei while
liegen, aber wie genau mache ich das ?
Danke schonmal im vorraus für die Tips.
Hier nochmal die ip.pl :
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
Und hier dann die ip.php:
<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>
Last edited: 2015-04-22 10:17:00 +0200 (CEST)