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. Raising Modulo Numbers(ZOJ 2150)

    这题其实就是快速求一个高次幂的模. 这是题目的答案 #include<iostream> #include<cmath> using namespace std; ]; ]; ...

  2. Linux常用知识点汇总

    常用命令 1.ls 列出目录下的所有文件及文件夹 2.pwd 打印出当前所在目录 3. ./ 执行 .sh 文件命令 4.ip addr 查看ip地址 5.sudo  service network ...

  3. ASP.NET MVC实现layui富文本编辑器应用

    先看看视图层 在视图层,使用的是视图助手--HtmlHelper,代替我们网页中传统的表单标签元素,其中的m代表实体模型.通过视图助手,为我们生成id和name属性相同的textarea标签. 备注: ...

  4. The instance of entity type 'xxxx' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked.

    一.问题描述 问题:The instance of entity type 'xxxx' cannot be tracked because another instance with the sam ...

  5. JAVA对象创建的过程

    Java中一个实例对象被创建的过程 一.类的加载过程 首先,Jvm在执行时,遇到一个新的类时,会到内存中的方法区去找class的信息,如果找到就直接拿来用,如果没有找到,就会去将类文件加载到方法区.在 ...

  6. bzoj1934: [Shoi2007]Vote 善意的投票(最小割)

    传送门 考虑源点为同意,汇点为反对,那么只要源点向同意的连边,不同意的向汇点连边,求个最小割就是答案 然后考虑朋友之间怎么办,我们令朋友之间连双向边.这样不管怎么割都能对应一种选择情况.那么还是求一个 ...

  7. 我的省选 Day -9

    Day -9 不知不觉,日子已经变成一位数了,已经到了最后关头了. 早上班主任在上数学课时告诉我们,高校自招的降分政策已经没有以前那么优惠了(这我知道啊) 于是老师间接的暗示了奥赛如果没拿到省一就没什 ...

  8. LightOJ 1336 - Sigma Function

    原题链接 基础数论中很经典的一道题 题意 给出了σ(n)的计算公式,让你找出整数1-n中有多少对应σ(n)的值是偶数. 思路 观察σ(n)的公式发现,每一个乘项都是 (piei+1 - 1) / (p ...

  9. POJ1047 Round and Round We Go

    题目来源:http://poj.org/problem?id=1047 题目大意: 有一些整数具有这样的性质:它的位数为n,把它和1到n的任意一个整数相乘结果的数字会是原数字的一个“环”.说起来比较抽 ...

  10. nginx大量TIME_WAIT的解决办法

    1.netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 查看time_wait 很大 2.解决此问题需要对sysc ...