1.gethostname()需要初始化套接字库 加载#pragma comment(lib,"ws2_32.lib"),和WSAStartup(MAKEWORD(2,2),&wsaData)函数

2.IP_ADAPTER_INFO结构包含了网络适配器的信息

typedef struct _IP_ADAPTER_INFO {
struct _IP_ADAPTER_INFO* Next; //指向下一个适配器
DWORD ComboIndex; //保留字段
char AdapterName[MAX_ADAPTER_NAME_LENGTH + ]; //适配器名称
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + ]; //对适配器的描述
UINT AddressLength; //MAC地址的长度(6字节)
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_ADDR_STRING DhcpServer; //DHCP服务器
BOOL HaveWins; //指定此适配器是否使用WINS(Windows Internet名称服务)
IP_ADDR_STRING PrimaryWinsServer; //WINS服务器的主IP
IP_ADDR_STRING SecondaryWinsServer; //第二IP
time_t LeaseObtained; //当前DHCP租用时间
time_t LeaseExpires; //当前DHCP租用期满的时间
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;

3.获取本地机器的适配器信息

GetAdaptersInfo(
__out_bcount_opt(*SizePointer) PIP_ADAPTER_INFO AdapterInfo, //指向一个缓冲区用来存放IP_ADAPTER_INFO列表
__inout PULONG SizePointer //指定上方缓冲区的大小,不够则返回需要的大小
); //此函数调用成功返回ERROR_SUCCESS

实现代码

#include "stdafx.h"
#include <WinSock2.h>
#include <windows.h>
#include "Iphlpapi.h"
#include <stdio.h>
#include <iostream> #pragma comment(lib, "Iphlpapi.lib")
#pragma comment(lib, "WS2_32.lib") #pragma comment(lib,"ws2_32.lib")
using namespace std; BOOL InitSock();
BOOL GetAllIp();
BOOL GetGlobalData(); // 全局数据
u_char g_ucLocalMac[]; // 本地MAC地址
DWORD g_dwGatewayIP; // 网关IP地址
DWORD g_dwLocalIP; // 本地IP地址
DWORD g_dwMask; // 子网掩码 void main()
{
InitSock();
GetAllIp();
GetGlobalData();
} BOOL InitSock()
{
WSAData wsaData = {};
if(WSAStartup(MAKEWORD(,),&wsaData)==)
{
return TRUE;
} return FALSE;
} BOOL GetAllIp()
{
char szHost[] = {};
gethostname(szHost,);//获取本地主机名 HOSTENT *pHost = gethostbyname(szHost);//通过主机名过得地址信息
if (szHost==NULL) //打印出所有IP地址
{
cout<<"error"<<endl;
}
in_addr addr;
for(int i = ; ;i++)
{
char *p = pHost->h_addr_list[i];
if(p == NULL)
break; memcpy(&addr.S_un.S_addr,p,pHost->h_length);
char *szIP = inet_ntoa(addr);
cout<<"The LocalAddress:"<<szIP<<endl;
} /*char ip[256] = {0};
strcpy(ip,inet_ntoa(*(in_addr*)*pHost->h_addr_list)); cout<<"The LocalAddress:"<<ip<<endl;*/
system("PAUSE");
return TRUE; } BOOL GetGlobalData()
{
PIP_ADAPTER_INFO pAdapterInfo = NULL;
ULONG ulLen = ; // 为适配器结构申请内存
GetAdaptersInfo(pAdapterInfo,&ulLen);
pAdapterInfo = (PIP_ADAPTER_INFO)::GlobalAlloc(GPTR, ulLen); // 取得本地适配器结构信息 if(::GetAdaptersInfo(pAdapterInfo,&ulLen) == ERROR_SUCCESS)
{
if(pAdapterInfo != NULL)
{
for(pAdapterInfo = pAdapterInfo;pAdapterInfo != NULL;pAdapterInfo = pAdapterInfo->Next)
{
memcpy(g_ucLocalMac, pAdapterInfo->Address, );
g_dwGatewayIP = ::inet_addr(pAdapterInfo->GatewayList.IpAddress.String);
g_dwLocalIP = ::inet_addr(pAdapterInfo->IpAddressList.IpAddress.String);
g_dwMask = ::inet_addr(pAdapterInfo->IpAddressList.IpMask.String); printf(" \n -------------------- 本地主机信息 -----------------------\n\n");
in_addr in;
in.S_un.S_addr = g_dwLocalIP;
printf(" IP Address : %s \n", ::inet_ntoa(in)); in.S_un.S_addr = g_dwMask;
printf(" Subnet Mask : %s \n", ::inet_ntoa(in)); in.S_un.S_addr = g_dwGatewayIP;
printf(" Default Gateway : %s \n", ::inet_ntoa(in)); u_char *p = g_ucLocalMac;
printf(" MAC Address : %02X-%02X-%02X-%02X-%02X-%02X \n", p[], p[], p[], p[], p[], p[]); printf(" \n \n ");
pAdapterInfo = pAdapterInfo->Next ;
}
} } getchar(); return TRUE;
}

