使用IP Helper获取本机的网络参数

//使用IP Helper函数获取网络参数
//头文件
#include <stdio.h>
#include <windows.h>
#include <iphlpai.h>


//定义变量
ULONG ulOutBufLen;
DWORD dwRetVal;


HANDLE hHeap = GetProcessHeap();


//宏定义
#define MyAlloc(size) HeapAlloc(hHeap,0,size)
#define MyFree(ptr) HeapFree(hHeap,0,ptr)


//主函数
void main(int argc,char *argv[])
{
//获取网络参数
printf("----------------------------------\n");
printf("GetNetworkParams\n\n");
//定义变量
FIXED_INFO *pFixedInfo;
IP_ADDR_STRING *pIPAddr;


//分配内存
pFixedInfo = (FIXED_INFO*)MyAlloc(sizeof(FIXED_INFO));
ulOutBufLen = sizeof(FIXED_INFO);


if(GetNetworkParams(pFixedInfo,&ulOutBufLen) == ERROR_BUFFER_OVERFLOW)
{
//空间不足,重新分配
MyFree(pFixedInfo);
pFixedInfo = (FIXED_INFO *)MyAlloc(ulOutBufLen);
}


//获取信息
if(dwRetVal = GetNetworkParams(pFixedInfo,&ulOutBufLen) != NO_ERROR)
{
printf("Call to GetNetworkParams failed.\n");
}
else
{
//打印输出
printf("\tHost Name: %s\n",pFixedInfo->HostName); //主机名
printf("\tDomain Name: %sn",pFixedInfo->DomainName); //DNS主机名
printf("\tDNS Servers:\n"); //DNS服务器
printf("\t\t%s\n",pFixedInfo->DnsServerList.IpAddress.String); //IP,字符串形式


pIPAddr = pFixedInfo->DnsServerList.Next;  //备用DNS
while(pIPAddr)
{
printf("\t\t%s\n",pIPAddr->IpAddress.String);
pIPAddr = pIPAddr->Next;
}


if(pFixedInfo->EnableRouting)
{
printf("\tEnable Routing: Yes\n");    //是否路由
}
else
{
printf("\tEnable Routing: No\n");
}
        if(pFixedInfo->EnableProxy)
{
            printf("\tEnable Proxy: Yes\n");      //是否有代理
}
else
{
printf("\tEnable Proxy: No\n");
}
if(pFixedInfo->EnableDns)
{
printf("\tEnable DNS: Yes\n");         //是否有DNS
}
else
{
printf("\tEnable DNS: No\n");
}




}


//释放内存
MyFree(pFixedInfo);
printf("--------------------------------------\n");


printf("GetInterfaceInfo\n\n");
//定义变量,分配空间
PIP_INTERFACE_INFO pInfo;
ulOutBufLen = sizeof(IP_INTERFACE_INFO);
pInfo = (PIP_INTERFACE_INFO)MyAlloc(ulOutBufLen);


while(1)
{
dwRetVal = GetInterfaceInfo(pInfo,&ulOutBufLen);
//内存不足,重新分配
if(dwRetVal == ERROR_INSUFFICIENT_BUFFER)
{
MyFree(pInfo);
pInfo = (IP_INTERFACE_INFO *)MyAlloc(ulOutBufLen);
}
else if(dwRetVal == NO_ERROR)
{
//显示输出每个网卡的信息
int i;
printf("Num Adapters: %ld\n",pInfo->NumAdapters);
for(i = 0;i < pInfo->NumAdapters;i++)
{
printf("(%d)Adapter Name: %ws\n",i,pInfo->Adapter[i].Name);
printf("(%d)Adapter Index: %ld\n",i,pInfo->Adapter[i].Index);
}
break;
}
else
{
printf("GetInterfaceInfo: %u\n",GetLastError());
}
}


MyFree(pInfo);  //释放内存
printf("----------------------------------------------\n");
printf("GetIpAddrTable\n\n");


//变量定义,内存分配
MIB_IPADDRTABLE *pIPAddrTable;
DWORD dwSize;
in_addr IPAddr;
char *strIpAddr;


pIPAddrTable = (MIB_IPADDRTABLE*)MyAlloc(sizeof(MIB_IPADDRTABLE));
dwSize = 0;
IPAddr.S_un.S_addr = ntohl(pIPAddrTable->table[1].dwAddr);
strIPaddr = inet_ntoa(IPAddr);

if(GetIpAddrTable(pIPAddrTable,&dwSize,0) == ERROR_INSUFFICIENT_BUFFER)
{
//空间不足,重新分配
MyFree(pIPAddrTable);
pIPAddrTable = (MIB_IPADDRTABLE *)MyAlloc(dwSize);


}


//获得信息并显示
if((dwRetVal = GetIpAddrTable(pIPAddrTable,&dwSize,0))!= NO_ERROR)
{
printf("Call to GetIpAddrTable failed.\n");
}


//IP 、掩码等是以DWORD的形式保存的
printf("Address: %u.%u.%u.%u\n",pIPAddrTable->table[0].dwAddr & 0x000000FF,
(pIPAddrTable->table[0].dwAddr & 0x0000FF00)>>8,
(pIPAddrtable->table[0].dwAddr & 0x00FF0000)>>16,
(pIPAddrtable->table[0].dwAddr & 0xFF000000)>>24);
printf("Mask: %lu\n",pIPAddrtable->table[0].dwMask);
printf("Index: %lu\n",pIPAddrTable->table[0].dwIndex);
printf("BCast: %lu\n",pIPAddrTable->table[0].dwBCastAddr);
printf("Reasm: %lu\n",pIPAddrTable->table[0].dwReasmSize);


    //释放内存
MyFree(pIPAddrTable);


printf("---------------------------------\n");
printf("GetIPStatistics\n\n");
//定义变量,分配内存
MIB_IPSTATS *pStats;
pStats = (MIB_IPSTATS*)MyAlloc(sizeof(MIB_IPSTATS));


//获取信息
if((dwRetVal = GetIpStatistics(pStats)) != NO_ERRO)
{
printf("\tError getting stats.\n");
}


//显示
printf("\tNumber of IP addresses: %ld\n",pStats->dwNumAddr);
printf("\tNumber of Interfaces: %ld\n",pStats->dwNumIf);
printf("\tReceives: %ld\n",pStats->dwInReceives);
printf("\tOut Requests: %ld\n",pStats->dwOutRequests);
printf("\tRoutes: %ld\n",pStats->dwNumRoutes);
printf("\tTimeout Time: %ld\n",pStats->dwReasmTimeout);
printf("\tIn Delivers: %ld\n",pStats->dwInDelivers);
printf("\tIn Discards: %ld\n",pStats->dwInDiscards);
printf("\tTotal In: %ld\n",pStats->dwInDelivers + pStats->dwInDiscards);
    printf("\tIn Header Errors: %ld\n",pSats->dwInHdrErrors);
MyFree(pStats); //释放


printf("------------------------------------------\n");
printf("GetTCPStatistics\n\n");
//定义变量,申请内存
MIB_TCPSTATS *pTCPStats;
pTCPStats = (MIB_TCPSTATS *)MyAlloc(sizeof(MIB_TCPSTATS));


//获取信息,并显示
if((dwRetVal = GetTcpStatistics(pTCPStats)) != NO_ERROR)
{
printf("Error getting TCP Stats.\n");
}


printf("\tActive Opens: %ld\n",pTCPStats->dwActiveOpens);
printf("\tPassive Opens: %ld\n",pTCPStats->dwPassiveOpens);
printf("\tSegments Recv: %ld\n",pTCPStats->dwInSegs);
printf("\tSegments Xmit: %ld\n",pTCPStats->dwOutSegs);
printf("\tTotal # Conxs: %ld\n",pTCPStats->dwNumConns);
MyFree(pTCPStats); //内存释放


printf("---------------------------------\n");
printf("GetAdapatersInfo\n\n");
//定义变量,分配内存
IP_ADAPTER_INFO *pAdapterInfo;
IP_ADAPTER_INFO *pAdapter;
pAdapterInfo = (IP_ADAPTER_INFO *)MyAlloc(sizeof(IP_ADAPTER_INFO));
ulOutBufLen = sizeof(IP_ADAPTER_INFO);


//测试,所需内存大小
if(GetAdaptersInfo(pAdapterInfo,&ulOutBufLen) != ERROR_SUCCESS)
{
MyFree(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *)MyAlloc(ulOutBufLen);
}


//获取信息
if((dwRetVal = GetAdaptersInfo(pAdapterInfo,&ulOutBufLen)) != NO_ERROR)
{
printf("Call to GetAdaptersInfo failed.\n");
}


pAdapter = pAdapterInfo;


//显示各个网卡的信息
while(pAdapter)
{
printf("\n\t******************\n");
printf("\tAdapter Name: \t%s\n",pAdapter->AdapterName); //网卡设备名
printf("\tAdapter Desc: \t%s\n",pAdapter->Description); //描述
printf("\tAdapter Addr: \t%s\n",pAdapter->Address);  //MAC
printf("\tIP Addresss: \t%s\n",pAdapter->IpAddressList.IpAddress.String); //IP
printf("\tIP Mask: \t%s\n",pAdapter->IpAddressList.IpMask.String); //掩码
printf("\tGateway: \t%s\n",pAdapter->GatewayList.IpAddress.String); //网关
printf("\t***\n");


if(pAdapter->DhcpEnabled)//DHCP
{
printf("\tDHCP Enabled: Yes\n");
printf("\t\tDHBCP Server: \t%s\n",pAdapter->DhcpServer.IpAddress.String);
printf("\tLease Otained: %ld\n",pAdapter->LeaseOtained);
}
else
{
printf("\tDHCP Enaled: No\n");
}
if(pAdapter->HaveWins)//Wins
{
printf("\tHave Wins:Yes\n");
printf("\t\tPrimary Wins Server: \t%s\n",pAdapter->SecondaryWinsServer.String);
printf("\t\tSecondary Wins Server: \t%s\n",pAdapter->SecondaryWinsServer.IpAddress.String);
}
else
{
printf("\tHave Wins: No\n");
}
pAdapter = pAdapter->Next;
}
    MyFree(pAdapterInfo);






}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
件简介: IPHelper是一款帮助您快速设置IP地址、网关、DNS及IE代理服务器等相关设置的绿色免费软件, 特别适合移动办公用户和需要经常在不同网段间切换的用户使用。作者最早开发此软件时是为了满足 自身的更改IP的需要,随后在网络上众多用户给予了肯定、支持和帮助,4年多来IPHelper经过的不断 改进,操作更加便利,功能不断完善,希望它能给更多的用户带来便利! 更新日志: IPHelper5.2 - 增加了修改计算机名称及执行自定义命令等功能。修正了部分bug,增进界面友好性。(2008/12) IPHelper4.6 - 增加了“生成快捷方式”功能,大大提高了部分常用配置的切换速度。软件可以 最小化到任务栏,并快速切换配置。修正了部分bug,增进界面友好性。(2007/01) IPHelper4.2 - 改用xml配置文件存放历史配置;增加多IP多DNS设置;增加IE代理服务器设置; 增强了操作性。(2006/07) IPHelper3.5 - 增加网络连通情况测试。调整了界面结构,增加界面友好性。(2005/03) IPHelper3.3 - 增加了自动备份功能;增加了小图标显示功能(右键菜单内选择);修正了多 DNS会自动退出的Bug。(2004/11) IPHelper3.1 - 加强了界面友好度,可以更改配置名称。添加了DNS修改功能。(2004/03) IPHelper2.6 - 加强了对多网卡的支持,对性能进行了优化,添加了新版本提示功能。(2003/08) IPHelper2.1 - 第一个发布版本,小巧实用的特性得到了网友们的肯定。(2002/11) 联系方式: Web: http://www.4w5w.com/soft/ E-Mail: www@4w5w.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值