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

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

? 每台计算机进行网线通讯,都要借助一个硬件设备,网卡,简称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'));
        }

总结

要学会调试程序

通过断点调试解决问题。

学会查官方文档

官方写的很清楚

原文地址:https://www.cnblogs.com/delongzhang/p/12425766.html

时间: 2024-07-29 22:59:40

网卡信息检测与网络流量检测的相关文章

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

网络适配器: 又称网卡或网络接口卡(NIC),是连接计算机与网络的硬件设备. 整理计算机上发往网线上的数据,并将数据分解为适当大小的数据包之后向网络上发送. System.Net.NetworkInformation命名空间提供了: 对本机网卡相关信息的检测比如本机有多少网卡,网卡名称.速度.硬件地址等. 对本机网络流量的检测比如网络连接配置.接收与发送的数据包等. Ping类检测本机是否可访问网络上的其它计算机. NetworkInterface类 提供了网络适配器的配置和统计信息.可以利用这

网络异常检测

网络异常检查 2 作者 CppLive | 发表于 2012-02-17 文章分类 : C语言, Linux, Windows, 应用与编程, 网络 标签: Android, iPhone, Linux, Windows, 套接字, 路由 一.本文目的 在涉及网络编程的实际项目应用中,由于网络不可能一直处于理想状态,TCP长连接也可能随时正常或异常地断开,如果不予处理,那么就可能因此而给程序带来很多潜在的问题. 编写该文档的目的就在于针对网络程序中可能遇到的各种问题,拿出来与大家探讨一下具体问题

KDD Cup 99网络入侵检测数据的分析

看论文 该数据集是从一个模拟的美国空军局域网上采集来的 9 个星期的网络连接数据, 分成具有标识的训练数据和未加标识的测试数据.测试数据和训练数据有着不同的概率分布, 测试数据包含了一些未出现在训练数据中的攻击类型, 这使得入侵检测更具有现实性. 在训练集中包含了1种正常的标识类型 normal 和 22种训练攻击类型. 1.KDDCup99入侵检测实验数据的标识类型 标识类型 含义 具体分类标识 Normal 正常记录 normal DOS 拒绝服务攻击 back, land, neptune

网络入侵检测

netstat -anlp | grep 80 | grep tcp | awk '{print $5}' | awk -F: '{print $1}' |sort | uniq -c | sort -nr | head -n20 netstat -ant | awk '/:80/{split($5,ip,":");++A[ip[1]]} END {for(i in A) print A[i],i}'  | sort -rn | head -n 20 tcpdump -i eth0 -

网络超时检测的三种方法

作者:于老师,华清远见嵌入式学院讲师. 网络通信中,很多操作会使得进程阻塞,这时我们要设定时间,到时间后强制返回,避免进程在没有数据的情况下无限阻塞 这里我们总结一下网络超时检测的三种方法: 通过setsockopt设置套接字属性SO_RCVTIMEO struct timeval t = {5, 0}           if  (setsockopt(listenfd, SOL_SOCKET, SO_RCVTIMEO, &t, sizeof(t)) == -1) {             

性能调优之网络速度检测

Esri提供了一个使用简单的网络速度检测应用,能检测两台电脑直接进行数据包传输的平均速率.可以用于检测以下类似问题: 为何本地电脑ArcMap访问共享文件夹上的数据时特别慢. 为何ArcGIS Server使用共享文件夹上的数据进行服务发布时,服务响应特别慢. 该应用是一个使用JavaScript编写的应用,只需要部署在支持HTML的Web服务器上即可. 笔者使用了以下环境来部署: Tomcat 7 Windows Server 2008 部署完后,访问服务器Tomcat的应用地址(例如:192

深度学习之目标检测常用算法原理+实践精讲 YOLO / Faster RCNN / SSD / 文本检测 / 多任务网络

深度学习之目标检测常用算法原理+实践精讲 YOLO / Faster RCNN / SSD / 文本检测 / 多任务网络 资源获取链接:点击这里 第1章 课程介绍 本章节主要介绍课程的主要内容.核心知识点.课程涉及到的应用案例.深度学习算法设计通用流程.适应人群.学习本门课程的前置条件.学习后达到的效果等,帮助大家从整体上了解本门课程的整体脉络. 1-1 课程导学 第2章 目标检测算法基础介绍 本章节主要介绍目标检测算法的基本概念.传统的目标检测算法.目前深度学习目标检测主流方法(one-sta

五大免费企业网络入侵检测工具(IDS)

Snort一直都是网络入侵检测(IDS)和入侵防御工具(IPS)的领导者,并且,随着开源社区的持续发展,为其母公司Sourcefire(多年来,Sourcefire提供有供应商支持和即时更新的功能齐全的商业版本Snort,同时仍然免费提供功能有限的免费版本Snort)持续不断的支持,Snort很可能会继续保持其领导地位. 虽然Snort"称霸"这个市场,但也有其他供应商提供类似的免费工具.很多这些入侵检测系统(IDS)供应商(即使不是大多数)结合Snort或其他开源软件的引擎来创建强大

实现网络连通检测的五种方法

方法一: windows下调用icmp.dll库,实现ping连通检测,缺点是不能跨平台,受限于icmp.dll库: // windows下调用icmp.dll库实现网络连通检测示例代码 #include <Winsock2.h> #include <iphlpapi.h> #include <stdio.h> #pragma comment(lib,"Iphlpapi.lib") #pragma comment(lib,"Ws2_32.l