C#监测IPv4v6网速及流量的实例代码

1、前言

  最近做项目需要用到监测网速及流量,我经过百度和墙内谷歌都没能快速发现监测IPV6流量和网速的用例;也经过自己的一番查询和调试,浪费了不少时间,现在作为经验分享出来希望大家指正。

2、C#代码

using System.Net.NetworkInformation;
using System.Timers;

namespace Monitor
{
  public class MonitorNetwork
  {
    public string UpSpeed { get; set; }
    public string DownSpeed { get; set; }
    public string AllTraffic { get; set; }
    private string NetCardDescription { get; set; }
    //建立连接时上传的数据量
    private long BaseTraffic { get; set; }
    private long OldUp { get; set; }
    private long OldDown { get; set; }
    private NetworkInterface networkInterface { get; set; }
    private Timer timer = new Timer() { Interval = 1000 };

    public void Close()
    {
      timer.Stop();
    }

    public MonitorNetwork(string netCardDescription)
    {
      timer.Elapsed += Timer_Elapsed;
      NetCardDescription = netCardDescription;
      timer.Interval = 1000;
    }

    public bool Start()
    {
      networkInterface = null;
      NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
      foreach (var var in nics)
      {
        if (var.Description.Contains(NetCardDescription))
        {
          networkInterface = var;
          break;
        }
      }
      if (networkInterface == null)
      {
        return false;
      }
      else
      {
        BaseTraffic = (networkInterface.GetIPStatistics().BytesSent +
                networkInterface.GetIPStatistics().BytesReceived);
        OldUp = networkInterface.GetIPStatistics().BytesSent;
        OldDown = networkInterface.GetIPStatistics().BytesReceived;
        timer.Start();
        return true;
      }

    }

    private string[] units = new string[] {"KB/s","MB/s","GB/s" };

    private void CalcUpSpeed()
    {
      long nowValue = networkInterface.GetIPStatistics().BytesSent;
      int num = 0;
      double value = (nowValue - OldUp) / 1024.0;
      while (value > 1023)
      {
        value = (value / 1024.0);
        num++;
      }
      UpSpeed = value.ToString("0.0") + units[num];
      OldUp = nowValue;
    }

    private void CalcDownSpeed()
    {
      long nowValue = networkInterface.GetIPStatistics().BytesReceived;
      int num = 0;
      double value = (nowValue - OldDown) / 1024.0;
      while (value > 1023)
      {
        value = (value / 1024.0);
        num++;
      }
      DownSpeed = value.ToString("0.0") + units[num];
      OldDown = nowValue;
    }

    private string[] unitAlls = new string[] { "KB", "MB", "GB" ,"TB"};

    private void CalcAllTraffic()
    {
      long nowValue = OldDown+OldUp;
      int num = 0;
      double value = (nowValue- BaseTraffic) / 1024.0;
      while (value > 1023)
      {
        value = (value / 1024.0);
        num++;
      }
      AllTraffic = value.ToString("0.0") + unitAlls[num];
    }

    private void Timer_Elapsed(object sender, ElapsedEventArgs e)
    {
      CalcUpSpeed();
      CalcDownSpeed();
      CalcAllTraffic();
    }
  }
}

3、胡说八道

  虽然没能直接快速地百度到方法,但是实现这个需求的时候,心里是有个谱,Windows系统能监测到这个网速和流量,没理由实现不了,只需要一个方法将这个信息读取出来就好。最后实现这个需求是利用了System.Net.NetworkInformation这个程序集,但是这个程序集没有只接提供网速监测的方法,而是提供了接收和发送数据量的属性,需要自己计算出即使网速,所以这个网速不是特别的准确。

  这个程序集其实一开始就看到了,前辈方法中使用的是IPv4InterfaceStatistics类中的BytesReceived属性和BytesSent属性实现的,但是在这个程序集里没有对应的IPv6类,恍恍惚惚。

  然后呢,我就下意识以为这个程序集比较老旧,不支持IPv6统计信息读取,然后也是各种搜索无果,之后呢不死心想再来研究研究,东点点西瞅瞅,然后在NetworkInterface类中发现了一个GetIPStatistics()方法,它的描述是“获取此 NetworkInterface实例的 IP 统计信息。”。

  然后就顺理成章的事了,根据GetIPStatistics()返回的IPInterfaceStatistics实例中的BytesReceived属性和BytesSent属性就能获取到收发的数据总量,然后根据这个信息就能计算出大约的网速。

  经测试,利用IPInterfaceStatistics实例是能读取到IPv4和IPv6的总数据量的,因为这次的需求就是监测总量,如果需要单独监测IPv6的可以用总量减去IPv4部分。

4、后记

