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


      网络适配器: 又称网卡或网络接口卡(NIC),是连接计算机与网络的硬件设备。

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

       System.Net.NetworkInformation命名空间提供了:

         对本机网卡相关信息的检测 比如本机有多少网卡,网卡名称、速度、硬件地址等。

        对本机网络流量的检测 比如网络连接配置、接收与发送的数据包等。

         Ping类 检测本机是否可访问网络上的其它计算机。

      NetworkInterface

        提供了网络适配器的配置和统计信息。可以利用这个类检测本机有多少个网络适配器、网络适配器型号以及网络适配器的速度等。

        位于System.Net.NetworkInformation命名空间下,它提供了网络适配器的配置和统计信息。该类可以方便地检测本机有多少个网卡、哪些网络连接可用,并可获取某个

        网卡的型号、MAC地址和速度等信息。

         对于本机的每个网络适配器,该数组中都包含一个NetworkInterface对象与之对应。

         获取实例:不能直接使用new关键字构造该类的实例,而是利用NetworkInterface类提供的静态方法GetAllNetworkInterfaces,得到NetworkInterface类型的数组。

        NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();

        常用的属性和方法 

    属性及方法

    说明

    Name属性

    获取网络适配器的名称

    Speed属性

    获取网络适配器的速度(bit/秒)

    GetAllNetworkInterfaces方法

    返回描述本地计算机上的所有网络适配器对象

    GetIPProperties方法

    回描述此网络适配器配置的对象

    GetIsNetworkAvailable方法

    指示是否有任何可用的网络连接

    GetPhysicalAddress方法

    返回此适配器的媒体访问控制(MAC)地址

    Supports方法

    指示接口是否支持指定的协议(IPv4或IPv6)

      IPInterfaceProperties

        可以利用这个类检测本机所有网络适配器支持的各种地址

        检测本机所有网络适配器支持的各种地址(IPv4和IPv6的网络适配器地址信息),如Dns服务器的IP地址、网关地址以及多路广播地址。

        获取实例:

        NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();

        IPInterfaceProperties adapterProperties = adapters[0].GetIPProperties();

        属性和方法 

        

    属性及方法

    说   明

    AnycastAddresses属性

    获取分配给此接口的任意广播IP地址

    DhcpServerAddresses属性

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

    DnsAddresses属性

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

    DnsSuffix属性

    获取与此接口关联的域名系统(DNS)后缀

    GatewayAddresses属性

    获取此接口的网关地址

    MulticastAddresses属性

    获取分配给此接口的多路广播地址

    UnicastAddresses属性

    获取分配给此接口的单播地址

    GetIPv4Properties方法

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

    GetIPv6Properties方法

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

      PhysicalAddress

         提供了网络适配器的媒体访问控制(MAC)地址。

      IPGlobalProperties

      提供本地计算机网络连接相关的信息。例如网络连接配置、接收与发送的数据包等。

      

      IPGlobalProperties properties = IPGlobalPropeties.GetIPGlobalProperties();
    
      IPGlobalProperties properties = IPGlobalPropeties.GetIPGlobalProperties()
    
      IPGlobalStatistics ipstat = properties.GetIPv4GlobalStatistics();
    
      listBox1.Items.Add("本机所在域 :" + properties.DomainName);
    
      listBox1.Items.Add("接收数据包数 :" + ipstat.ReceivedPackets);
    
      listBox1.Items.Add("转发数据包数 :" + ipstat.ReceivedPacketsForwarded);

      TcpConnectionInformation

       提供有关本地计算机上的传输控制协议(TCP)连接的信息。

      

    IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();
    
       TcpConnectionInformation[] connections = properties.GetActiveTcpConnections();
    
       foreach (TcpConnectionInformation t in connections)
    
      {
    
        string str = ""; str += "Local endpoint:" + t.LocalEndPoint.Address;
    
        str += ",Remote endpoint:" + t.RemoteEndPoint.Address;
    
         str += ", " + t.State; listBox1.Items.Add(str);
       }

      Pring

      可以使用Ping类检测本机是否可访问网络上的其它计算机。

      类似于Ping.exe命令行工具。

      该类提供的Send和SendAsync方法将Internet控制消息协议(ICMP)回送请求消息发送到远程计算机并等待来自该计算机的ICMP回送答复消息。

      与Ping类一起使用的类型有:

      IPStatus枚举:定义描述 ICMP 回送请求消息结果的状态代码

      PingOptions类:控制如何传输 Ping 数据包

      PingReply类:提供有关 Send 或 SendAsync 操作的状态及产生的数据的信息

      Ping类Send方法

      (1)

        public PingReply Send(IPAddress address) 此方法向address参数指定的主机发送一个包含回送消息的32位Byte数据,然后等待应答消息5秒钟。如果在上述时间内没有收到应答,则直接返回,并将PingReply实例的Status属性设置为TimedOut。

      例如:

        Ping pingSender = new Ping ();

        PingReply reply = pingSender.Send ("www.sohu.com");

      Ping类Send方法

      (2)

        public PingReply Send(string hostNameOrAddress,int timeout,byte[] buffer,PingOptions options)

        参数说明:

        hostNameOrAddress表示目标计算机IP地址或者主机名。

        timeout指定发送回送消息后,等待答复消息的最大毫秒数。

        Buffer是一个Byte数组,存放和回送消息一起发送的数据。

        Options是一个PingOptions对象,用于控制如何传输Ping数据包。

        PingOptions类:控制如何传输 Ping 数据包。

        与此类相关的属性有:

        Ttl 属性 为 Ping 类发送的数据包指定生存时间。此值指示在丢弃 Ping 数据包之前可以转发此数据包的路由节点数。

        如果要测试将数据包从源计算机发送到目标计算机所需的转发数(也称为跃点),设置此选项很有用。

        DontFragment 属性 控制是否可将发送到远程主机的数据分成多个数据包。如果要测试用于传输数据包的路由器和网关的最大传输单元 (MTU),此选项很有用。

        PingReply类 调用Ping类的Send方法后,即得到PingReply类的实例,该实例提供有关Send或SendAsync操作的状态以及发送请求和接收答复所用的时间等信息。

        常用属性有

        1. Address属性: 获取发送回送答复消息的主机地址

        2. RoundtripTime属性: 获取发送消息所用的往返时间

        3. Status属性: 获取答复的状态,为IPStatus枚举类型。如果值为IPStatus.Success则代表Send方法执行成功

    //远程服务器IP
                string ipString = "192.168.1.72";
                //构造Ping实例
                Ping pingSender = new Ping();
                //Ping选项设置
                PingOptions options = new PingOptions();
                options.DontFragment = true;
                //测试数据
                string data = "test data abcabc";
                byte[] buffer = Encoding.ASCII.GetBytes(data);
                //设置超时时间
                int timeout = 120;
                //调用同步send方法发送数据,将返回结果保存至PingReply实例
                PingReply reply = pingSender.Send(ipString, timeout, buffer, options);
                if (reply.Status == IPStatus.Success)
                {
                    Console.WriteLine("答复的主机地址: " + reply.Address.ToString());
                    Console.WriteLine("往返时间: " + reply.RoundtripTime);
                    Console.WriteLine("生存时间(TTL): " + reply.Options.Ttl);
                    Console.WriteLine("是否控制数据包的分段: " + reply.Options.DontFragment);
                    Console.WriteLine("缓冲区大小: " + reply.Buffer.Length);
                }
                else
                {
                    Console.WriteLine(reply.Status.ToString());
                }
  • 相关阅读:
    POJ 2456 Aggressive cows (二分)
    ACM北大暑期课培训第二天
    ACM北大暑期课培训第一天
    Rust Lang Book Ch.14 Crates.io
    Rust Lang Book Ch.13 Iterators, Closures
    Rust Lang Book Ch.12 An I/O Project: Building a Command Line Program
    Rust Lang Book Ch.11 Automated Tests
    Rust Lang Book Ch.10 Generic Types, Traits. and Lifetimes
    Rust Lang Book Ch.9 Error Handling
    HDU-2087-KMP-水题
  • 原文地址:https://www.cnblogs.com/xchit/p/socket_5.html
Copyright © 2020-2023  润新知