Geben Sie an, ob eine Textzeichenfolge eine IPv6-Adresse oder eine IPv4-Adresse unter Verwendung der Standard-C-Socket-API ist

7

Ich habe ein Programm, bei dem eine externe Komponente mir eine Zeichenfolge übergibt, die eine IP-Adresse enthält. Ich muss es dann in einen URI umwandeln. Für IPv4 ist das einfach. Ich stelle http: // und append / voran. Für IPv6 muss ich es jedoch in Klammern [] einschließen.

Gibt es einen Standard-Socket-API-Aufruf, um die Adressfamilie der Adresse zu bestimmen?

    
Nathan 17.09.2010, 14:42
quelle

3 Antworten

13

Verwenden Sie getaddrinfo () und setzen Sie den Hinweisflag AI_NUMERICHOST, family auf AF_UNSPEC, wenn erfolgreich Rückgabe von getaddrinfo, die resultierende Struktur addrinfo .ai_family Mitglied wird entweder AF_INET oder AF_INET6.

EDIT, kleines Beispiel

%Vor%     
nos 17.09.2010, 14:46
quelle
16

Art von. Sie könnten inet_pton() verwenden, um den String zuerst als IPv4 ( AF_INET ) und dann als IPv6 ( AF_INET6 ) zu analysieren. Der Rückgabecode wird Sie wissen lassen, ob die Funktion erfolgreich war, und die Zeichenfolge enthält somit eine Adresse des versuchten Typs.

Zum Beispiel:

%Vor%     
llasram 17.09.2010 14:47
quelle
1

Hier ist eine einfache Funktion:

Ссылка

Er verarbeitet auch Hostnamen-Strings und gibt den Adresstyp des ersten zurückgegebenen DNS-Eintrags zurück. Setze AI_NUMERICHOST, um den Hostnamen zu deaktivieren.

    
tjd 27.02.2011 20:34
quelle

Tags und Links