网卡信息检测与网络流量检测

文章目录

  • 网卡信息检测与网络流量检测
    • 网卡信息检测相关类
      • Network Interface类
        • 获取网卡的信息
      • IPInterfaceProperties类
        • 实例 网卡单播地址的信息
        • 获取网关地址
        • 获取任意广播地址
        • 获取此接口的动态主机配置协议(DHCP)服务器的地址
        • 获取此接口的域名系统(DNS)服务器的地址
        • 获取此网络接口的Internet协议版本(IPv4)配置数据
    • 网络流量检测类
      • IPGlobalProperties类
      • IPGlobalProperties类提供的常用方法
      • 获取本机TCP连接信息
    • 总结
      • 要学会调试程序
      • 学会查官方文档

​ 每台计算机进行网线通讯,都要借助一个硬件设备, 网卡,简称 NICNICNetwork Interface Controller 的缩写。网卡则负责将 比特流转换成电信号发送出去和将检测到的 电信号转换成比特流并接收。

网络适配器:

  • 又称网卡是连接计算机与网络的硬件设备。

  • 整理计算机上发往网线上的数据,并将数据分解为适当大小的数据包之后向网络上发送。

    在C#中,提供了System.Net.NetworkInformation命名空间,来提供网卡的相关信息。

其中包括:

  • 对本机网卡相关信息的检测
  • 本机有多少网卡,网卡名称、速度、硬件地址等。
  • 对本机网络流量的检测
    • 网络连接配置、接收与发送的数据包等。

网卡信息检测相关类

Network Interface类

提供了网络适配器的配置和统计信息:

  • 网络适配器个数

  • 网络适配器型号

  • 网络适配器的速度

  • 网络适配器MAC地址

  • 网络适配器连接是否可用

每个网络适配器都包含一个NetworkInterface对象与之对应。