GetIPAddress——获得本地IP地址信息的更多相关文章

  1. 获取本地IP地址信息

    2012-06-05    /// <summary>         /// 获取本地IP地址信息         /// </summary>         void G ...

  2. JS读取本地IP地址信息

    HTML <div> <p>点击下面的按钮,查看本地IP信息</p> <span class="span">点击查看</spa ...

  3. Android 获得本地IP地址、外网IP地址、本设备网络状态信息、本地Mac地址

    本地内网IP和外网IP的区别: 根据我的经验一台电脑需要两个ip才可以上网,一个是本地的内网ip 一个是外网的ip 本地的ip 一般是192.168.1.2这种样子  只要在不同的路由器上可以重复 外 ...

  4. PHP利用纯真IP数据库在本地实现IP地址信息查询

    https://blog.csdn.net/myweishanli/article/details/45098693 准备工作: 建议本地IP地址数据库,请到http://www.cz88.net/这 ...

  5. c++ 获取本地ip地址

    最终版本:采用指针传参数,不使用别名形式. #include <unistd.h> #include <netdb.h> //gethostbyname #include &l ...

  6. c、c++混编实现查询本地IP地址

    一.思路 1.要想得到本地IP地址,可以通过本机名来查询,所以首先得得到本机名. 2.牵涉到IP地址,首先想到牵涉到网络协议,因此得加载套接字协议,所以先使用WSAStartup函数完成对Winsoc ...

  7. 读取本地IP地址和子网页码

    #region 读取本地IP地址和子网页码 //读取本地IP地址和子网页码 NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterf ...

  8. Linux C 网络编程 - 获取本地 ip 地址,mac,通过域名获取对应的 ip

    获取本地 ip 地址,mac,通过域名获取对应的 ip, 是网络编程可能遇到的比较常见的操作了,所以总结如下(封装了3个函数), 直接上代码: #include <stdio.h> #in ...

  9. Go语言获取本地IP地址

    最近要做一个向局域网内的所有设备广播发送信息,并接受设备的回复信息,回复信息包括设备的版本号,IP地址,运行工程名等信息.发现一个局域网内是可以有不同的网段的,但UDP广播只能是同一个网段的广播.又发 ...

随机推荐

  1. System.Threading.Thread的使用及传递参数等总结

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  2. 缓存处理类(MemoryCache结合文件缓存)

    想提升站点的性能,于是增加了缓存,但是站点不会太大,于是不会到分布式memcached的缓存和redis这个nosql库,于是自己封装了.NET内置的缓存组件 原先使用System.Web.Cachi ...

  3. CODING 告诉你硅谷项目经理的项目管理之道(2)

    优秀的项目管理者是怎么工作的?如何帮助研发团队高效工作?这一直是 CODING 关注的重要话题,我们不断地打磨 CODING 研发管理系统来让开发更简单. 近期我们精心挑选了几篇硅谷科技公司研发管理者 ...

  4. DOMContentLoaded时间触发与js,css,img的关联

    DOMContentLoaded触发原理: 1.规范总是那么的晦涩,但至少有一点是可以明确了的,就是在JS(不包括动态插入的JS)执行完之后,才会触发DOMContentLoaded事件. 2.DOM ...

  5. 【WIP】客户端JavaScript 事件处理

    创建: 2017/10/15 完成: 2017/10/15   更新: 2017/11/04 加粗事件的参数 更新: 2017/12/12 增加事件处理时获取事件对象的方法 更新: 2019/05/2 ...

  6. 利用docker部署redis集群

    目录 一.首先配置redis.conf文件,... 1 1.获取配置文件... 1 2.修改各配置文件的参数... 2 二.下载redis镜像.启动容器... 2 1.创建网络... 2 2.拉取镜像 ...

  7. IPv6邻居发现协议

    IPv6邻居发现协议 邻居发现协议NDP 邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议.邻居发现协议替代了IPv4的ARP(Add ...

  8. 1093 Count PAT's(25 分)

    The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and ...

  9. python排序(冒泡、直接选择、直接插入等)

    冒泡排序 冒泡法:第一趟:相邻的两数相比,大的往下沉.最后一个元素是最大的. 第二趟:相邻的两数相比,大的往下沉.最后一个元素不用比. #冒泡排序 array = [1,5,6,2,9,4,3] de ...

  10. js获取文件MD5值

    原文链接:http://www.jianshu.com/p/940a9226fbbd   要在web页面中计算文件的md5值,还好这个项目是只需兼容现代浏览器的,不然要坑死了. 其实对文件进行md5, ...