2016-09-27 1 views
-4

uint8_t 로의 변환을 사용하여 IPv4를 IPv6로 변환하려고합니다. 나는 IPv4가 4 바이트를 가지고 있으며 IPv6 16 비트의 2 바이트를 가지고 있다는 것을 알고있다. 그러나 나는 변환을 할 수있는 방법을 찾을 수 없다.IPv4를 C에서 IPv6로 변환

#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

IPv6 공간 내에 IPv4 주소 용으로 예약 된 범위가 있습니다. – allo

+0

그래서 "일반적으로"를 지정했습니다. IPv6 소켓을 사용하여 IPv4 연결을 처리하는 응용 프로그램에 대한 이야기입니다. 이 "속임수"는 경우에 따라 IPv4 및 IPv6 용으로 별도의 서버 소켓 대신 하나의 서버 소켓으로 응용 프로그램을 개발할 수있게합니다. 이를 위해 IPv4 주소를 IPv6 형식으로 표현하는 방법이 있습니다. 그러나 그것은 단지 소프트웨어 속임수이며, 네트워크 패킷은 IPv4입니다. IPv6 패킷과 통신 할 때 그러한 매핑이 없습니다. (나는 의도적으로 특수한 경우로 더 혼란을 피하기 위해 NAT64 같은 다른 트릭을 남겨두고있다) –

1

다른 사람들이 말했듯이 ipv4/ipv6와의 직접 맵핑은 없습니다. 그러나 6에서 4, teredo와 같은 ipv4/ipv6과의 매핑 방법은 다양합니다.

대부분의 경우 변환 된 IPv4 주소는 16 바이트 IPv6 주소의 하위 4 바이트에 배치되고 나머지 IPv6 주소에는 매핑을 나타내는 일련의 바이트가 있습니다.

+0

그 모든 방법은 우리의 강력히 반대하는 권장되지 않습니다 언급하는 것을 잊지 마세요 ... –