john pfeiffer
  • Home
  • Categories
  • Tags
  • Archives

httpget hostent test

/* john pfeiffer 18jan08 httpget-hostent-test.c.exe domainname

use gcwinsock.bat (gcc.exe -o %1.exe %1 -lws2_32 -lwsock32 -Iinclude -Llib)
lws2_32.a and lwsock32.a are from my bloodshed (mingw c/cpp port) lib folder
*/

#include <stdio.h>
#include <stdlib.h>     /* for file functions */
#include <winsock.h>    /* you MUST load obj files C:\devcpp\Lib\libwsock32.a & lws2_32.a
                        gcc.exe -o %1.exe %1 -lws2_32 -lwsock32 -Iinclude -Llib        */

int main(int argc, char* argv[])
{
    struct sockaddr_in a;    /* structure of the internet address: sockaddr_in(ternet) */
    struct hostent* hptr;    /* hostname entity structure (for name, not ip address) */
    WSADATA ws;
    int i=0;

    int d = WSAStartup(0x0202,&ws);             /* addr family internet, stream, TCP = 0 */
    SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);  /* get handle to socket (should be > 0) */

    a.sin_family = AF_INET;                   /* internet protocol addressing */
    a.sin_port = htons(80);                   /* connect to port 80           */
    a.sin_addr.s_addr = inet_addr(argv[1]);   /* slashdot.org = 66.35.250.150  */

    if( a.sin_addr.s_addr == INADDR_NONE )    /* non existent ip address? */
    {   
        hptr = gethostbyname(argv[1]);        /* spelling of gethostbyname is case sensitive!! */
        if( hptr == NULL )
        {   printf("\nError resolving hostname."); 
            exit(1);
        }
        a.sin_addr.s_addr = inet_addr( inet_ntoa (*(struct in_addr *)*hptr->h_addr_list)  );  
        printf("\nofficial hostname: %s\n", hptr->h_name);
        i=0;
        while( hptr->h_aliases[i] != NULL )           /* Null terminated list of aliases */
        {   printf("alias: %s\n", hptr->h_aliases[i]);
            i++;
        }
        printf("address type: %d, ", hptr->h_addrtype);
        switch( hptr->h_addrtype )
        {   
            case AF_INET: 
                printf("AF_INET\n"); 
                break;
            /* case AF_INET6: printf(" (AF_INET6)"); break; */
            case AF_NETBIOS:
                printf("AF_NETBIOS\n");
                break;
            default:
                printf("UnknownType\n");
            break;
        }
        printf("address length: %d\n", hptr->h_length);

        i=0;
        while( hptr->h_addr_list[i] != NULL )    /* Null terminated list of addresses */
        {   
            a.sin_addr.s_addr = *(u_long *) hptr->h_addr_list[0];   /* address structure gets */
            printf("IP Address: %s\n", inet_ntoa( a.sin_addr )); /* convert to internet address */
            i++;
        }


    }   /* end if hostname not ip */
    WSACleanup();

    return 0;
} /*end main*/

/*
struct hostent {
               char   *h_name;         /* canonical name of host 
               char   **h_aliases;     /* alias list 
               int    h_addrtype;      /* host address type 
               int    h_length;        /* length of address 
               char   **h_addr_list;   /* list of addresses 
          };

typedef struct hostent 
{
  char FAR* h_name;
  char FAR  FAR** h_aliases;
  short h_addrtype;
  short h_length;
  char FAR  FAR** h_addr_list;
} HOSTENT, 
 *PHOSTENT, 
 FAR *LPHOSTENT;

struct sockaddr_in{
  short sin_family;     //must be AF_INET  
  unsigned short sin_port;
  IN_ADDR sin_addr;     
  char sin_zero[8];
};


*/

  • « httpgetv4
  • file remove baddata v2 »

Published

Jan 18, 2008

Category

c

~284 words

Tags

  • c 95
  • hostent 1
  • httpget 2
  • test 29