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. C# 5.0中新增特性

    C# 5.0随着VisualStudio 2012一起正式发布了,让我们来看看C#5.0中增加了哪些功能. 1. 异步编程 在.Net 4.5中,通过async和await两个关键字,引入了一种新的基 ...

  2. 洛谷P2798 爆弹虐场

    P2798 爆弹虐场 题目描述 某年某月某日,Kiana 结识了一名爆弹虐场的少年. Kiana 仗着自己多学了几年OI,所以还可以勉勉强强给这位少年 讲一些自己擅长的题.具体来说,Kiana 先给这 ...

  3. MVVM与Controller瘦身实践

    MVC是一个做iOS开发都知道的设计模式,也是Apple官方推荐的设计模式.实际上,Cocoa Touch就是按照MVC来设计的. 这里,我们先不讲MVC是什么,我们先来谈谈软件设计的一些原则或者说理 ...

  4. Cef3 学习资料

    fanfeilong/cefutil CEF General Usage(CEF3预览) CEF General Usage(CEF3预览) 介绍 CEF全称Chromium Embedded Fra ...

  5. Spring动态切换数据源

    11 //定义数据源枚举public enum DataSourceKey { master, slave, } 22 /** * 数据源路由 */ @Slf4j public class Dynam ...

  6. luoguP4389 付公主的背包

    luogu 显然这是个背包题 显然物品的数量是不用管的 所以考虑大小为\(v\)的物品可以装的体积用生成函数表示一下 \[ f(x)=\sum_{i=0}^{+\infty}x^{vi}=\frac{ ...

  7. POJ1032 Parliament

    题目来源:http://poj.org/problem?id=1032 题目大意:给定一个正整数N(5<=N<=1000),将N拆为若干个不同的数使得它们的乘积最大(找到一组互不相等,和为 ...

  8. 旅行青蛙分析(Android篇)

    近期旅行青蛙这款游戏非常的火热,周围的朋友.家人都养了一只小青蛙.看到网上有人说这款游戏可以直接逆向编译,没有加密:所以在搜索相关资料后花了一些时间进行逆向分析与修改.这篇文章里,我将介绍如何获取稀有 ...

  9. 弹层组件文档 - layui.layer

    http://www.layui.com/doc/modules/layer.html

  10. JAVA四大特征:封装,继承,多态,抽象

    1,封装 将对象的属性和方法组合成一个独立的整体,隐藏实现的细节,并提供对外访问的接口. 封装的好处: (1):隐藏实现细节.好比你买了台电视机,你只需要怎么使用,并不用了解其实现原理. (2):安全 ...