Я хотел знать, как я могу проанализировать адрес IPv6 в C и преобразовать его в 128 битовых значений?
Так шестнадцатеричный адрес как 1:22:333:aaaa:b:c:d:e
потребности, которые будут преобразованы в его эквивалентный двоичный файл на 128 битов. Проблемой является IP-адрес, мог иметь тип ::2
и его вариант, так как они - допустимый адрес IPv6.
Вход с клавиатуры и следовательно находится в формате ASCII.
Вы можете использовать POSIX inet_pton
для преобразования строки в структуру 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?
}
Для синтаксического анализа IPv6 на языке C вам необходимо создать служебную функцию, которая токенизирует строку (двоеточие для шестнадцатеричных блоков и косая черта для битов подсети).
getaddrinfo()
может понимать IPv6-адреса. Передайте ему AF_INET6 в подсказках, а также AI_NUMERICHOST (чтобы предотвратить поиск DNS). В Linux он есть, у Windows он есть как у Windows XP.