/* 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];
};
*/