Wertebreich Integer contra IPv4 in Long
bearbeitet von Tagwächter> Hallo Rolf b,
>
> > Wenn Du auf Schieberei verzichtest und lediglich die Bit-Operatoren verwendest (& \| und ~), ist alles gut. Wie Du mit 32-bit Integers aus der Präfixlänge eine Subnetzmaske machst, habe ich oben beschrieben (-pow(2, 32-$prefixlaenge)).
>
> Scheint mit pow() auch nicht zu funktionieren, da bei ip2long() und long2ip() scheinbar ein Fehler mit einem anderen ausgeglichen wird ... Aber mit
>
> ~~~~php
>
> $netmask = 0xFFFFFFFF << (32 -$cidr);
>
> ~~~~
>
> scheint es wirklich zu funktionieren. Ich teste gerade noch.
Und dann willst Du irre langsames und kompliziertes Zeug machen?
Da hast Du:
~~~php
<?php
$netmask = 0xFFFFFFFF;
var_dump($netmask); ### float(4294967295)
$netmask = ip2long('255.255.255.255');
var_dump($netmask); ### int(-1)
$netmask = sprintf('%u', ip2long('255.255.255.255'));
var_dump($netmask); ### string(10) "4294967295"
$netmask=1*$netmask;# implizite Typumwandlung durch Rechenoperation
var_dump($netmask); ### float(4294967295)
~~~
Hinter den Ausgaben stehen die Ausgaben, die auf einem 32-Bit-System kommen. Auf 64-Bit-Systemen kommt:
~~~
int(4294967295)
int(4294967295)
string(10) "4294967295"
int(4294967295)
~~~
Wie auch immer. [Hier](https://code.fastix.org/Projekte/PHP:check_blocked_ip/) steht alles, was Du brauchst ... Den Rahmen für den Check mehrerer IPs und andere Ausgaben kannst Du ja selbst machen. Oder ist das zu einfach?
Wertebreich Integer contra IPv4 in Long
bearbeitet von Tagwächter> Hallo Rolf b,
>
> > Wenn Du auf Schieberei verzichtest und lediglich die Bit-Operatoren verwendest (& \| und ~), ist alles gut. Wie Du mit 32-bit Integers aus der Präfixlänge eine Subnetzmaske machst, habe ich oben beschrieben (-pow(2, 32-$prefixlaenge)).
>
> Scheint mit pow() auch nicht zu funktionieren, da bei ip2long() und long2ip() scheinbar ein Fehler mit einem anderen ausgeglichen wird ... Aber mit
>
> ~~~~php
>
> $netmask = 0xFFFFFFFF << (32 -$cidr);
>
> ~~~~
>
> scheint es wirklich zu funktionieren. Ich teste gerade noch.
Und dann willst Du irre langsames und kompliziertes Zeug machen?
Da hast Du:
~~~php
<?php
$netmask = 0xFFFFFFFF;
var_dump($netmask); ### float(4294967295)
$netmask = ip2long('255.255.255.255');
var_dump($netmask); ### int(-1)
$netmask = sprintf('%u', ip2long('255.255.255.255'));
var_dump($netmask); ### string(10) "4294967295"
$netmask=1*$netmask;# implizite Typumwandlung durch Rechenoperation
var_dump($netmask); ### float(4294967295)
~~~
Hinter den Ausgaben stehen die Ausgaben, die auf einem 32-Bit-System kommen. Auf 64-Bit-Systemen kommt:
~~~
int(4294967295)
int(4294967295)
string(10) "4294967295"
int(4294967295)
~~~