计算机网络实验课(一)——配置+实验一:查看当前主机所有的网卡信息
文章目录
- 前言
- 一、安装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# 代码使用了 SharpPcap
和 PacketDotNet
库来获取本地计算机的网络适配器(网卡)列表,并在 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.0
到10.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、代码