Enumerate network adapters

本文提供了一个使用C++语言通过Windows API获取计算机所有网络适配器信息的代码示例,包括适配器名称、描述、IP地址等详细信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Note: disabled adapters will not be enumerated.

Source Code:

DWORD EnumNetworkAdapters()
{
    IP_ADAPTER_INFO* pAdapterList = NULL;
    IP_ADAPTER_INFO* pAdapter = NULL;
    ULONG ulBufLen = 0;
    DWORD err;

    err = ::GetAdaptersInfo(pAdapterList, &ulBufLen);
    if (err == ERROR_BUFFER_OVERFLOW)
    {
        pAdapterList = (IP_ADAPTER_INFO*) ::HeapAlloc(::GetProcessHeap(), HEAP_ZERO_MEMORY, ulBufLen);
        err = ::GetAdaptersInfo(pAdapterList, &ulBufLen);
    }
    else if (err != ERROR_SUCCESS)
    {
        return err;
    }

    if (pAdapterList == NULL)
    {
        return ERROR_BAD_ARGUMENTS;
    }

    pAdapter = pAdapterList;
    while (pAdapter != NULL) {
        cout << "-----------------------------------------------" << endl;
        cout << pAdapter->AdapterName << endl;
        cout << pAdapter->Description << endl;
        IP_ADDR_STRING *ipAddrString = &pAdapter->IpAddressList;
        while (ipAddrString != NULL) {
            cout << ipAddrString->IpAddress.String << endl;
            ipAddrString = ipAddrString->Next;
        }

        pAdapter = pAdapter->Next;
    }

    ::HeapFree(::GetProcessHeap(), 0, pAdapterList);
    return 0;
}

转载于:https://www.cnblogs.com/yuvu/archive/2012/07/05/2577784.html

