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

前言

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

一、安装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 List

The 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.255

Addresses:
Addr:      HW addr: C035321DE305

Flags: 0


interface: 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


interface: 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


interface: 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.255

Addresses:
Addr:      HW addr: 40C2BA526C73

Flags: 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.255

Addresses:
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.255

Addresses:
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、代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周末不下雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值