当前位置:编程学习 > C/C++ >>

[Win32]本地计算机网络信息的获取

print?// getNativeComputerNetInformation.cpp  
/* 
在网络编程中,服务器端需要知道本机的IP;唯一标识一台机器的MAC地址;
 
功能的实现都非常简单,有五种函数可以直接调用:
1.用于获取本地网络适配器信息的函数:
DWORD GetAdaptersInfo( PIP_ADAPTER_INFO pAdapterInfo,  PULONG pOutBufLen );
2.用于获取本地主机名、域名和DNS服务器信息的函数:
DWORD GetNetworkParamsInfo(PFIXED_INFO pFixedInfo, PULONG pOutBufLen );
3.用于获取本地计算机网络接口数量的函数
DWORD GetNumberOfInterfaces(PDWORD pdwNumIf);
4.用于获取本地主机名、域名和DNS服务器信息的函数
DWORD GetInterfaceInfo(PIP_INTERFACE_INFO pIfTable,         PULONG dwOutBufLen );
5.获取本地计算机IP地址表的函数
DWORD GetIpAddrTable(PMIB_IPADDRTABLE pIpAddrTable, PULONG pdwSize, BOOL bOrder );
*/ 
#include <stdio.h>  
#include <WinSock2.h>  
#include <iphlpapi.h>  
 
#pragma comment(lib, "IPHLPAPI.lib")  
#pragma comment(lib, "ws2_32.lib")  
 
void main() 

// 各类函数声明  
    int GetAdaptersInfoFunction();          // 获取本地网络适配器信息的函数  
    int GetNetworkParamsFunction();         // 获取本地主机名、域名和DNS服务器信息  
    int GetInterfacesFunction();            // 获取本地计算机网络接口的基本信息  
    int GetIpAddrTableFunction();           // 获取本地计算机的IP地址  
     
// 各类函数调用  
    char choice; 
    do{ 
        system("cls"); 
        printf("1.获取本地网络适配器信息的函数 GetAdaptersInfoFunction();\n"); 
        printf("2.获取本地主机名、域名和DNS服务器信息 GetNetworkParamsFunction();\n"); 
        printf("3.获取本地计算机网络接口的基本信息 GetInterfacesFunction();\n"); 
        printf("4.获取本地计算机的IP地址 GetIpAddrTableFunction();\n"); 
        printf("0.退出程序\n"); 
        printf("请输入需要调用的函数:"); 
        scanf("%c", &choice); 
        printf("\n\n"); 
        switch(choice){ 
            case '0': break; 
            case '1':   GetAdaptersInfoFunction(); break; 
            case '2': GetNetworkParamsFunction(); break; 
            case '3': GetInterfacesFunction(); break; 
            case '4': GetIpAddrTableFunction(); break; 
            default: break; 
        } 
    }while('0' != choice);    

     
 
/**
 * 用于获取本地网络适配器信息的函数:
 * DWORD GetAdaptersInfo(
 *   _in PIP_ADAPTER_INFO pAdapterInfo;    // 结构体保存获取到的网络适配器的信息
 *   _out PULONG pOutBufLen                // 保存pAdapterInfo缓冲区的大小
 * );
 *
 * 网络适配器的信息的结构体:网卡信息有:网卡名,网卡描述,MAC地址,网卡IP,网卡默认网关等
 * typedef struct _IP_ADAPTER_INFO {
 *   struct _IP_ADAPTER_INFO* Next;                 // 指定网络适配器链表中的下一个网络适配器;由于一台电脑可能有多个网卡,所以是链表结构
 *   DWORD ComboIndex;                              // 预留变量
 *   char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]; // 网络适配器的名称
 *   char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];  // 网络适配器的描述信息
 *   UINT AddressLength;                            // 网络适配器MAC的长度
 *   BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];      // 网络适配器的MAC地址
 *   DWORD Index;                                   // 网络适配器索引(重启计算机会改变的值)
 *   UINT Type;                                     // 网络适配器的类型
 *   UINT DhcpEnabled;                              // 指定该网络适配器上是否启用了DHCP
 *   PIP_ADDR_STRING CurrentIpAddress;              // 预留变量
 *   IP_ADDR_STRING IpAddressList;                  // 与此网络适配器上相关联的IP地址列表
 *   IP_ADDR_STRING GatewayList;                    // 该网络适配器上定义的IP地址的默认网关
 *   IP_ADDR_STRING DhcpServer;                     // 该网络适配器上定义的DHCP服务器的IP地址
 *   BOOL HaveWins;                                 // 标明该网络适配器是否启用了WINS
 *   IP_ADDR_STRING PrimaryWinsServer;              // 主WIN服务器的IP地址
 *   IP_ADDR_STRING SecondaryWinsServer;            // 从WINS服务器的IP地址
 *   time_t LeaseObtained;                          // 当前的DHCP租借获
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,