import platform import socket import psutil import wmi from datetime import datetime def format_timestamp(wmi_time): """格式化WMI时间戳为YYYYMMDD格式""" try: return datetime.strptime(wmi_time.split('.')[0], "%Y%m%d%H%M%S").strftime("%Y%m%d") except: return wmi_time.split('.')[0][:8] def get_system_info(): """获取系统和主板信息""" c = wmi.WMI() return { "计算机名": socket.gethostname(), "系统": f"{platform.system()} {platform.release()} {platform.version()}", "系统安装日期": format_timestamp(c.Win32_OperatingSystem()[0].InstallDate), "型号": c.Win32_ComputerSystem()[0].Model.strip(), "BIOS日期": format_timestamp(c.Win32_BIOS()[0].ReleaseDate), "序列号": c.Win32_BaseBoard()[0].SerialNumber, "主板型号": c.Win32_BaseBoard()[0].Product } def get_hardware_info(): """获取硬件信息""" c = wmi.WMI() # 获取CPU信息 cpu = c.Win32_Processor()[0] # 获取内存信息 mem_modules = c.Win32_PhysicalMemory() total_mem = sum(int(m.Capacity) for m in mem_modules) // (1024 ** 3) # 获取存储信息 disks = c.Win32_DiskDrive() disk_info = [] for disk in disks: if disk.Size: size_gb = int(disk.Size) // (1000 ** 3) disk_info.append(f"[{size_gb}G] {disk.Model.strip()}") # 获取显卡信息 gpus = [gpu.Name for gpu in c.Win32_VideoController()] # 获取网络信息 adapters = c.Win32_NetworkAdapterConfiguration(IPEnabled=True) network_info = [] for idx, adapter in enumerate(adapters, 1): if adapter.MACAddress: network_info.append({ f"网卡{idx}": adapter.Description, "IP地址": adapter.IPAddress[0] if adapter.IPAddress else "", "MAC地址": adapter.MACAddress }) return { "CPU": cpu.Name.split('@')[0].strip(), "内存": { "模块": [f"[{int(m.Capacity)//1024**3}G] {m.Manufacturer} {m.PartNumber.strip()}" for m in mem_modules], "总计": f"{total_mem}GB" }, "存储": { "硬盘": disk_info, "总计": f"{sum(int(d.Size)//1000**3 for d in disks if d.Size)}GB" }, "显卡": gpus, "网络适配器": network_info } def save_to_txt(info): """保存信息到文本文件""" try: # 构造文件名 filename = f"{info['system']['计算机名']}_{info['hardware']['网络适配器'][0]['MAC地址'].replace(':', '')}_{info['system']['BIOS日期']}.txt" with open(filename, 'w', encoding='utf-8') as f: # 系统信息部分 f.write(f"记录时间: {datetime.now().strftime('%Y/%m/%d %a %H:%M:%S.%f')[:-3]}\n\n") for k, v in info['system'].items(): f.write(f"■ {k}: {v}\n") # 硬件信息部分 f.write(f"\n■ CPU: {info['hardware']['CPU']}\n") f.write(f"■ 主板: {info['system']['主板型号']}\n") f.write(f"■ 内存: {'/'.join(info['hardware']['内存']['模块'])} (总计 {info['hardware']['内存']['总计']})\n") f.write(f"■ 存储: {'/'.join(info['hardware']['存储']['硬盘'])} (总计 {info['hardware']['存储']['总计']})\n") f.write(f"■ 显卡: {'/'.join(info['hardware']['显卡'])}\n") # 网络信息 for adapter in info['hardware']['网络适配器']: f.write(f"\n■ {list(adapter.keys())[0]}: {list(adapter.values())[0]}") for k, v in list(adapter.items())[1:]: f.write(f"\n {k}: {v}") # 结尾 f.write(f"\n\n■■■ 收集完成于 {datetime.now().strftime('%Y/%m/%d %a %H:%M:%S.%f')[:-3]} ■■■") return filename except Exception as e: print(f"保存文件时出错: {str(e)}") return None if __name__ == "__main__": try: system_info = get_system_info() hardware_info = get_hardware_info() combined_info = { "system": system_info, "hardware": hardware_info } output_file = save_to_txt(combined_info) if output_file: print(f"系统信息已保存到:{output_file}") with open(output_file, 'r', encoding='utf-8') as f: print("\n文件内容:\n" + f.read()) except Exception as e: print(f"发生错误:{str(e)}")能不能把这个获取到的系统信息发送给服务端
05-11
import platform import socket import psutil import wmi from datetime import datetime def get_system_info(): """获取系统和主板信息""" c = wmi.WMI() system_info = { "记录时间": datetime.now().strftime("%Y/%m/%d %A %H:%M:%S.%f")[:-3], "计算机名": socket.gethostname(), "用户名": psutil.users()[0].name, "系统": f"{platform.system()} {platform.release()} {platform.version()}", "系统安装日期": c.Win32_OperatingSystem()[0].InstallDate.split('.')[0], "型号": c.Win32_ComputerSystem()[0].Model.strip(), "主板": { "制造商": c.Win32_BaseBoard()[0].Manufacturer, "型号": c.Win32_BaseBoard()[0].Product, "序列号": c.Win32_BaseBoard()[0].SerialNumber }, "BIOS信息": { "版本": c.Win32_BIOS()[0].SMBIOSBIOSVersion, "日期": c.Win32_BIOS()[0].ReleaseDate.split('.')[0] } } return system_info def get_cpu_info(): """获取CPU信息""" c = wmi.WMI() cpu = c.Win32_Processor()[0] return { "CPU": f"{cpu.Name} @ {cpu.MaxClockSpeed}MHz", "核心数": cpu.NumberOfCores, "逻辑处理器": cpu.NumberOfLogicalProcessors } def get_memory_info(): """获取内存信息""" c = wmi.WMI() mem_modules = c.Win32_PhysicalMemory() total_mem = sum(int(m.Capacity) for m in mem_modules) // (1024**3) return { "内存": [ f"[{int(m.Capacity)//1024**3}G] {m.Manufacturer} {m.PartNumber.strip()}" for m in mem_modules ], "总内存": f"{total_mem}GB" } def get_disk_info(): """获取存储设备信息""" c = wmi.WMI() disks = c.Win32_DiskDrive() disk_info = [] for disk in disks: if disk.Size: size_gb = int(disk.Size) // (1000**3) disk_info.append( f"[{size_gb}G] {disk.Model.strip()}" ) return {"硬盘": disk_info} def get_gpu_info(): """获取显卡信息""" c = wmi.WMI() gpus = c.Win32_VideoController() return { "显卡": [gpu.Name for gpu in gpus] } def get_network_info(): """获取网络适配器信息""" c = wmi.WMI() adapters = c.Win32_NetworkAdapterConfiguration(IPEnabled=True) net_info = [] for adapter in adapters: if adapter.MACAddress: net_info.append({ "网卡": adapter.Description, "IP地址": adapter.IPAddress[0] if adapter.IPAddress else "", "MAC地址": adapter.MACAddress }) return {"网络适配器": net_info} def collect_system_info(): """收集所有系统信息""" try: full_info = {} full_info.update(get_system_info()) full_info.update({"CPU信息": get_cpu_info()}) full_info.update({"内存信息": get_memory_info()}) full_info.update({"存储信息": get_disk_info()}) full_info.update({"显卡信息": get_gpu_info()}) full_info.update({"网络信息": get_network_info()}) return full_info except Exception as e: return {"error": str(e)} if __name__ == "__main__": info = collect_system_info() for category, details in info.items(): print(f"■■■ {category} ■■■") if isinstance(details, dict): for k, v in details.items(): print(f"{k:>20}: {v}") else: print("\n".join(details)) print()输出的■■■ 记录时间 ■■■ 2 0 2 5 / 0 5 / 1 0 S a t u r d a y 0 0 : 0 3 : 1 2 . 7 9 2 ■■■ 计算机名 ■■■ T h i n k P a d 5 2 ■■■ 用户名 ■■■ x j ■■■ 系统 ■■■ W i n d o w s 1 0 1 0 . 0 . 1 9 0 4 5 ■■■ 系统安装日期 ■■■ 2 0 2 3 1 2 0 2 1 9 2 1 4 2 ■■■ 型号 ■■■ 2 0 M A S 1 7 2 0 0 ■■■ 主板 ■■■ 制造商: LENOVO 型号: 20MAS17200 序列号: L1HF99402GZ ■■■ BIOS信息 ■■■ 版本: N2CET50W (1.33 ) 日期: 20200115000000 ■■■ CPU信息 ■■■ CPU: Intel(R) Core(TM) i7-8850H CPU @ 2.60GHz @ 2592MHz 核心数: 6 逻辑处理器: 12 ■■■ 内存信息 ■■■ 内存: ['[16G] Micron 16ATF2G64HZ-2G6E1', '[16G] Micron 16ATF2G64HZ-2G6E1', '[16G] Micron 16ATF2G64HZ-2G6E1', '[16G] Micron 16ATF2G64HZ-2G6E1'] 总内存: 64GB ■■■ 存储信息 ■■■ 硬盘: ['[2048G] ZHITAI TiPlus5000 2TB', '[1024G] INTEL HBRPEKNX0203AH'] ■■■ 显卡信息 ■■■ 显卡: ['Intel(R) UHD Graphics 630', 'NVIDIA Quadro P1000'] ■■■ 网络信息 ■■■ 网络适配器: [{'网卡': 'Intel(R) Wireless-AC 9560 160MHz', 'IP地址': '192.168.100.100', 'MAC地址': '40:74:E0:09:1F:14'}, {'网卡': 'VMware Virtual Ethernet Adapter for VMnet1', 'IP地址': '192.168.80.1', 'MAC地址': '00:50:56:C0:00:01'}, {'网卡': 'VMware Virtual Ethernet Adapter for VMnet8', 'IP地址': '192.168.83.1', 'MAC地址': '00:50:56:C0:00:08'}] Process finished with exit code 0请出输出改成以下样式,更方便读记录时间: 2024/06/20 周四 14:30:12.45 ■ 计算机名: OFFICE-PC01 ■ 用户名: Admin ■ 系统: Microsoft Windows 11 专业版 10.0.22621 ■ 系统安装日期: 05/03/2023 ■ 型号: Dell OptiPlex 7080 ■ BIOS日期: 11/15/2022 ■ 序列号: 123XYZ456 ■ CPU: Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz ■ 主板: 0W0PGJ ■ 内存: [16G] Samsung M471A2K43DB1-CWE (总计 32GB) ■ 硬盘: [512G] Samsung SSD 870 EVO 500GB/[1T] WDC WD1003FZEX-00K3CA0 (总计 1512GB) ■ 硬盘序列号: S4AZNB0N123456/WD-WMC6S0P78901 ■ 显卡: NVIDIA Quadro P1000/Intel(R) UHD Graphics 630 ■ 网卡1: Intel(R) Ethernet Connection (11) I219-LM IP地址: 192.168.1.100 MAC地址: 00:23:24:99:37:55 ■■■ 收集完成于 2024/06/20 周四 14:31:05.12 ■■■ 请给出完整的代码,我好复制出来进行打包
05-11
### Python 中 `enumerate` 函数的用法与实例 #### 什么是 `enumerate`? `enumerate` 是 Python 的内置函数,用于在循环过程中同时获取列表或其他可迭代对象中的索引及其对应的值。它返回的是一个枚举对象,其中每个元素是一个 `(index, value)` 形式的元组。 其基本语法如下: ```python enumerate(iterable, start=0) ``` - **参数说明**: - `iterable`: 需要遍历的对象(如列表、字符串等)。 - `start`: 枚举计数起始位置,默认为 0[^1]。 --- #### 使用场景及示例 ##### 场景一:简单列举列表项并打印索引和值 通过 `enumerate` 可以轻松实现一边遍历列表一边记录当前项目的索引。 ```python fruits = ["apple", "banana", "cherry"] for index, fruit in enumerate(fruits): print(f"Index {index}: {fruit}") ``` 运行结果: ``` Index 0: apple Index 1: banana Index 2: cherry ``` 此方法相比手动维护索引更加简洁高效[^1]。 --- ##### 场景二:自定义起始索引 可以设置第二个参数来改变默认从零开始的行为。 ```python months = ["January", "February", "March"] for month_num, month_name in enumerate(months, start=1): print(f"{month_num}th Month is {month_name}.") ``` 输出将是: ``` 1st Month is January. 2nd Month is February. 3rd Month is March. ``` 这里我们将初始编号调整为了1而不是标准情况下的0[^2]。 --- ##### 场景三:结合 Pandas 数据框操作 当处理像 DataFrame 这样的结构化数据时,也可以利用 `enumerate` 来访问行或者列的信息。 假设我们有一个简单的DataFrame: ```python import pandas as pd df = pd.DataFrame({ 'A': [1, 2], 'B': [3, 4] }) print(df) # 输出原表 A B 0 1 3 1 2 4 ``` 如果想逐行列出每一行的数据以及它的序号,则可以用下面的方式完成: ```python for idx, row in enumerate(df.values): print(f'Row {idx}: ', list(row)) ``` 最终得到的结果会是这样的形式: ``` Row 0: [1, 3] Row 1: [2, 4] ``` 这展示了如何将Pandas DataFrames 转换成 NumPy 数组再配合 `enumerate` 实现更灵活的操作[^3]。 --- ##### 场景四:应用于深度学习模型开发前的数据预处理阶段 比如在一个自然语言处理项目里准备训练集的时候,可能需要知道每句话在整个语料库里的具体位置以便后续追踪错误样本等问题。此时就可以借助于 `enumerate` 达到目的。 假设有这样一段代码片段用来加载NER标注过的新闻标题作为输入特征X 和标签Y : ```python data_tuple_list = get_table('train_ner_news_title') df = pd.DataFrame(data_tuple_list, columns=['mid', 'x', 'y']) sentences = df['x'].tolist() labels = df['y'].tolist() for i, sentence in enumerate(sentences[:5]): print(f"Sentence No.{i+1}:{sentence}, Label:{labels[i]}") ``` 以上脚本选取了前五个句子连同它们各自的类别一起展示出来便于调试验证[^4]。 --- ### 总结 综上所述,`enumerate` 提供了一种优雅的方式来增强程序逻辑清晰度的同时减少冗余变量声明次数,在多种实际应用场合下都展现了其实用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值