1

ここに私が書いたコードを含めます。コードはコンパイルおよび実行されますが、IP アドレスが出力されず、代わりに以下の出力が得られます。以下のコードを含めました。助けてください。

  //This is the executed code printed out  
    -Inspiron-1318:~$ ./com2 google.com
    Networks use Big Endian order

    This machine uses Little Endian


    google.com to 
    // here I need to print the ip addresses but I am unable to//

これは私が書いたコードです。私の間違いを見つけるのを手伝ってください:

#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <arpa/inet.h>

void checkEndian()
{
    uint32_t a=0x10de7623;
    uint32_t b = ntohl(a);
    if(b == a)
    {
        printf("This machine uses Big Endian\n");
    } 
    else if(b ==0x2376de10 )
    {
        printf("\nThis machine uses Little Endian\n");
    }
    else
    {
        printf("This machine uses Other Endian\n");
    }
}

int main(int argc,char* argv[])
{
    printf("Networks use Big Endian order\n");
    checkEndian();

    if(argc<2)
    {
        printf("expected a name for resolving");
        exit(1);
    }

    char *name=argv[1];
    char ip[100];

    name_ip(name , ip);
    printf("%s to %s\n",name,ip); 
}

int name_ip(char *name,char *ip)
{
    struct addrinfo hints , *answer , *h;
    char buf[1024];

    memset(&hints,0,sizeof hints);

    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM; 

    int error = getaddrinfo(name, NULL, &hints, &answer);

    if(error!=0)
    {
    fprintf(stderr,"\n error in getaddrinfo: %s\n",gai_strerror(error));
    exit(EXIT_FAILURE);
    }

    for(h = answer; h != NULL; h = h->ai_next)
    {
    if(h->ai_family=AF_INET)
    {
    struct sockaddr_in *x;

    x=(struct sockaddr_in *)h->ai_addr;

    //// this inet_ntop is the root of whole problem//
    inet_ntop(h->ai_family,&(((struct sockaddr_in *)h->ai_addr)->sin_addr),buf,1024);

    }

    if(hints.ai_family=AF_INET6)
    {
    struct sockaddr_in6 *x;

    x=(struct sockaddr_in6*)h->ai_addr;
    // this inet_ntop is the root of whole problem//

    inet_ntop(h->ai_family,&(((struct sockaddr_in6 *)h->ai_addr)->sin6_addr),buf,1024);
    }
    printf("%s\n",ip);
    }

    freeaddrinfo(answer);

    return 0;
}
4

1 に答える 1