属性及方法 说明
Name属性 获取网络适配器的名称
Speed属性 获取网络适配器的速度(*bit/*秒)
GetAllNetworkInterfaces方法 返回描述本地计算机上的所有网络适配器对象
GetIPProperties方法 返回描述此网络适配器配置的对象
GetIsNetworkAvailable方法 指示是否有任何可用的网络连接
GetPhysicalAddress方法 返回此适配器的媒体访问控制(MAC)地址
Supports方法 指示接口是否支持指定的协议(IPv4或IPv6)

获取网卡的信息

 private static void NetworkInterfaces(){#region NetWorkInterface//利用NetworkInterface类提供的静态方法得到NetworkInterface类型的数组。NetworkInterface[] networkInterface = NetworkInterface.GetAllNetworkInterfaces();//声明并初始化了一个 NetworkInterface类的对象数组。Console.WriteLine($"网络适配器的个数为:{networkInterface.Length}");Console.WriteLine($"是否有可以用网络连接:{NetworkInterface.GetIsNetworkAvailable()}");Console.WriteLine();foreach (NetworkInterface network in networkInterface){Console.WriteLine($"网卡名字:{network.Name}");Console.WriteLine($"物理地址:{network.GetPhysicalAddress()}");Console.WriteLine($"速度:{network.Speed}");Console.WriteLine($"网卡ID:{network.Id}");Console.WriteLine($"网卡描述:{network.Description}");Console.WriteLine($"是否仅接受数据包:{network.IsReceiveOnly}");Console.WriteLine($"是否支持IPV4:{network.Supports(NetworkInterfaceComponent.IPv4)}");Console.WriteLine($"是否支持IPV6:{network.Supports(NetworkInterfaceComponent.IPv6)}");Console.WriteLine("-----------------------------------------------------------------");}
网卡名字:本地连接* 1
物理地址:144F8A2158EB
速度:-1
网卡ID:{FA9901D2-C3AD-412B-BCC2-D6FF592EE29B}
网卡描述:Microsoft Wi-Fi Direct Virtual Adapter
是否仅接受数据包:False
是否支持IPV4:True
是否支持IPV6:True

IPInterfaceProperties类

  • 检测本机所有网络适配器支持的各种地址

    • Dns服务器的IP地址、网关地址以及多路广播地址。
  • IPInterfaceProperties类是抽象类,不能实例化。

    • 通过NetworkInterface对象的GetIPProperties()获得其实例

IPInterfaceProperties类常用的属性和方法

属性及方法 说明
AnycastAddresses属性 获取分配给此接口的任意广播IP地址
DhcpServerAddresses属性 获取此接口的动态主机配置协议(DHCP)服务器的地址
DnsAddresses属性 获取此接口的域名系统(DNS)服务器的地址
DnsSuffix属性 获取与此接口关联的域名系统(DNS)后缀
GatewayAddresses属性 获取此接口的网关地址
MulticastAddresses属性 获取分配给此接口的多路广播地址
UnicastAddresses属性 获取分配给此接口的单播地址
GetIPv4Properties方法 获取此网络接口的Internet协议版本(IPv4)配置数据
GetIPv6Properties方法 获取此网络接口的Internet协议版(IPv6)配置数据

实例 网卡单播地址的信息

 private static void GetUnicastAdress(){#region UnicastAddress 网络接口的单播地址NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();foreach (NetworkInterface adapter in adapters){IPInterfaceProperties iPInterfaceProperties = adapter.GetIPProperties();UnicastIPAddressInformationCollection unicasts = iPInterfaceProperties.UnicastAddresses;//定义时间格式//dddd 周几//mmmm 月份//yyyy 年份//dd   几日//hh:mm:ss 时分秒// tt  上下午string timetype = "dddd, MMMM dd, yyyy  hh: mm: ss tt";//自己定义时间的格式if (unicasts.Count > 0){Console.WriteLine(adapter.Description);//打印出网卡的描述foreach (UnicastIPAddressInformation unicastIPAddressInformation in unicasts){DateTime when;//声明一个当前时间的日期变量Console.WriteLine("单播地址:.................{0}", unicastIPAddressInformation.Address);Console.WriteLine("获取IPv4子网掩码:.........{0}", unicastIPAddressInformation.IPv4Mask);Console.WriteLine("此地址作为首选地址的秒数...{0}", unicastIPAddressInformation.AddressPreferredLifetime);Console.WriteLine("此地址的有效剩余秒数:.....{0}", unicastIPAddressInformation.AddressValidLifetime);Console.WriteLine("DHCP剩余时间:.............{0}", unicastIPAddressInformation.DhcpLeaseLifetime);Console.WriteLine("前缀的长度:...............{0}", unicastIPAddressInformation.PrefixLength);Console.WriteLine("标识前缀的值:.............{0}", unicastIPAddressInformation.PrefixOrigin);Console.WriteLine("标识后缀的值:.............{0}", unicastIPAddressInformation.SuffixOrigin);when = DateTime.UtcNow + TimeSpan.FromSeconds(unicastIPAddressInformation.AddressPreferredLifetime);//计算时间when.ToLocalTime();//转化为本地时间Console.WriteLine("此地址作为首选地址的到期时间为......{0}",when.ToString(timetype, System.Globalization.CultureInfo.CurrentCulture));//当地时间格式when = DateTime.UtcNow + TimeSpan.FromSeconds(unicastIPAddressInformation.AddressValidLifetime);//计算时间when.ToLocalTime();//转化为本地时间Console.WriteLine("此地址的到期时间为..................{0}",when.ToString(timetype, System.Globalization.CultureInfo.CurrentCulture));//当地时间格式when = DateTime.UtcNow + TimeSpan.FromSeconds(unicastIPAddressInformation.DhcpLeaseLifetime);//计算时间when.ToLocalTime();//转化为本地时间Console.WriteLine("DHCP到期时间为.......................{0}",when.ToString(timetype, System.Globalization.CultureInfo.CurrentCulture));//当地时间格式}}}Console.ReadLine();

获取网关地址

 private static void GatewayAddress(){#region IPInterfaceProperties NetworkInterface[] adapterd = NetworkInterface.GetAllNetworkInterfaces();foreach (NetworkInterface networkInterface in adapterd){IPInterfaceProperties iPInterfaceProperties = networkInterface.GetIPProperties();//网关信息GatewayIPAddressInformationCollection gatewayIPAddressInformation = iPInterfaceProperties.GatewayAddresses;foreach (var item in gatewayIPAddressInformation){Console.WriteLine($"网关地址:..............{gatewayIPAddressInformation[0].Address }");Console.WriteLine();}}Console.ReadLine();

获取任意广播地址

  private static void AnyCastAddress(){NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();foreach (var adapter in adapters){IPInterfaceProperties iPInterfaceProperties = adapter.GetIPProperties();IPAddressInformationCollection iPAddressInformation = iPInterfaceProperties.AnycastAddresses;if (iPAddressInformation.Count > 0){foreach (var i in iPAddressInformation){Console.WriteLine($"广播地址为:..........i.Address");Console.WriteLine($"是否在DNS服务器中出现:..........{(i.IsDnsEligible ? "是" : "否")}");//注意此处条件表达式的用法Console.WriteLine($"广播地址为:..........{(i.IsTransient ? "是" : "否")}");}}else{Console.WriteLine("{0}不存在广播地址", adapter.Name);}}Console.ReadLine();}

获取此接口的动态主机配置协议(DHCP)服务器的地址

private static void DhcpserverIPAddress(){NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();foreach (var adapter in adapters){IPInterfaceProperties iPInterfaceProperties = adapter.GetIPProperties();IPAddressCollection iPAddressInformation = iPInterfaceProperties.DhcpServerAddresses;if (iPAddressInformation.Count > 0){foreach (var i in iPAddressInformation){Console.WriteLine($"广播地址为:..........{i.Address}");}Console.ReadLine();}}}

获取此接口的域名系统(DNS)服务器的地址

 private static void DnsSeverAddress(){NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();foreach (var adapter in adapters){IPInterfaceProperties iPInterfaceProperties = adapter.GetIPProperties();IPAddressCollection dnsServers = iPInterfaceProperties.DnsAddresses;if (dnsServers.Count > 0){Console.WriteLine(adapter.Description);foreach (var i in dnsServers){Console.WriteLine($"dns服务器地址为:..........{i.ToString()}");}}}Console.ReadLine();}

获取此网络接口的Internet协议版本(IPv4)配置数据

 public static void DisplayIPv4NetworkInterfaces(){NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();Console.WriteLine("IPv4 interface information for {0}.{1}",properties.HostName, properties.DomainName);//获取计算机名字和域Console.WriteLine();foreach (NetworkInterface adapter in nics){// Only display informatin for interfaces that support IPv4.if (adapter.Supports(NetworkInterfaceComponent.IPv4) == false)//判断是否支持IPV4{continue;//如果不支持,直接跳出循环}Console.WriteLine(adapter.Description);//打印出网卡的描述// Underline the description.Console.WriteLine(String.Empty.PadLeft(adapter.Description.Length, '='));IPInterfaceProperties adapterProperties = adapter.GetIPProperties();// Try to get the IPv4 interface properties.IPv4InterfaceProperties p = adapterProperties.GetIPv4Properties();if (p == null){Console.WriteLine("No IPv4 information is available for this interface.");Console.WriteLine();continue;}// Display the IPv4 specific data.Console.WriteLine("  Index ............................. : {0}", p.Index);Console.WriteLine("  MTU ............................... : {0}", p.Mtu);Console.WriteLine("  APIPA active....................... : {0}",p.IsAutomaticPrivateAddressingActive);Console.WriteLine("  APIPA enabled...................... : {0}",p.IsAutomaticPrivateAddressingEnabled);Console.WriteLine("  Forwarding enabled................. : {0}",p.IsForwardingEnabled);Console.WriteLine("  Uses WINS ......................... : {0}",p.UsesWins);Console.WriteLine();}}

对齐方式的小技巧

 private static void printFenge(){string a = "1234567890";Console.WriteLine(a);Console.WriteLine(String.Empty.PadLeft(a.Length, '='));Console.WriteLine(String.Empty.PadLeft(a.Length, '*'));Console.WriteLine(String.Empty.PadRight(a.Length, 'n'));}

网络流量检测类

IPGlobalProperties类

  • 提供了本地计算机网络连接和通信统计数据的信息。

    • 接收到的数据包个数、丢弃的数据包个数等。

IPGlobalProperties类提供的常用方法

名 称 说 明
GetActiveTcpConnections 返回有关本地计算机上的 Internet协议版本 4 (IPV4) 传输控制协议 (TCP) 连接的信息
GetActiveTcpListeners 返回有关本地计算机上的 Internet 协议版本 4 (IPV4) 传输控制协议 (TCP) 侦听器的终结点信息
GetActiveUdpListeners 返回有关本地计算机上的 Internet 协议版本 4 (IPv4) 用户数据报协议 (UDP) 侦听器的信息
GetIPv4GlobalStatistics 提供本地计算机的 Internet 协议版本 4 (IPv4) 统计数据
GetIPv6GlobalStatistics 提供本地计算机的 Internet 协议版本 6 (IPv6) 统计数据
GetTcpIPv4Statistics 提供本地计算机的传输控制协议/Internet 协议版本 (TCP/IPv4) 统计数据
GetTcpIPv6Statistics 提供本地计算机的传输控制协议/Internet 协议版本 6 (TCP/IPv6)统计数据

获取本机TCP连接信息

        private static void TCPlistener(){IPGlobalProperties iPGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();IPEndPoint[] iPEndPoint = iPGlobalProperties.GetActiveTcpListeners();//Console.WriteLine("监听的IP地址个数为" + iPEndPoint.Length);Console.WriteLine("-------------------------------------------------");foreach (IPEndPoint iep in iPEndPoint){Console.WriteLine("TCP监听的IP地址...........{0}", iep.Address);Console.WriteLine("TCP监听的IP地址端口.......{0}", iep.Port);Console.WriteLine("TCP监听的IP遵循的协议.....{0}", iep.AddressFamily);Console.WriteLine("-------------------------------------------------");}}
   private static void TCPtraffic(){IPGlobalProperties iPGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();Console.WriteLine($"主机名:{iPGlobalProperties.HostName} 主机所在的域{iPGlobalProperties.DomainName}");IPGlobalStatistics iPGlobalStatistics = iPGlobalProperties.GetIPv4GlobalStatistics();Console.WriteLine("IP数据包默认生存时间:" + iPGlobalStatistics.DefaultTtl);Console.WriteLine("网络接口的数量:" + iPGlobalStatistics.NumberOfInterfaces);Console.WriteLine("分配的IPv4地址的数目:" + iPGlobalStatistics.NumberOfIPAddresses);Console.WriteLine("路由数:" + iPGlobalStatistics.NumberOfRoutes);Console.WriteLine("出站数据波=包" + iPGlobalStatistics.OutputPacketRequests);Console.WriteLine("收到的数据包=" + iPGlobalStatistics.ReceivedPackets);Console.ReadLine();}

总结

要学会调试程序

通过断点调试解决问题。

学会查官方文档

官方写的很清楚

C#编程_网卡信息检测与网络流量检测相关推荐

  1. 网卡信息检测与网络流量检测

    网卡信息检测与网络流量检测 网卡信息检测相关类 代码分析 网络流量检测相关类 代码分析 *特别注意*: 网卡信息检测相关类 1.网络适配器:又称网卡或网络接口卡(NIC),是连接计算机与网络的硬件设备 ...

  2. 五、网卡信息检测与网络流量检测

    网络适配器: 又称网卡或网络接口卡(NIC),是连接计算机与网络的硬件设备. 整理计算机上发往网线上的数据,并将数据分解为适当大小的数据包之后向网络上发送. System.Net.NetworkInf ...

  3. 基于python的modbus协议编程_通往未来的网络可编程之路:Netconf协议与YANG Model

    近年来,随着全球云计算领域的不断发展与业务的不断增长,促使网络技术也不断发展,SDN技术应运而生,从最初的基于Openflow的转发与控制分离的核心思想,人们不断的去扩展SDN的外延,目前,人们可以达 ...

  4. NDR(网络威胁检测及响应)与NTA的区别(网络流量检测)

    近日,全球权威IT研究与咨询机构Gartner发布了2020年<NDR全球市场指南>,山石网科连续两年成为中国唯一入选厂商.这一新闻引发了业界对NDR(网络威胁检测及响应)技术的新一轮关注 ...

  5. java网络流量测量工具_使用Indy测量网络流量

    我正在使用TIdTCPCmdServer来处理与客户端应用程序的所有通信. 我希望我的服务器记录所有类型的东西,包括网络流量. 有没有简单或聪明的方法来查看TCPCmdServer实际收到和发送了多少 ...

  6. 网络安全实验-入侵检测-基于网络入侵检测系统

     实验目的: 1.掌握snort IDS工作机理 2.应用snort三种方式工作 3.熟练编写snort规则 实验原理: 一.snort IDS概述 snort IDS(入侵检测系统)是一个强大的网络 ...

  7. linux网络连通性检测,C++ 网络连通性检测的实现方法

    C++ 网络连通性检测的实现方法 有时程序需要保持和某个指定网络的连通,有人的情况下我们直接用ping命令查看即可,然而程序自身检测会稍微麻烦一点. 实现思路如下: 用程序打开控制台->运行pi ...

  8. linux java socket编程_深入学习socket网络编程,以java语言为例

    了解java的socket编程与Linux Socket API之间的关系 一.java的网络编程 1.socket原理 socket通信就是通过IP和端口号将两台主机建立连接,提供通信.主机A的应用 ...

  9. 基于python的网络爬虫编程_基于Python的网络爬虫程序设计

    程序设计 ●Program Design 基于 Python的网络爬虫程序设计 网络 信 息量 的迅 猛 增 长,对 如何从海量的信息中准确的搜索 到用户需要的信息提 出了极大的 挑战.网络爬 虫具有 ...

最新文章

  1. html的后绑定事件,HTML 控件绑定事件
  2. Invoker 2019CCPC秦皇岛站I题 简单DP
  3. 换硬币c语言编程_如何才能成为编程高手?别人都不告诉你的东西,我来说给你听...
  4. 网络ip功放连接图_精耕新基建:智能IP网络构筑稳固的连接基石
  5. Vue+Leaflet实现加载Stamen显示地图
  6. 和可被 K 整除的子数组
  7. linux跳转乌班图服务器,Linux-Ubuntu环境安装Nginx和配置二级域名跳转
  8. scikit-learn学习笔记
  9. 利用工具的SQL注入实战
  10. 使用 HTML、CSS 和 JS 制作一个中国象棋
  11. python文件加减法_python生成PDF文件20以内加减法,给上小学的宝宝
  12. mac连不上wifi信号
  13. Python报错:PermissionError: [Errno 13] Permission denied解决方案详解
  14. 密码学的骰子——随机数
  15. Rocket核心流程源码分析
  16. 为什么“自学”总是那么难?
  17. 农夫过河实验报告c语言,农夫过河实验报告.doc
  18. 优秀课程案例:使用Scratch制作汉诺塔的演示
  19. 用 50 行代码写个听小说的爬虫
  20. listView点击置顶操作

热门文章

  1. window11性能提升 打造高性能
  2. Kbuild语法解析
  3. 学完C语言,学什么, 怎么学,之后学什么
  4. Vuzix的M100安卓智能眼镜和Google Glass不同
  5. 编译原理——语法制导翻译并产生中间代码(while,复合语句和过程调用语句的翻译)
  6. 什么是阻抗(Electrical impedance)
  7. 真传奇:看看这群清华学生的牛X岁月
  8. Linux配置 难记的命令 和 Sheel编程学习总结常用备注
  9. Linux下搭建第一个区块链网络(FISCO BCOS)
  10. 数据科学库(HM)(Day2)——matplotlib常用统计图