2012-03-27 10 views
0

インターフェイスのmacアドレスとipv4アドレスを取得するサンプルコードを見ました。私はそれがそのインターフェイスが、プログラムのIPv6アドレスを取得しようとしているビットが言って失敗変更「:エラー:27:13互換性のない型をタイプから 『u_int32_t』と入力して割り当てるときに「構造体libnet_in6_addr」libnetを使ってインタフェースのipv6アドレスを取得する方法は?

#include <stdlib.h> 
#include <libnet.h> 
#include <stdint.h> 

int main() { 

    libnet_t *l; /* libnet context */ 
    char errbuf[LIBNET_ERRBUF_SIZE]; 
    u_int32_t ip_addr; 
    struct libnet_ether_addr *mac_addr; 

    l = libnet_init(LIBNET_RAW4, NULL, errbuf); 
    if (l == NULL) { 
    fprintf(stderr, "libnet_init() failed: %s\n", errbuf); 
    exit(EXIT_FAILURE); 
    } 

    ip_addr = libnet_get_ipaddr4(l); 
    if (ip_addr != -1) 
    printf("IP address: %s\n", libnet_addr2name4(ip_addr,\ 
          LIBNET_DONT_RESOLVE)); 
    else 
    fprintf(stderr, "Couldn't get own IP address: %s\n",\ 
        libnet_geterror(l)); 

    u_int32_t ipv6_addr; 
    ipv6_addr = libnet_get_ipaddr6(l); 
    if (ip_addr != -1) 
    printf("IPv6 address: %s\n", libnet_addr2name6(ip_addr,\ 
          LIBNET_DONT_RESOLVE)); 
    else 
    fprintf(stderr, "Couldn't get own IPv6 address: %s\n",\ 
        libnet_geterror(l)); 

    mac_addr = libnet_get_hwaddr(l); 
    if (mac_addr != NULL) 
    printf("MAC address: %02X:%02X:%02X:%02X:%02X:%02X\n",\ 
     mac_addr->ether_addr_octet[0],\ 
     mac_addr->ether_addr_octet[1],\ 
     mac_addr->ether_addr_octet[2],\ 
     mac_addr->ether_addr_octet[3],\ 
     mac_addr->ether_addr_octet[4],\ 
     mac_addr->ether_addr_octet[5]); 
    else 
    fprintf(stderr, "Couldn't get own MAC address: %s\n",\ 
        libnet_geterror(l)); 

    libnet_destroy(l); 
    return 0; 
} 

Iドン私はu_int32_tを使用するようにipv6アドレスを格納するために何を使用するのか知っていない、私はそれが動作していないu_int64_tを試してみました。私は、このような種類の基本的な問題をもう一度見つけて解決策を見つけるべきかどうかを知りたい。私はipv6アドレスに関する例を見つけることができません。

答えて

0

まず、私はlibnetを知らない。

つまり、コードから回答を引き出すことは可能です。

u_int32_t ipv6_addr; 
ipv6_addr = libnet_get_ipaddr6(l); 

error: incompatible types when assigning to type ‘u_int32_t’ from type ‘struct libnet_in6_addr’ 

で失敗した場合、それはipv6_addrタイプstruct libnet_in6_addrを持つべきであると言うことが可能です。

はまた、

if (ip_addr != -1) 
    printf("IPv6 address: %s\n", libnet_addr2name6(ip_addr,\ 
         LIBNET_DONT_RESOLVE)); 

は、そのドキュメントにお勧めします何のlibnetに(ip_addr != -1)を変更ip_addr6

  • ip_addrを交換

    • によって変更されるべきです。

    IPv6アドレスが見つかったかどうかを知るためです。

    ところで1つ以上のIPv6アドレスがある可能性があります。

  • 関連する問題