Thread Wert in Datei schreiben IPv6 (20 answers)
Opened by fred0815 at 2015-04-22 10:15

fred0815
 2015-04-22 10:15
#180766 #180766
User since
2013-12-23
33 Artikel
BenutzerIn

user image
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
Code: (dl )
# 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 :
Code: (dl )
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:
Code: (dl )
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>

Last edited: 2015-04-22 10:17:00 +0200 (CEST)

View full thread Wert in Datei schreiben IPv6