Rolf B: gemeinsame Route bestimmen

Beitrag lesen

Hallo Tom,

Die Erkenntnis, ob ein String eine IPv4 enthält oder nicht, gewinnt man bereits mit ip2long. Ob er eine private oder reservierte IPv4 darstellt, ist durch Abfragen eines Präfix auf String-Ebene nicht so einfach. Bei 10. und 192.168. gelingt es, beim 172.16.0.0/12 Präfix nicht. Das sind die Adressen von 172.16.0.0 bis 172.31.255.255. Es ist besser, das in der Darstellung als Integer mit den Masken
($ipLong & 0xff000000) == 0x0a000000,
($ipLong & 0xfff00000) == 0xac100000 und
($ipLong & 0xffff0000) == 0xc0a80000
zu prüfen.

Außer den privaten gibt's auch noch die reservierten Netze. Sind die relevant?

Man könnte auch überlegen, die Filter-Flags von FILTER_VALIDATE_IP vorschlagen? Die liefern FALSE, wenn die IP im privaten oder reservierten Range ist, und kapseln den ganzen Kram.

BTW ist (a & b) | (~a & ~b) ist ein cleverer Trick, um die Bits zu finden, wo a und b gleich sind.

Rolf

--
sumpsi - posui - obstruxi