多网卡情况下如何获取连接的ip地址c++

在多网卡的情况下,你可以使用C++结合操作系统提供的网络API来获取当前连接的IP地址。以下是一个基于Windows平台的示例代码,演示如何获取当前连接的IP地址:

#include <iostream>
#include <winsock2.h>
#include <iphlpapi.h>

#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "iphlpapi.lib")

int main() {
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        std::cerr << "WSAStartup failed." << std::endl;
        return 1;
    }

    // 获取所有网络适配器信息
    PIP_ADAPTER_INFO pAdapterInfo = nullptr;
    DWORD dwBufLen = sizeof(IP_ADAPTER_INFO);
    if (GetAdaptersInfo(pAdapterInfo, &dwBufLen) == ERROR_BUFFER_OVERFLOW) {
        pAdapterInfo = (IP_ADAPTER_INFO*)malloc(dwBufLen);
        if (pAdapterInfo == nullptr) {
            std::cerr << "Failed to allocate memory for pAdapterInfo." << std::endl;
            WSACleanup();
            return 1;
        }
    }

    if (GetAdaptersInfo(pAdapterInfo, &dwBufLen) == NO_ERROR) {
        PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
        while (pAdapter) {
            // 遍历每个网络适配器,查找当前连接的适配器
            if (pAdapter->Type == IF_TYPE_ETHERNET_CSMACD || pAdapter->Type == IF_TYPE_PPPOE) {
                IP_ADDR_STRING ipAddressList[IP_MAX_MULTICAST_GROUPS];
                DWORD dwIndex = pAdapter->IfIndex;

                // 获取指定适配器的IP地址
                if (GetAdaptersAddresses(AF_INET, 0, nullptr, pAdapter, &dwIndex, nullptr, &ipAddressList[0], &dwBufLen) == NO_ERROR) {
                    for (int i = 0; i < (int)ipAddressList[0].IpAddressCount; i++) {
                        std::cout << "IP Address: " << inet_ntoa(ipAddressList[0].IpAddressList[i]) << std::endl;
                    }
                }
            }

            pAdapter = pAdapter->Next;
        }
    }

    if (pAdapterInfo) {
        free(pAdapterInfo);
    }

    WSACleanup();
    return 0;
}

这段代码使用了Windows的GetAdaptersInfoGetAdaptersAddresses函数来获取网络适配器信息和IP地址。它首先通过GetAdaptersInfo获取所有网络适配器的信息,然后遍历每个适配器,查找类型为以太网或PPPoE的适配器。对于每个符合条件的适配器,它使用GetAdaptersAddresses获取该适配器的IP地址,并打印出来。

相关推荐

  1. 网卡情况如何获取连接ip地址c++

    2024-03-10 00:08:02       27 阅读
  2. 【实时监控主机与某个IP网络连接情况

    2024-03-10 00:08:02       21 阅读
  3. C# 获取本机IP地址方法

    2024-03-10 00:08:02       44 阅读
  4. IP地址地理位置如何确定?

    2024-03-10 00:08:02       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-10 00:08:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-10 00:08:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-10 00:08:02       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-10 00:08:02       20 阅读

热门阅读

  1. 657.机器人能否返回原点

    2024-03-10 00:08:02       28 阅读
  2. 统计子矩阵

    2024-03-10 00:08:02       25 阅读
  3. React Redux使用详细讲解

    2024-03-10 00:08:02       25 阅读
  4. vue和react的diff算法源码

    2024-03-10 00:08:02       25 阅读
  5. 全量知识系统 之 “百度翻译”

    2024-03-10 00:08:02       22 阅读
  6. Qt的定时器QTimer

    2024-03-10 00:08:02       23 阅读
  7. Qt | 停靠窗口QDockWidget

    2024-03-10 00:08:02       24 阅读
  8. QT学习笔记2--QT简述

    2024-03-10 00:08:02       29 阅读
  9. LeetCode 2710.移除字符串中的尾随零

    2024-03-10 00:08:02       22 阅读
  10. 力扣 239. 滑动窗口最大值

    2024-03-10 00:08:02       23 阅读
  11. P10095 [ROIR 2023 Day 1] 斐波那契乘积

    2024-03-10 00:08:02       27 阅读
  12. Druid数据库连接池配置

    2024-03-10 00:08:02       24 阅读
  13. 国内用ChatGPT可以吗

    2024-03-10 00:08:02       24 阅读
  14. Xargs命令详解: 构建和执行命令的必备工具

    2024-03-10 00:08:02       24 阅读