Main Page | Alphabetical List | Compound List | File List | Compound Members | File Members

ipaddr.c

Go to the documentation of this file.
00001 #include <windows.h>
00002 #include <winsock.h>
00003 #include        <stdio.h>
00004 
00005 #include <string.h>
00006 #include "ipaddr.h"
00007 
00008 #define MAXHOSTNAME     256
00009 
00010 static  void    IPAddr_AddrToString(unsigned long Addr, char *AddrBuff)
00011 {
00012         AddrBuff += sprintf(AddrBuff, "%d.", Addr & 0xff);
00013         Addr = Addr >> 8;
00014 
00015         AddrBuff += sprintf(AddrBuff, "%d.", Addr & 0xff);
00016         Addr = Addr >> 8;
00017 
00018         AddrBuff += sprintf(AddrBuff, "%d.", Addr & 0xff);
00019         Addr = Addr >> 8;
00020 
00021                                 sprintf(AddrBuff, "%d",  Addr & 0xff);
00022 }
00023 
00024 #define WS_VERSION_REQD         0x0101
00025 #define WS_VERSION_MAJOR    HIBYTE(WS_VERSION_REQD)
00026 #define WS_VERSION_MINOR    LOBYTE(WS_VERSION_REQD)
00027 
00028 int IPAddr_GetHostID (char *AddrBuff)
00029 {
00030         WSADATA                 wsaData;
00031     char                        HostName[MAXHOSTNAME];
00032     LPHOSTENT           HostEnt;
00033     SOCKADDR_IN         LocalAddress;
00034     SOCKADDR_IN         RemoteAddress;
00035     SOCKET                      Socket;
00036     int                         Res;
00037         int                             i;
00038 
00039         Res = WSAStartup(WS_VERSION_REQD,&wsaData);
00040         if      (Res != 0)
00041                 return 0;
00042 
00043         if      (( LOBYTE (wsaData.wVersion) < WS_VERSION_MAJOR) || 
00044                 ( LOBYTE (wsaData.wVersion) == WS_VERSION_MAJOR &&
00045                 HIBYTE (wsaData.wVersion) < WS_VERSION_MINOR))
00046         {
00047                 return 0;
00048         }
00049 
00050     LocalAddress.sin_addr.s_addr = INADDR_ANY;
00051     
00052     Res = gethostname(HostName, sizeof(HostName));
00053     if  (Res != SOCKET_ERROR)
00054     {
00055                 HostEnt = gethostbyname(HostName);
00056                 if      (HostEnt)
00057                 {
00058                         IPAddr_AddrToString(*(unsigned long *)HostEnt->h_addr_list[0], AddrBuff);
00059                         i = 0;
00060                         while   (HostEnt->h_addr_list[i])
00061                                 i++;
00062                         return i;
00063                 }
00064     } 
00065     
00066     Socket = socket(AF_INET, SOCK_DGRAM, 0);
00067         if      (Socket != INVALID_SOCKET)
00068         {
00069                 RemoteAddress.sin_family                = AF_INET;
00070                 RemoteAddress.sin_port                  = htons(IPPORT_ECHO);
00071                 RemoteAddress.sin_addr.s_addr   = inet_addr("199.1.90.2");
00072                 Res = connect(Socket, (SOCKADDR *)&RemoteAddress, sizeof(SOCKADDR));
00073                 if      (Res != SOCKET_ERROR)
00074                 {
00075                         int     AddrSize = sizeof(SOCKADDR);
00076 
00077                         getsockname(Socket, (LPSOCKADDR)&LocalAddress, (int *)&AddrSize);
00078 
00079                         IPAddr_AddrToString(LocalAddress.sin_addr.s_addr, AddrBuff);
00080 
00081                         return 1;
00082                 }
00083 
00084                 closesocket(Socket);
00085         }
00086 
00087         return 0;
00088 }
00089 
00090 #if 0
00091 void    main(void)
00092 {
00093         char    Buff[16];
00094         int             Count;
00095 
00096         Count = IPAddr_GetHostID(Buff);
00097         printf("%d addrs\n", Count);
00098         printf("%s\n", Buff);
00099 }
00100 #endif
00101 

Generated on Tue Sep 30 12:35:56 2003 for GTestAndEngine by doxygen 1.3.2