参考

代码如下 记录下以后用得到或者能帮到有需要的朋友

#include <iostream>
#include <WinSock2.h>
#include <Iphlpapi.h>
#pragma comment(lib,"Ws2_32.lib")
#pragma comment(lib,"Iphlpapi.lib")
#define NOIPROUTETABLE 0
#define SUCCESS 1
#define  IPROUTETABLEZERO -1
class LocalIpInfo
{
public:LocalIpInfo(){}
public:inline int GetCurrentUsingIp(std::string& strLoalhostIp){PMIB_IPFORWARDTABLE pIpRouteTable = GetIpForwardTable(TRUE);if (pIpRouteTable != NULL){DWORD i, dwCurrIndex;struct in_addr inadDest;struct in_addr inadMask;struct in_addr inadGateway;char szDestIp[128] = { 0 };char szMaskIp[128] = { 0 };char szGatewayIp[128] = { 0 };DWORD IfIndex = 0;DWORD ForwardMetric1 = 0;if (pIpRouteTable->dwNumEntries > 0){int i = 0;for (i = 0; i < pIpRouteTable->dwNumEntries; i++){dwCurrIndex = pIpRouteTable->table[i].dwForwardIfIndex;// 目的地址  inadDest.s_addr = pIpRouteTable->table[i].dwForwardDest;strcpy_s(szDestIp, sizeof(szDestIp), inet_ntoa(inadDest));// 子网掩码  inadMask.s_addr = pIpRouteTable->table[i].dwForwardMask;strcpy_s(szMaskIp, sizeof(szDestIp), inet_ntoa(inadMask));// 网关地址  inadGateway.s_addr = pIpRouteTable->table[i].dwForwardNextHop;strcpy_s(szGatewayIp, sizeof(szDestIp), inet_ntoa(inadGateway));if ((strcmp(szDestIp, "0.0.0.0") == 0) && (strcmp(szMaskIp, "0.0.0.0") == 0)){if (i == 0){ForwardMetric1 = pIpRouteTable->table[i].dwForwardMetric1;IfIndex = pIpRouteTable->table[i].dwForwardIfIndex;struct in_addr inadDest;inadDest.s_addr = pIpRouteTable->table[i].dwForwardDest;}else if (ForwardMetric1 > pIpRouteTable->table[i].dwForwardMetric1){ForwardMetric1 = pIpRouteTable->table[i].dwForwardMetric1;IfIndex = pIpRouteTable->table[i].dwForwardIfIndex;struct in_addr inadDest;inadDest.s_addr = pIpRouteTable->table[i].dwForwardDest;}}}}else{FreeIpForwardTable(pIpRouteTable);return IPROUTETABLEZERO;}FreeIpForwardTable(pIpRouteTable);if (IfIndex > 0){DWORD ipdwSize = 0;DWORD ipdwRetval;PBYTE m_pBuffer = new BYTE[MAX_PATH];ULONG m_ulSize = MAX_PATH;MIB_IPADDRTABLE *pIPAddrTable;DWORD m_dwResult;PMIB_IPADDRTABLE pAddrTable;PMIB_IPADDRROW pAddrRow;in_addr ia;GetIpAddrTable((PMIB_IPADDRTABLE)m_pBuffer, &m_ulSize, TRUE);delete[] m_pBuffer;m_pBuffer = new BYTE[m_ulSize];if (NULL != m_pBuffer){m_dwResult = GetIpAddrTable((PMIB_IPADDRTABLE)m_pBuffer, &m_ulSize, TRUE);if (m_dwResult == NO_ERROR){pAddrTable = (PMIB_IPADDRTABLE)m_pBuffer;for (int x = 0; x < pAddrTable->dwNumEntries; x++){pAddrRow = (PMIB_IPADDRROW) &(pAddrTable->table[x]);ia.S_un.S_addr = pAddrRow->dwAddr;char IPMsg[100] = { 0 };if (IfIndex == pAddrRow->dwIndex){LPCSTR psz = inet_ntoa(ia);if (psz){strLoalhostIp = psz;}delete[] m_pBuffer;return SUCCESS;}}}else{}delete[] m_pBuffer;}}}else{FreeIpForwardTable(pIpRouteTable);return NOIPROUTETABLE;}return NOIPROUTETABLE;}
private:inline void FreeIpForwardTable(PMIB_IPFORWARDTABLE pIpRouteTab){if (pIpRouteTab != NULL){::GlobalFree(pIpRouteTab);pIpRouteTab == NULL;}}inline PMIB_IPFORWARDTABLE GetIpForwardTable(BOOL bOrder){PMIB_IPFORWARDTABLE pIpRouteTab = NULL;DWORD dwActualSize = 0;// 查询所需缓冲区的大小  if (::GetIpForwardTable(pIpRouteTab, &dwActualSize, bOrder) == ERROR_INSUFFICIENT_BUFFER){// 为MIB_IPFORWARDTABLE结构申请内存  pIpRouteTab = (PMIB_IPFORWARDTABLE)::GlobalAlloc(GPTR, dwActualSize);// 获取路由表  if (::GetIpForwardTable(pIpRouteTab, &dwActualSize, bOrder) == NO_ERROR)return pIpRouteTab;::GlobalFree(pIpRouteTab);}return NULL;}
};
int main()
{LocalIpInfo local_Address_info;std::string strLocalIP;local_Address_info.GetCurrentUsingIp(strLocalIP);std::cout << strLocalIP.c_str() << std::endl;system("pause");return 0;
}

  

转载于:https://www.cnblogs.com/guolongzheng/p/11010553.html

VC windows 多网卡情况下 获取当前网卡ip地址相关推荐

  1. qt获取本机全部ipv4_QT5下获取本机IP地址、计算机名、网络连接名、MAC地址、子网掩码、广播地址...

    获取主机名称 /* * 名称:get_localmachine_name * 功能:获取本机机器名称 * 参数:no * 返回:QString */ QString CafesClient::get_ ...

  2. Eureka在有虚拟网卡的情况下获取正确的IP

    发现问题 最近项目在Eureka注册时,发现一个问题:注册的IP地址不是 192.168.0.XXX 的网络IP,而是另外一个网段的地址,如图 通过 ipconfig 命令查看本机的IP地址发现,该I ...

  3. 使用nginx代理的情况下获取用户真实IP

    ##1.背景知识 1.1. 前提知识点: 还有nginx中的几个变量: remote_addr 代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站 ...

  4. Nginx在多层代理下获取真实客户端IP地址

    最近在研究nginx中如何获取真实客户端IP的方法.众所周知,在编译Nginx时,可通过添加http_realip_module模块来获取真实客户端IP地址.何为真实IP地址呢?请看下图,既获取到的真 ...

  5. 学习笔记 - Nginx在多层代理下获取真实客户端IP地址

    最近在研究nginx中如何获取真实客户端IP的方法.众所周知,在编译Nginx时,可通过添加http_realip_module模块来获取真实客户端IP地址.何为真实IP地址呢?请看下图,既获取到的真 ...

  6. 无线网dhcp服务器租期,缺省情况下,DHCP服务器分配IP地址的租期为()。

    管理员在Router上进行了如下配置,那么连接在该路由器的G1/0/0接口下的一-台主机,能够通过DHCP获取到什么样的IP地址(). [Router]ippoolpooll TRouter-ippo ...

  7. linux获取网卡的ip,Windows和Linux系统下获取多网卡的ip地址

    在Windows或者Linux操作系统中,获取多网卡信息,可通过执行命令方式获取,具体如下: public Vector getServerIps() { Vector address = new V ...

  8. linux环境下获取真实的ip地址

    package inas.test;import java.net.Inet6Address; import java.net.InetAddress; import java.net.Network ...

  9. 通过ip无法获得计算机名称,电脑获取不到IP地址如何解决

    电脑获取不到IP地址是怎么回事?这是最近不少朋友都向小编咨询的问题.默认情况下,电脑的IP地址都是由路由器分配的,如果电脑获取不到IP地址,那可能是路由器或网卡出现了故障.下面,系统城小编就教大家如何 ...

最新文章

  1. matlab 基础知识查漏
  2. 监听列表ListVIew的滑动状态
  3. JS-循环清空对象 判断数据类型的5种常用方法
  4. 查看ubuntu linux开放的端口以及控制端口范围
  5. 前端学习(2080):计算属性和methods得对比
  6. hashmap另一种初始化
  7. [置顶] 火车票余票接口API使用方法
  8. 从spring管理的datasource中获取connection
  9. Android项目增加混淆
  10. Maven安装与配置教程
  11. python敏感词替换
  12. 一句话搞懂JavaSE、JavaEE和JavaME之间的区别
  13. 华为HCIE认证考试简介
  14. 网上订餐系统的设计与实现(论文+源码)_kaic
  15. Froala Editor 4.0.11 Crack
  16. 特征工程之特征选择(3)----F检验和互信息法
  17. 微信线下门店二维码扫码支付和退款
  18. 每天脑子里莫名其妙冒出来的话(常见于早上起床之后)持续记录,这也是日记的一种
  19. BZOJ_4698_Sdoi2008 Sandy的卡片_后缀数组+单调队列+双指针
  20. 市场调研报告-全球与中国充气帆船市场现状及未来发展趋势

热门文章

  1. php简单实用的操作文件工具类(创建、移动、复制、删除)
  2. shell脚本初体验
  3. 【php】用filter_var实现的简单参数验证
  4. 单片机IO口模拟串口程序(发送+接收
  5. matlab遍历cell和array的for循环写法
  6. 集群状态正常时需要的jps进程+是否需要部署到各个节点(持续更新中)
  7. BootStrap轮播图失效
  8. fatal error: Python.h: 没有那个文件或目录 解决方法
  9. 波士顿房价数据集解读
  10. 安装hive出现的各种问题(这些问题出现在spark连接mysql的时候)