当前位置: 首页 > java >正文

计算机网络实验课(一)——配置+实验一:查看当前主机所有的网卡信息

文章目录

  • 前言
  • 一、安装vs2012
  • 二、实验一:查看当前主机所有的网卡信息
    • 2.1 创建C#工程
      • 2.1.1 打开 Visual Studio 以后,点击新建项目
      • 2.1.2 新建windows窗体应用程序
    • 2.2 添加引用
    • 2.3 添加RichTextBox
    • 2.4 编写程序
      • 贴入代码
      • 🧱 1. 引用命名空间
      • 🏗️ 2. 命名空间与类定义
      • 📋 3. 获取并显示网卡设备列表的方法:`GetDeviceList`
        • 📐 4. UI 组件说明
      • 📦 5. 所需依赖项
      • ✅ 总结功能
    • 2.5 代码分析
    • 2.6 运行程序
      • 结果
      • 📡 每个接口的基本结构如下:
        • 🔹 接口 1:WLAN(无线局域网)
          • ✅ 解释:
        • 🔹 接口 2:蓝牙网络连接
          • ✅ 解释:
        • 🔹 接口 3:本地连接 *2*
          • ✅ 解释:
        • 🔹 接口 4:以太网(有线网络)
          • ✅ 解释:
      • 🧠 总结要点:
      • 💡 补充知识:

前言

下周三需要去给本科生代课了,所以特地来此记录下几个实验步骤

一、安装vs2012

为什么在2025年的今天下2012的版本,嗯,为了版本对齐,以防万一不匹配(主要是害怕界面布局不理解,不熟悉,会造成找不到对应选项)

参考了这篇文章:013:开发软件Visual Studio 2012安装教程
如果是官网下的话是一个iso,应该是个虚拟文件。反正解压后都一样(key的话,网上找找都可以)
在这里插入图片描述
安装好后,界面如下

在这里插入图片描述

二、实验一:查看当前主机所有的网卡信息

在本实验中,将引导大家使用SharpPcap来获取网卡信息。为方便快速掌握,将在一开始简单介绍C#工程的创建和SharpPcap引用方法。

Visual Studio 的使用方法网上或书中有详尽教程,这里不再进行过多介绍。当然,为方便学习,在本实验中将伴随SharpPcap的使用方法进行简单的指导。

本教程使用的版本为Visual Studio 2012,其余版本的使用方式也都类似。

2.1 创建C#工程

2.1.1 打开 Visual Studio 以后,点击新建项目

在这里插入图片描述

2.1.2 新建windows窗体应用程序

如下图所示,新建一个Windows窗体应用程序。
在左侧模块中选择Visual C#项目下的Windows;
点击“Windows窗体应用程序”选项;
填写合适的项目名称和解决方案名称,并选择解决方案的存放位置;
在这里插入图片描述

2.2 添加引用

也就是添加动态库
在工程界面的右上侧“解决方案资源管理器”中的“引用”项上右键,选择“添加引用”,
在这里插入图片描述
第一个就是“解决方案资源管理器”
在这里插入图片描述
选择“浏览”
在这里插入图片描述
找到两个dll位置(.exe和两个dll我都会上传)PacketDotNet.dll 和 SharpPcap.dll
在这里插入图片描述

2.3 添加RichTextBox

在左侧“工具箱”内选择TextBox控件,拖到窗体中,并调整窗体和控件的大小
在这里插入图片描述
在这里插入图片描述

2.4 编写程序

如图,在窗体任意位置右键选择“查看代码”即可进入代码编辑界面
在这里插入图片描述

