發新話題

[分享] C程序:獲取本機IP地址

C程序:獲取本機IP地址

C程序:獲取本機IP地址
複製內容到剪貼板
代碼:
// louis 2004-7-27


#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
int ret;
char buf[1024];
WORD wVersionRequested;
WSADATA wsaData;
int err;

struct hostent *host;

// socket initialize
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
  return -1;
}

memset(buf, 0, 1024);

// get hostname
ret = gethostname(buf, 1024);
if(ret != 0)
{
  printf("return is %d\n", ret);
  ret = WSAGetLastError();
  printf("specific error is %d\n", ret);
  printf("gethostname error.\n");
}else
  printf("hostname is %s\n", buf);

// get host ip address
host = gethostbyname(buf);
if(host == NULL)
{
  perror("gethostbyname");
  return -1;
}else
  //printf("ip address is %s\n", inet_ntoa(*(host->h_addr_list)));
  printf("ip address is %s\n", inet_ntoa(*(in_addr *)host->h_addr_list[0]));

return 0;
}
如何取本機IP地址列表
複製內容到剪貼板
代碼:
#include <iostream>
using std::cin;
using std::cout;
using std::cerr;
using std::endl;

#include <list>
using std::list;

#include <string>
using std::string;

#include <winsock2.h>
#pragma comment( lib, "ws2_32.lib" )

bool GetIpList( list<string> &r_iplist )
{
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
   
    wVersionRequested = MAKEWORD( 2, 2 );
   
    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 )
    {
        cout << "WSAStartup failed !" << endl;
        return false;
    }
   
    char szhn[256];
    int nStatus = gethostname(szhn, sizeof(szhn));
    if (nStatus == SOCKET_ERROR )
    {
        cout << "gethostname failed, Error code: " << WSAGetLastError() << endl;
        return false;
    }

    HOSTENT *host = gethostbyname(szhn);
    if (host != NULL)
    {
        for ( int i=0; ; i++ )
        {
            r_iplist.push_back( inet_ntoa( *(IN_ADDR*)host->h_addr_list[i] ) ) ;
            
            if ( host->h_addr_list[i] + host->h_length >= host->h_name )
                break;
        }
    }

    WSACleanup();
    return true;
}

int main(int argc, char *argv[])
{
    list<string> iplist;
    std::list<string>::iterator ip;
    if ( !GetIpList( iplist ) )
    {
        cout << "Get ip list failed !" << endl;
        return -1;
    }
   
    cout << "IP list :" << endl;
    for ( ip = iplist.begin(); ip != iplist.end(); ip++ )
    {
        cout << "  " << *ip << endl;
    }
     
    return 0;
}

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。