3 Stimmen

Kann ich v-strings für IPv4-Adressen verwenden?

Das Kamelbuch schlägt vor, dass V-Strings zur Darstellung von IPv4-Adressen verwendet werden können:

$ipaddr = 204.148.40.9;   # the IPv4 address of oreilly.com

Aber perldata zum Thema Versionsstrings heißt es:

Beachten Sie, dass die Verwendung der v-strings für IPv4 Adressen nicht portabel ist, es sei denn, Sie auch die inet_aton()/inet_ntoa() Routinen des Socket-Pakets verwenden.

Ich habe zwei Fragen:

1) Warum ist die Verwendung der v-Strings nicht portabel?
2) Was ist der "Standard"-Weg, um eine IP-Adresse von der Punktschreibweise in eine Ganzzahl zu konvertieren? Scheint, dass unpack "N", <v-string> kann manchmal Probleme verursachen.

5voto

hobbs Punkte 204816

Der "Standard"-Weg, um die kodierte Form zu erhalten, ist inet_aton das sowohl mit gepunkteten IP-Adressen als auch mit Hostnamen umgehen kann - aber wofür brauchen Sie es? Meistens ist es am besten, alle Low-Level-Schnittstellen, die sich mit solchen Dingen befassen, zu überspringen und z.B. IO::Socket zu verwenden.

Wenn Sie sich für eine Umstellung auf Ganzzahl wie Sie sagen, und nicht in der Form, die Socket-Funktionen erwarten (sie sind ähnliche Konzepte in C, aber weniger in Perl), dann können Sie weitergehen und verwenden pack Der Teil, der nicht portierbar ist, ist das Format, das die Socket-Funktionen akzeptieren. Zum Beispiel, unpack "N", pack "C4", split /\./, "1.2.3.4" erhält man eine schöne vorzeichenlose Big-Endian-Darstellung dieser Adresse (in Form der Zahl 16909060 == 0x01020304 ).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X