C で IPv6 アドレスを解析して 128 ビット値に変換する方法を知りたいですか?
したがって、 のような 16 進アドレスは1:22:333:aaaa:b:c:d:e
、128 ビットの同等のバイナリに変換する必要があります。問題は、IP アドレス::2
が有効な IPv6 アドレスであるため、タイプとそのバリアントである可能性があることです。
入力はキーボードからであるため、ASCII 形式です。
POSIXinet_pton
を使用して、文字列をstruct in6_addr
.
#include <arpa/inet.h>
...
const char *ip6str = "::2";
struct in6_addr result;
if (inet_pton(AF_INET6, ip6str, &result) == 1) // success!
{
//successfully parsed string into "result"
}
else
{
//failed, perhaps not a valid representation of IPv6?
}
getaddrinfo()
IPv6 アドレスを理解できます。ヒントで AF_INET6 と AI_NUMERICHOST (DNS ルックアップを防ぐため) を渡します。Linuxにはそれがあり、WindowsにはWindows XPの時点でそれがあります。
C で IPv6 を解析するには、文字列 (16 進ブロックのコロン、サブネット ビットのスラッシュ) をトークン化するユーティリティ関数を自分で作成する必要があります。
Rosetta にはいくつかの言語のサンプルがあります: https://rosettacode.org/wiki/Parse_an_IP_Address
Windows では、WSAStringToAddress
Windows 2000 以降で使用できる を使用できます。