2016-09-27 21 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用に別々のものではなく、1つのサーバーソケットでアプリケーションを開発することを可能にします。そのためには、IPv4アドレスをIPv6形式で表現する方法があります。しかし、それはちょうどソフトウェアトリッキー、ネットワークパケットはその場合はIPv4です。 IPv6パケットと通信する場合、そのようなマッピングはありません。 (私は意図的に特殊なケースとのさらなる混乱を避けるためにNAT64のような他の仕掛を残しています) –

1

他の人が言っているように、ipv4/ipv6との直接マッピングはありません。ただし、6から4、teredoなど、ipv4/ipv6との間でさまざまなマッピング方法があります。

ほとんどの場合、変換されたIPv4アドレスは16バイトのIPv6アドレスの下位4バイトに配置され、残りのIPv6アドレスはマッピングを示す一連のバイトを持ちます。

+0

これらのメソッドはすべて廃止されたということを忘れないでください。 –

関連する問題