​  老师以前喊我认真念书,我心想有百度还不够吗,再念能有百度聪明,有百度懂得多,后来渐渐明白,百度懂得多都是前辈的搬砖添瓦来的,共勉。

参考资料

  System.Net.NetworkInformation 命名空间

以上就是C#监测IPv4v6网速及流量的实例代码的详细内容,更多关于C#监测IPv4v6网速及流量的资料请关注我们其它相关文章!

(0)

相关推荐

  • C# ping网络IP 实现网络状态检测的方法

    C# ping网络IP 实现网络状态检测的方法 public string GetHostNameByIp(string ip)  {  ip = ip.Trim();  if (ip == string.Empty)  return string.Empty;  try  {  // 是否 Ping 的通  if (this.Ping(ip))  {  System.Net.IPHostEntry host = System.Net.Dns.GetHostEntry(ip);  return 

  • C#检测上传文件真正类型的方法

    本文实例讲述了C#检测上传文件真正类型的方法.分享给大家供大家参考.具体分析如下: 对于用户上传的文件如果只是根据扩展名判断,很容易上传上来可执行文件,这是非常危险的,这段代码可以在服务器端检测上传文件的真实类型. <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xh

  • C#如何检测操作系统版本

    本文实例为大家分享了C#检测操作系统版本的方法,供大家参考,具体内容如下 我们通过System.Environment.OSVersion.Version获得操作系统的版本号,然后再根据版本号进行判断操作系统是什么版本. Version 类的属性 参考于:https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms724834(v=vs.85).aspx 注意:在msdn官方文档有说明 → OSVersion 属性报告两个相同的版本号 (

  • C#图像处理之边缘检测(Sobel)的方法

    本文实例讲述了C#图像处理之边缘检测(Sobel)的方法.分享给大家供大家参考.具体如下: //定义sobel算子函数 private static Bitmap sobel(Bitmap a) { int w = a.Width; int h = a.Height; try { Bitmap dstBitmap = new Bitmap(w, h, System.Drawing.Imaging.PixelFormat.Format24bppRgb); System.Drawing.Imagin

  • C#图像处理之边缘检测(Smoothed)的方法

    本文实例讲述了C#图像处理之边缘检测(Smoothed)的方法.分享给大家供大家参考.具体如下: //定义smoothed算子边缘检测函数 private static Bitmap smoothed(Bitmap a) { int w = a.Width; int h = a.Height; try { Bitmap dstBitmap = new Bitmap(w, h, System.Drawing.Imaging.PixelFormat.Format24bppRgb); System.D

  • C#检测是否有u盘插入的方法

    本文实例讲述了C#检测是否有u盘插入的方法.分享给大家供大家参考.具体如下: 该C#代码可监控是否有u盘插入,同时可以监控其它驱动器的变化 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Ru

  • C#调用百度API实现活体检测的方法

    前言 活体检测有多种情形,本文所指:从摄像头获取的影像中判断是活体,还是使用了相片等静态图片. 场景描述 用户个人信息中上传了近照,当用户经过摄像头时进行身份识别. 此时,如果单纯的使用摄像头获取的影像进行人脸相似度比对,则举一张合适的相片对准摄像头也是可以通过的.于是检测摄像头前影像是否为活体的需求就产生了. 解决方案 使用百度AI开放平台,它免费开放一定并发量的该场景活体检测 API: https://ai.baidu.com/tech/face/faceliveness 第一步,申请百度应

  • c#检测文本文件编码的方法

    C#如何检测文本文件的编码,本文为大家分享了示例代码,具体内容如下 using System; using System.Text; using System.Text.RegularExpressions; using System.IO; namespace KlerksSoft { public static class TextFileEncodingDetector { /* * Simple class to handle text file encoding woes (in a

  • C#检测移动硬盘并获取移动硬盘盘符的方法

    网上找了很久关于C#检测移动硬盘并获取盘符的代码但没能找到,所以只能自己解决了 C#获取所有硬盘 var arr = DriveInfo.GetDrives(); 得出的所有磁盘,发现对于移动硬盘,DriveType 不是 Removable 类型,而是 Fixed 枚举类型. C#检测移动硬盘,网上找了很久,没有现成正确的代码,只有自己想办法了. 代码如下: public static List<string> GetListDisk() { List<string> lstDi

  • C#监测IPv4v6网速及流量的实例代码

    1.前言   最近做项目需要用到监测网速及流量,我经过百度和墙内谷歌都没能快速发现监测IPV6流量和网速的用例:也经过自己的一番查询和调试,浪费了不少时间,现在作为经验分享出来希望大家指正. 2.C#代码 using System.Net.NetworkInformation; using System.Timers; namespace Monitor { public class MonitorNetwork { public string UpSpeed { get; set; } pub

  • linux之如何查看进程占用网速和流量使用情况

    目录 一.vnstat使用,查看接口统计报告 二.iftop使用,检查带宽使用情况 三.nethogs使用,按进程实时统计网络带宽利用率(推荐) 总结 有三个命令vnstat.iftop.nethogs(推荐) 都需要额外安装软件 使用yum或apt-get 一.vnstat使用,查看接口统计报告 vnstat -i eth0 -l #实时流量情况 还有其他命令使用--help查看 ctrl+c结束后,会显示监控期间的流量统计结果 二.iftop使用,检查带宽使用情况 iftop可以用来监控网卡

  • Android项目实战教程之高仿网易云音乐启动页实例代码

    前言 本文主要给大家介绍了关于Android高仿网易云音乐启动页的相关内容,这一节我们来讲解启动界面,效果如下: 首次创建一个SplashActivity用来做启动界面,因为创建完项目默认是MainActivity做主界面,所以需要去掉,将启动配置到同时去掉SplashActivity,并且去掉SplashActivity的标题栏,同时还要设置为全屏. Activity启动配置 在清单文件将启动配置剪贴到SplashActivity: <activity android:name=".ac

  • js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码

    实例一.比较简单粗暴缺少点类型判断 <script type="text/javascript"> var sUserAgent = navigator.userAgent.toLowerCase(); var bIsIpad = sUserAgent.match(/ipad/i) == "ipad"; var bIsIphoneOs = sUserAgent.match(/iphone os/i) == "iphone os"; v

  • 解析导致局域网网速变慢的五大真凶

    对于网管来说,局域网网速变慢是最麻烦的事之一了.如果是网络不通,反而能够快速地找到原因,但如果网络是通的,但网速变慢,这就最令人头痛.初次面对这类"软"故障时,往往有的人会束手无策.本文为大家介绍引起此类"软"故障常见的原因及排除方法,以提高大家对实际问题的处理能力. 一.网线问题导致网速变慢 我们知道,双绞线是由四对线按严格的规定紧密地绞和在一起的,用来减少串扰和背景噪音的影响.同时,在T568A标准和T568B标准中仅使用了双绞线的1.2和3.6四条线,其中,1

  • python百行代码自制电脑端网速悬浮窗的实现

    前言 看到某60的网速悬浮球有点心动,但是又不想装这个流氓软件,就自己用python加PyQt5自制了一个,实测还行,关键不占用电脑一点资源,已将软件打包,可自行下载使用. 预览 观看直播时实时网速. 文件结构 运行管理 开始运行时内存消耗18.3m,cpu,磁盘,网络不占用. 运行一天后内存稳定于6.4m,cpu,磁盘,网络不占用. 整体思路 使用psuti.net_io_counters 监控电脑网卡IO 将流量数据格式化,统计每次数据总和保存在本地<流量使用情况.txt>(这个是个缺陷,

  • Android 获取实时网速实现详解

    目录 正文 TrafficStats简介 实现获取网速 实时网速 正文 最近接到个需求,需要计算WebView加载网页时的网速.查询了一下,Android没有提供直接获取网速的Api,但是提供了获取流量的类TrafficStats.本文介绍如何使用Trafficstats来实现获取网速功能. TrafficStats简介 TrafficStats提供了一些获取设备从本次开机到目前为止传输/接收的流量的接口,如下: 方法 参数 说明 getTotalTxBytes - 获取设备本次开机到目前为止,

  • js简单网速测试方法完整实例

    本文实例讲述了js简单网速测试方法.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title> New Document </title> <m

  • Linux上下行网速测试工具_speedtest-cli安装使用方法

    speedtest-cli是Linux下的一个上下行网速测试工具,是一个用Python写的命令行脚本. 电脑测试网速这个功能估计大家都用过,但是服务器需要测试外网的速度相比大家做法各有不同,有的人使用自己的服务器来测试上下行速度,有些通过下载某个网站的资源来测试下行速度,鉴于这些节点比较少,而且测试麻烦,我向大家推荐speedtest-cli. speedtest是一个使用python编写的命令行脚本,通过调用speedtest.net测试上下行的接口来完成速度测试.最后我会测试运维生存时间所在

  • 如何用JavaScipt测网速

    前言 事情是这样的,最近尝试写一个通过判断当前网速,从而在前端控制范围请求去分步请求一个大型文件的库.这个东东我现在一行代码都还没写,除了突然发现这个需求的思路有些不太实际之外,另一个原因是我突然问自己--前端要怎么判断网速啊?? ? ! 前端判断网速的原理总结 (注:下面求的网速单位默认为KB/S)通过查阅相关资料,我发现思路主要是分为以下几种: 1.通过img加载或者发起Ajax请求计算网速 通过请求一个和服务端同域的文件,例如图片等,在前端开始请求和收到响应两个时间点分别通过Date.no

随机推荐