C++获取和设置网卡信息(ip、掩码、网关、Dns)

前言

最近需要将网络设置功能集成到软件中,因此找了一些win api进行封装,由此实现对Windows的ip地址、子网掩码、默认网关、Dns等信息的获取和设置。

获取网卡信息

由于一个api不能获取全部所需信息,因此使用了两个api进行获取

获取网卡名、mac地址、ip地址、子网掩码、默认网关
  {
   
    /****获取网卡名、mac地址、ip地址、子网掩码、默认网关****/
    //PIP_ADAPTER_INFO结构体指针存储本机网卡信息
    PIP_ADAPTER_INFO adapter_info = new IP_ADAPTER_INFO();
    PIP_ADAPTER_INFO adapter = nullptr;
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);
    memset(adapter_info, 0, stSize);
    //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
    auto ret = GetAdaptersInfo(adapter_info, &stSize);
    if (ERROR_BUFFER_OVERFLOW == ret) {
   
      delete adapter_info;
      adapter_info = (PIP_ADAPTER_INFO)new BYTE[stSize];
      ret = GetAdaptersInfo(adapter_info, &stSize);
    }
    if (ERROR_SUCCESS == ret) {
    // 可能有多网卡,因此通过循环去判断
      adapter = adapter_info; // 保存链表头,等下需要释放空间
      while (adapter) {
   
        NetCardInfo info;
        if (info.ParseInfo(adapter)) {
   
          info_list.push_back(std::make_shared<NetCardInfo>(info)); // 转换成功才添加
        }
        adapter = adapter->Next;
      }
    }
    //释放内存空间
    if (adapter_info) {
   
      delete adapter_info;
    }
  }
获取连接名和dns地址
  {
   
    /******************获取连接名和dns地址************************/
    PIP_ADAPTER_ADDRESSES addresses = nullptr, cur_addresses = nullptr;
    ULONG outBufLen = 15000; // Allocate a 15 KB buffer to start with.
    ULONG Iterations = 0, ret = 0;
    do {
   
      addresses = (IP_ADAPTER_ADDRESSES *)new BYTE[outBufLen];
      if (addresses != nullptr) 
  • 11
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值