2016-09-27 4 views
-4

Я пытаюсь преобразовать IPv4 в IPv6, используя некоторое преобразование в uint8_t. Я знаю, что IPv4 имеет 4 байта, а IPv6 16 без знака int 2 байта, но я не могу найти способ сделать это преобразование.Преобразование IPv4 в IPv6 на C

#include <stdlib.h> 
#include <stdio.h> 
#include <stdint.h> 
#include <string.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
int main() { 
    uint8_t ipv6[16],direccionIP[] = {193, 110, 128, 200}; 
    ipv6 = &direccionIP; //this doesn't work, and I don't come up with any method 
    printf("%u", ipv6); 
    return 0; 
} 
+0

Вы не можете установить пинту в квартете –

+3

Что конкретно вы имеете в виду, конвертировав IPv4 в IPv6? Адресация несовместима, и ваше представление о том, какой адрес IPv6, кажется, является ошибочным. Адрес IPv4 представляет собой 32-разрядное целое число, а IPv6-адрес - 128-битное целое число. –

ответ

0

IPv4 и IPv6 - это разные протоколы с разными адресами. В общем случае вы не можете конвертировать между адресами IPv4 и IPv6.

+0

Существует диапазон, зарезервированный для IPv4-адресов внутри пространства IPv6. – allo

+0

Вот почему я указал «вообще». О чем вы говорите, это приложения, использующие сокет IPv6 для подключения к IPv4. Этот «трюк» позволяет в некоторых случаях разрабатывать приложение только с одним серверным сокетом вместо отдельных для IPv4 и IPv6. Для этого существует способ представления IPv4-адреса в формате IPv6. Но это всего лишь программная обманка, в этом случае сетевые пакеты IPv4. При общении с пакетами IPv6 такого сопоставления нет. (Я намеренно оставляю другие трюки, такие как NAT64, чтобы избежать дальнейшей путаницы со специальными случаями) –

1

Как уже говорилось, прямого доступа к/ipv4/ipv6 нет. Однако существует множество способов отображения в/из ipv4/ipv6, например от 6 до 4, teredo и других.

Для большинства преобразованный адрес IPv4 помещается в нижние 4 байта 16-байтового IPv6-адреса, а остальная часть адреса IPv6 имеет серию байтов, указывающих отображение.

+0

Не забудьте упомянуть, что все эти методы были устаревшими, мы настоятельно рекомендуем против ... –