C语言如何判断是自动获取DNS服务器地址还是手动配置的?

时间:2021-04-05 15:19:38
C语言如何判断是自动获取DNS服务器地址还是手动配置的?如果是手动配置的如何获取首选和备用的DNS地址呢?谢谢

下面的代码好像不能判断出是自动的还是手动的,UINT EnableDns这个值是判断DNS是否开启,不知道是不是判断DNS是否是自动还是手动的

typedef struct {
    char HostName[MAX_HOSTNAME_LEN + 4];//本地计算机的主机名称
    char DomainName[MAX_DOMAIN_NAME_LEN + 4];//本地计算机已注册的域名
    PIP_ADDR_STRING CurrentDnsServer;//使用DnsServerList为本地计算机获取DNS服务
    IP_ADDR_STRING DnsServerList;//本地可用DNS服务器的IP_ADDR_STRING结构体链表
    UINT NodeType;//本地计算机节点类型
    char ScopeId[MAX_SCOPE_ID_LEN + 4];//DHCP范围内的名字
    UINT EnableRouting;//指定本地计算机路由功能是否开启
    UINT EnableProxy;//指定本地计算机是否作为ARP代理
    UINT EnableDns;//指定本地计算机DNS是否开启
} FIXED_INFO, *PFIXED_INFO;

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <iphlpapi.h>

//#include <Iptypes.h>
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib, "Iphlpapi.lib")


int _tmain(int argc, _TCHAR* argv[])
{
FIXED_INFO * FixedInfo;
ULONG ulOutBufLen;
DWORD dwRetVal;
IP_ADDR_STRING* pIPAddr;
FixedInfo = (FIXED_INFO *)
GlobalAlloc( GPTR, sizeof( FIXED_INFO ) );
ulOutBufLen = sizeof( FIXED_INFO );
if( ERROR_BUFFER_OVERFLOW ==GetNetworkParams( FixedInfo, &ulOutBufLen ) )
{
GlobalFree( FixedInfo );
FixedInfo = (FIXED_INFO *) GlobalAlloc( GPTR, ulOutBufLen );
}
if ( dwRetVal =GetNetworkParams( FixedInfo, &ulOutBufLen ) )
{
printf( "Call toGetNetworkParamsfailed. Return Value: %08x\n", dwRetVal );
exit(1);
}
else
{
printf( "Host Name: %s\n", FixedInfo -> HostName );
printf( "Domain Name: %s\n", FixedInfo -> DomainName );
printf( "DNS Servers:\n" );
printf( "\t%s\n", FixedInfo -> DnsServerList.IpAddress.String );
pIPAddr = FixedInfo -> DnsServerList.Next;
while ( pIPAddr )
{
printf( "\t%s\n", pIPAddr ->IpAddress.String );
pIPAddr = pIPAddr ->Next;
}
}
    
getchar();
return 0;
}

2 个解决方案

#1


system("netsh ... >netsh.txt");
//然后读文件netsh.txt的内容

#2


又看见大神了,肿么办

#1


system("netsh ... >netsh.txt");
//然后读文件netsh.txt的内容

#2


又看见大神了,肿么办