用C语言获取IP地址列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C语言获取IP地址列表相关的知识,希望对你有一定的参考价值。

  最近给客户的SEP系统定义了一个简单的策略,策略是检测主机是否存在双网卡。SEP系统只能完成简单的运行可执行程序、检测文件是否存在、注册表是否存在等功能,因此需要写一个简单的判断双网卡的程序。因此写了一个简单的程序,代码如下:


#include <WinSock2.h>
#include <windows.h>
#include <stdio.h>

#pragma comment (lib, "ws2_32")


int _tmain(int argc, _TCHAR* argv[])
{
    WSADATA wsa = { 0 };
    struct in_addr addr;
    int i = 0;
    char bHostName[MAXBYTE] = { 0 };

    WSAStartup(MAKEWORD(2, 2), &wsa);
    gethostname(bHostName, MAXBYTE);
    hostent *ht = gethostbyname(bHostName);
    
    while ( ht->h_addr_list[i] != 0 )
    {
        addr.s_addr = *(u_long *) ht->h_addr_list[i++];
        // printf("IP Address #%d: %s\n", i, inet_ntoa(addr));
    }
    
    if ( i > 1 )
    {
        // printf("存在多个IP地址\r\n");
    } 
    else if ( i == 1 )
    {
        char cIp[MAXBYTE] = { 0 };
        strncpy_s(cIp, MAXBYTE, inet_ntoa(addr), strlen(inet_ntoa(addr)));
        if ( cIp[0] == ‘1‘ && cIp[1] == ‘0‘ && cIp[2] == ‘.‘ )
        {
            // printf("一个IP地址,且IP地址为10.开头");
            FILE *fp = NULL;
            fp = fopen("d:\\kernelsx86.dll", "w");
            fclose(fp);
        }
        else
        {
            // printf("一个IP地址,但IP地址不为10.开头");
        }        
    }
    else
    {
        // printf("没有得到IP地址");
    }

    WSACleanup();

    return 0;
}


  代码写的不够好,不过反正不长。如果主机只有一个IP地址,且该IP地址是以10.开头的,那么在D盘下生成一个文件。


  将该代码生成一个可执行文件,放到客户的Web服务器上,当安装在主机上的SEP客户端进行双网卡检测时,会从Web服务器上下载并运行该程序,该程序运行结束后,SEP客户端判断D盘下是否有生成的指定的文件,如果有该文件则SEP的检测双网卡的策略通过,否则不通过。

本文出自 “无觉的BLoG” 博客,请务必保留此出处http://wujue.blog.51cto.com/11999347/1856333

以上是关于用C语言获取IP地址列表的主要内容,如果未能解决你的问题,请参考以下文章

怎么用C语言获取Linux系统的网卡IP地址

怎样用go语言获取本地IP地址

请问 c语言怎样获取计算机ip地址啊

Linux C语言 获取本机(所有网卡)IP地址(IPV4)

用c语言如何获取内存地址?

用javaScript怎么样获取用户本地的ip地址?