贴入代码

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using SharpPcap; 
using PacketDotNet; namespace 实验教程 
{ public partial class Form1 : Form { CaptureDeviceList device_list; public Form1() { InitializeComponent(); device_list = GetDeviceList(); } /// <summary> /// 获得当前的设备列表(网卡) /// </summary> /// <returns></returns> public CaptureDeviceList GetDeviceList() { // Print SharpPcap version  string ver = SharpPcap.Version.VersionString; this.richTextBox1.Text = string.Format("SharpPcap {0}, Device List\n", ver); try { // Retrieve the device list CaptureDeviceList device_list = CaptureDeviceList.Instance; // If no devices were found print an error if (device_list.Count < 1) { this.richTextBox1.Text += "No devices were found on this machine\n"; return null; } this.richTextBox1.Text += "\nThe following devices are available on this machine:\n"; this.richTextBox1.Text += 
"----------------------------------------------------\n"; // Print out the available network devices foreach (ICaptureDevice dev in device_list) this.richTextBox1.Text += string.Format("{0}\n", dev.ToString()); return device_list; } catch (System.Exception ex) { MessageBox.Show(ex.ToString()); return null; } } } 
} 

这段 C# 代码使用了 SharpPcapPacketDotNet 库来获取本地计算机的网络适配器(网卡)列表,并在 Windows Forms 窗体中显示这些信息。下面是对代码逐段的详细解释:


🧱 1. 引用命名空间

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SharpPcap;
using PacketDotNet;
  • System:基础类库,如字符串、集合等。
  • System.Windows.Forms:用于创建 Windows 桌面应用程序界面。
  • SharpPcap:用于捕获和发送网络数据包的库(基于 WinPcap/Npcap)。
  • PacketDotNet:用于解析网络协议包内容(如以太网帧、IP 数据报、TCP/UDP 报文等)。

🏗️ 2. 命名空间与类定义

namespace 实验教程 
{ public partial class Form1 : Form { CaptureDeviceList device_list; public Form1() { InitializeComponent(); device_list = GetDeviceList(); }
  • 定义了一个名为 实验教程 的命名空间(中文命名空间,不推荐,但可以使用)。
  • Form1 是一个继承自 Form 的类,代表主窗口。
  • device_list 是一个字段,用于保存从系统中获取到的网络设备列表。
  • 构造函数中调用了 InitializeComponent() 方法(由设计器生成),然后调用 GetDeviceList() 来初始化设备列表。

📋 3. 获取并显示网卡设备列表的方法:GetDeviceList

public CaptureDeviceList GetDeviceList()
{string ver = SharpPcap.Version.VersionString;this.richTextBox1.Text = string.Format("SharpPcap {0}, Device List\n", ver);
  • 显示 SharpPcap 的版本号到 richTextBox1 控件中。
try 
{// Retrieve the device list CaptureDeviceList device_list = CaptureDeviceList.Instance;
  • 使用 CaptureDeviceList.Instance 获取本机所有可用的网络设备列表。
if (device_list.Count < 1) 
{this.richTextBox1.Text += "No devices were found on this machine\n";return null;
}
  • 如果没有找到任何网络设备,则提示“未找到设备”并返回 null
this.richTextBox1.Text += "\nThe following devices are available on this machine:\n";
this.richTextBox1.Text += "----------------------------------------------------\n";foreach (ICaptureDevice dev in device_list)this.richTextBox1.Text += string.Format("{0}\n", dev.ToString());
return device_list;
  • 遍历设备列表,并将每个设备的信息(通过 ToString())添加到 richTextBox1 中。
  • 最后返回设备列表对象。
catch (System.Exception ex) 
{MessageBox.Show(ex.ToString());return null;
}
  • 捕获异常并弹出消息框显示错误信息。

📐 4. UI 组件说明
  • richTextBox1:用于显示设备信息的富文本框控件。
  • device_list:存储了当前系统中的网络设备列表(ICaptureDevice 接口集合)。
  • Form1.Designer.cs 中应该已经拖入了这个 richTextBox1 控件,否则会抛出空引用异常。

📦 5. 所需依赖项

要运行此程序,必须安装以下库:

  • SharpPcap:C# 封装的 libpcap/WinPcap/Npcap。
  • PacketDotNet:用于解析数据包内容。
  • 并且你的电脑上需要安装 Npcap(Windows 上替代 WinPcap 的驱动)。

✅ 总结功能

该程序的功能是:

在 Windows 窗体中显示当前计算机上的所有网络接口设备(即网卡),包括它们的名称、描述和可能的地址等信息。

适用于学习如何使用 SharpPcap 获取网络设备列表,为后续进行网络嗅探、数据包捕获等操作打下基础。


如果你需要我帮你扩展它,比如开始监听某个网卡、捕获数据包、分析协议内容,请告诉我 😊

2.5 代码分析

在这里插入图片描述

2.6 运行程序

在这里插入图片描述
在这里插入图片描述

结果

SharpPcap 4.2.0.0, Device ListThe following devices are available on this machine:
----------------------------------------------------
interface: Name: rpcap://\Device\NPF_{0C4177F4-EC82-42B4-A600-1923DAB7D77A}
FriendlyName: WLAN
GatewayAddress: 10.201.255.254
Description: Network adapter 'Microsoft' on local host
Addresses:
Addr:      fe80::d599:47f:92db:9e23
Netmask:   
Broadaddr: Addresses:
Addr:      10.201.6.17
Netmask:   255.255.0.0
Broadaddr: 255.255.255.255Addresses:
Addr:      HW addr: C035321DE305Flags: 0interface: Name: rpcap://\Device\NPF_{A1B57BBA-A5C2-458D-BF38-10E47502269A}
FriendlyName: 蓝牙网络连接
Description: Network adapter 'Microsoft' on local host
Addresses:
Addr:      fe80::e5a0:f1de:7796:657d
Netmask:   
Broadaddr: Addresses:
Addr:      fe80::e5a0:f1de:7796:657d
Netmask:   
Broadaddr: Addresses:
Addr:      HW addr: C035321DE306Flags: 0interface: Name: rpcap://\Device\NPF_{A5FF18D5-0140-4FBB-AE6C-B7BE446699F6}
FriendlyName: 本地连接* 2
Description: Network adapter 'Microsoft' on local host
Addresses:
Addr:      fe80::6c4a:21fa:95f1:d302
Netmask:   
Broadaddr: Addresses:
Addr:      fe80::6c4a:21fa:95f1:d302
Netmask:   
Broadaddr: Addresses:
Addr:      HW addr: E235321DE305Flags: 0interface: Name: rpcap://\Device\NPF_{D37BAACB-D4E6-431F-993A-0BB744CCEF7D}
FriendlyName: 以太网
Description: Network adapter 'rpcap://\Device\NPF_{D37BAACB-D4E6-431F-993A-0BB744CCEF7D}' on local host
Addresses:
Addr:      fe80::9431:3b54:41f0:a737
Netmask:   
Broadaddr: Addresses:
Addr:      10.200.110.9
Netmask:   255.0.0.0
Broadaddr: 255.255.255.255Addresses:
Addr:      HW addr: 40C2BA526C73Flags: 0

你提供的这段输出是通过 SharpPcap 获取到的本地网络设备(网卡)列表,每个设备都有其名称、友好名、地址信息等。下面我将逐条解释这些内容,帮助你理解每个字段代表的意义。


📡 每个接口的基本结构如下:

interface: Name: <唯一标识符>FriendlyName: <显示名称>GatewayAddress: <默认网关地址>Description: <适配器描述>Addresses:Addr:      <IP地址或MAC地址>Netmask:   <子网掩码>Broadaddr: <广播地址>Flags: <标志位>

🔹 接口 1:WLAN(无线局域网)
Name: rpcap://\Device\NPF_{0C4177F4-EC82-42B4-A600-1923DAB7D77A}
FriendlyName: WLAN
GatewayAddress: 10.201.255.254
Description: Network adapter 'Microsoft' on local host
Addresses:
Addr:      fe80::d599:47f:92db:9e23
Netmask:   
Broadaddr: Addresses:
Addr:      10.201.6.17
Netmask:   255.255.0.0
Broadaddr: 255.255.255.255Addresses:
Addr:      HW addr: C035321DE305
Flags: 0
✅ 解释:
  • Name:这是设备在系统中的唯一标识符,用于后续抓包操作。
  • FriendlyName:用户看到的名字,这里是“WLAN”,表示无线网络。
  • GatewayAddress:连接的默认网关地址(路由器)。
  • Description:说明这是一个 Microsoft 网络适配器(通常为虚拟适配器或驱动封装)。
  • IPv6 地址(fe80::…):链路本地地址,仅在同一局域网段内有效。
  • IPv4 地址(10.201.6.17):本机在这个无线网络中获得的 IP 地址。
  • 子网掩码(255.255.0.0):表示该 IP 所属的网络范围。
  • 广播地址(255.255.255.255):用于向整个子网发送广播。
  • HW addr:硬件地址(MAC 地址),是这个无线网卡的唯一物理标识。

🔹 接口 2:蓝牙网络连接
Name: rpcap://\Device\NPF_{A1B57BBA-A5C2-458D-BF38-10E47502269A}
FriendlyName: 蓝牙网络连接
Description: Network adapter 'Microsoft' on local host
Addresses:
Addr:      fe80::e5a0:f1de:7796:657d
Netmask:   
Broadaddr: Addresses:
Addr:      fe80::e5a0:f1de:7796:657d
Netmask:   
Broadaddr: Addresses:
Addr:      HW addr: C035321DE306
Flags: 0
✅ 解释:
  • 这是一个蓝牙网络适配器,用于蓝牙设备之间的通信。
  • 只有 IPv6 链路本地地址,没有分配 IPv4 地址。
  • MAC 地址与上一个网卡接近,可能属于同一个设备的不同接口。

🔹 接口 3:本地连接 2
Name: rpcap://\Device\NPF_{A5FF18D5-0140-4FBB-AE6C-B7BE446699F6}
FriendlyName: 本地连接* 2
Description: Network adapter 'Microsoft' on local host
Addresses:
Addr:      fe80::6c4a:21fa:95f1:d302
Netmask:   
Broadaddr: Addresses:
Addr:      fe80::6c4a:21fa:95f1:d302
Netmask:   
Broadaddr: Addresses:
Addr:      HW addr: E235321DE305
Flags: 0
✅ 解释:
  • “本地连接* 2”通常是 Windows 中虚拟或桥接网络适配器。
  • 同样只有 IPv6 地址,没有 IPv4 地址。
  • MAC 地址不同,可能是虚拟网卡或者由 Hyper-V、VMware 等创建。

🔹 接口 4:以太网(有线网络)
Name: rpcap://\Device\NPF_{D37BAACB-D4E6-431F-993A-0BB744CCEF7D}
FriendlyName: 以太网
Description: Network adapter 'rpcap://...' on local host
Addresses:
Addr:      fe80::9431:3b54:41f0:a737
Netmask:   
Broadaddr: Addresses:
Addr:      10.200.110.9
Netmask:   255.0.0.0
Broadaddr: 255.255.255.255Addresses:
Addr:      HW addr: 40C2BA526C73
Flags: 0
✅ 解释:
  • 这是以太网接口(有线网络),当前获得的 IP 是 10.200.110.9
  • 子网掩码为 255.0.0.0,表示该网络的 IP 范围从 10.0.0.010.255.255.255
  • 广播地址为全 255,表示对整个网络广播。
  • MAC 地址是这个有线网卡的唯一标识。

🧠 总结要点:

设备名称类型是否有 IPv4 地址用途/特点
WLAN无线网络✅ 是上网使用
蓝牙网络连接蓝牙适配器❌ 否蓝牙通信
本地连接* 2虚拟/桥接网络❌ 否虚拟化相关
以太网有线网络✅ 是插网线上网

💡 补充知识:

  • fe80::/10:是 IPv6 的链路本地地址,只能在本地网络段通信。
  • HW addr:即 MAC 地址,是网卡的全球唯一标识(如 40:C2:BA:52:6C:73)。
  • rpcap://:表示可以通过远程捕获协议访问的设备(即使设备在远程主机上)。
  • Flags:设备状态标志,0 表示正常启用。

如果你想要进一步用这些设备进行数据包捕获(嗅探),可以调用 Open() 方法打开某个设备并开始监听流量。

需要我帮你写一段代码来监听某张网卡的流量吗?😊

RichTextBox、代码

http://www.xdnf.cn/news/9104.html

相关文章:

  • 2.1 C++之条件语句
  • 5.26打卡
  • RK3588 buildroot 双网口bonding调试
  • MERIT:用于可靠且可解释的肝纤维化分期的多视图证据学习|文献速递-深度学习医疗AI最新文献
  • 【前端兼容】深入实战:vw/vh 视口单位的高效应用与避坑指南
  • Linux系统使用docker部署SpringBoot+vue项目详细【从零开始,亲测有效】
  • 机试 | vector/array Minimum Glutton C++
  • 微信语音类输入发送功能测试
  • 【更新至2023年】1985-2023年全国及各省就业人数数据(无缺失)
  • QT学习一
  • 战略管理数字化的全面解决方案 ---iDSTE:集成战略管理软件的开创者与引领者
  • 110 kV覆冰绝缘子电场分布特性有限元分析报告
  • Wave Terminal + Cpolar:SSH远程访问的跨平台实战+内网穿透配置全解析
  • BeanUtil和BeanUtils有什么区别
  • Docker 使用镜像[SpringBoot之Docker实战系列] - 第537篇
  • AI模型评估指南:准确率、召回率、F1值到底怎么用
  • 【四. Java数组操作全解析】
  • GO并发过高导致程序崩溃如何解决
  • 图解RNN基本结构:从经典模型到注意机制全解析
  • 433M射频接收芯片 XL520 产品特性,空旷环境下通讯距离可达200米
  • 通配符滥用详解:Linux命令行的潜在风险
  • Vue.nextTick 异步更新队列:确保 DOM 更新后的操作
  • 2131. 连接两字母单词得到的最长回文串
  • 深入理解 JavaScript 异步编程与 Promise
  • Anaconda 的基础教程,从入门到精通
  • nt!MiAddViewsForSection函数分析
  • 树莓派4B 在系统环境安装snap7 西门子plc通讯包(佟掌柜专用)
  • 探索Facebook隐私保护背后的复杂技术实现
  • Lua 的速度为什么比 Python 快
  • React vs Vue.js:选哪个框架更适合你的项目?