|
|||||||||||||||||||||||||||
On Wed, May 26, 1999 at 03:21:45PM +0200, Lennart Hansen wrote: > Jeg ville lige høre om nogle af jer havde en ide til en rutine der > finder alle IP eller nummer fra F.eks. 10.0.0.2 til 10.5.4.55. > > Altså så den(perl) ligger dem i en variabel. så ALLE IP'erne kan bruges > en ad gangen... > > Jeg er startet på en program til banne og unbanne IP'ere med ipchains, > det er i dette program jeg vil have den rutine, her kommer det : > banip.pl > Det er ikke særlig effektivt at banne en IP adresse af gangen, det vil faktisk nok have meget dårlige følger for performance. Det er meget bedre at banne et helt netværk. Det gør du ved at angive en net adresse og en netmask, således som her: ipchains -A input -j DENY -s 10.0.0.0/16 # 10.0.0.0 - 10.0.255.255 ipchains -A input -j DENY -s 1.2.3.0/24 # 1.2.3.0 - 1.2.3.255 Det bliver til meget færre check per IP-pakke (65535 færre i første tilfælde, sammenlignet med en regel pr. IP). Hvis du stadig har brug for en rutine til at finde IP adresserne, kan du stjæle lidt fra det vedlagte script. Mvh, Sune Kirkeby
#!/usr/bin/perl
my $lower = $ARGV[0];
my $upper = $ARGV[1];
# beregn den numeriske (32-bit int) værdi af IP adresserne
for ($lower, $upper) {
s/(\d+)\.(\d+)\.(\d+)\.(\d+)/
$4 + $3 * (2 ** 8) + $2 * (2 ** 16) + $1 * (2 ** 24)
/ex;
}
# for alle adresser ml. $lower og $upper (inklusive)
for (my $i = $lower; $i <= $upper; ++$i) {
# beregn IP adressen ud fra den numeriske værdi
my $ip =
(($i & 0xFF000000) >> 24) . "." .
(($i & 0x00FF0000) >> 16) . "." .
(($i & 0x0000FF00) >> 8) . "." .
(($i & 0x000000FF) >> 0)
;
print $ip . " ($i)\n";
}
|
||||||||||||||
|
||||||||||||||