• NetStatTool


    
    //---------------------------------------------------------------------
    //  This file is part of the Microsoft .NET Framework SDK Code Samples.
    // 
    //  Copyright (C) Microsoft Corporation.  All rights reserved.
    // 
    //This source code is intended only as a supplement to Microsoft
    //Development Tools and/or on-line documentation.  See these other
    //materials for detailed information regarding Microsoft code samples.
    // 
    //THIS CODE AND INFORMATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY
    //KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
    //IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
    //PARTICULAR PURPOSE.
    //---------------------------------------------------------------------
    namespace Microsoft.Samples.NetStatTool
    {
        using System;
        using System.Net;
        using System.Net.Sockets;
        using System.Net.NetworkInformation;
        using System.Globalization;
        [Flags]
        public enum ProtocolTypes
        {
            None = 0x0000,
            Tcp = 0x0001,
            Udp = 0x0002,
            TcpV6 = 0x0004,
            UdpV6 = 0x0008,
            IP = 0x0010,
            IPv6 = 0x0020,
            Icmp = 0x0040,
            IcmpV6 = 0x0080
        }
        static class NetStatTool
        {
            private static bool showNumeric;
            private static bool showListening;
            private static bool showProtocolStatistics;
            private static bool showInterfaceStatistics;
            private static int interval = -1;
            private static ProtocolTypes selectedProtocols = ProtocolTypes.None;
            private const string connectionFormatString =
                "\t{0,-12}{1, -16}{2, -28}{3}";
            private const string equalsFormatString =
                "\t{0, -32} = {1}";
            private const string sendReceiveFormatString =
                "\t{0, -32}{1, -16}{2}";
            private const string errorFormatString =
                "\tStatistics not available for {0}: {1}";
            static void Main(string[] args)
            {
                if (ParseArguments(args))
                {
                    while (true)
                    {
                        if (showInterfaceStatistics)
                            DisplayInterfaceStatistics();
                        if (showProtocolStatistics)
                            DisplayProtocolStatistics();
                        if (!showInterfaceStatistics && !showProtocolStatistics)
                            DisplayConnections();
                        if (interval <= 0)
                            break;
                        else
                            System.Threading.Thread.Sleep(interval * 1000);
                    }
                }
                else
                {
                    Usage();
                    System.Environment.Exit(0);
                }
            }
            // Helper function display the all possible command line options and 
            // their purpose for this tool.
            private static void Usage()
            {
                Console.WriteLine();
                Console.WriteLine("NETSTATTOOL [-?] [-a] [-e] [-n] [-s] [-p protocol] [interval]");
                Console.WriteLine();
                Console.WriteLine("(default)     Displays open connection information.");
                Console.WriteLine("-?            Displays this help message.");
                Console.WriteLine("-e            Displays NIC statistics. May be combined with -s.");
                Console.WriteLine("-s            Displays per-protocol statistics.  By default, statistics are");
                Console.WriteLine("                  shown for TCP.  The -p and -a options may be used to specify");
                Console.WriteLine("                  other protocols to display.");
                Console.WriteLine("-p protocol   Display information for the protocol specified.");
                Console.WriteLine("                  May be any of: IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP,");
                Console.WriteLine("                  or UDPv6TCP.  Connections can only be shown for TCP,");
                Console.WriteLine("                  UDP, TCPv6, or UDPv6.");
                Console.WriteLine("-a            Display information for all protocals.");
                Console.WriteLine("-n            Displays addresses and port numbers in numerical form.");
                Console.WriteLine("interval      Redisplays selected statistics, pausing interval seconds");
                Console.WriteLine("                  between each display.  Press CTRL+C to stop.");
            }
            // Parse the command line arguments and set appropriate properties as 
            // per requested user options.
            private static bool ParseArguments(string[] args)
            {
                for (int i = 0; i < args.Length; i++)
                {
                    string arg = args[i].ToLower(CultureInfo.CurrentCulture);
                    if (arg.Length < 2 || (arg[0] != '/' && arg[0] != '-'))
                    {
                        try
                        {
                            interval =
                                Convert.ToInt32(arg, NumberFormatInfo.CurrentInfo);
                        }
                        catch (FormatException)
                        {
                            return false;
                        }
                        catch (OverflowException)
                        {
                            return false;
                        }
                    }
                    else
                    {
                        switch (arg[1])
                        {
                            // Just display the help message
                            case '?': 
                                return false;
                            case 'n':
                                showNumeric = true;
                                break;
                            case 'e':
                                showInterfaceStatistics = true;
                                break;
                            case 'a':
                                selectedProtocols =
                                    ProtocolTypes.Tcp | ProtocolTypes.Udp |
                                    ProtocolTypes.IP | ProtocolTypes.Icmp |
                                    ProtocolTypes.TcpV6 | ProtocolTypes.UdpV6 |
                                    ProtocolTypes.IPv6 | ProtocolTypes.IcmpV6;
                                showListening = true;
                                break;
                            case 's':
                                showProtocolStatistics = true;
                                break;
                            case 'p':
                                if (args.Length < i + 1)
                                {
                                    return false; // invalid parameters
                                }
                                else
                                {
                                    i++;
                                    AddSelectedProtocol(
                                        args[i].ToLower(
                                        CultureInfo.CurrentCulture));
                                }
                                break;
                            default:
                                return false;
                        }
                    }
                }
                if (selectedProtocols == ProtocolTypes.None)
                {
                    // User wants Tcp as default.
                    selectedProtocols = selectedProtocols | ProtocolTypes.Tcp;
                }
                return true;
            }
            // Get the display string for localIPEndPoint, either numric or full
            // name format.
            private static String GetLocalAddressAsString(IPEndPoint ipe)
            {
                string displayString = ipe.ToString();
                if (!showNumeric)
                {
                    displayString =
                        Dns.GetHostName() + ":" + GetPortNameMapping(ipe.Port);
                }
                return displayString;
            }
            // Get the display string for Remote IPEndPoint, either numric or full 
            // name format.
            private static String GetRemoteAddressAsString(IPEndPoint ipe)
            {
                string displayString = ipe.ToString();
                if (!showNumeric)
                {
                    try
                    {
                        displayString =
                            Dns.GetHostEntry(ipe.Address).HostName + ":" +
                            GetPortNameMapping(ipe.Port);
                    }
                    catch (SocketException)
                    {
                    }
                }
                return displayString;
            }
            private static void AddSelectedProtocol(string protocol)
            {
                switch (protocol)
                {
                    case "tcp":
                        selectedProtocols = selectedProtocols | ProtocolTypes.Tcp;
                        break;
                    case "udp":
                        selectedProtocols = selectedProtocols | ProtocolTypes.Udp;
                        break;
                    case "ip":
                        selectedProtocols = selectedProtocols | ProtocolTypes.IP;
                        break;
                    case "icmp":
                        selectedProtocols = selectedProtocols | ProtocolTypes.Icmp;
                        break;
                    case "tcpv6":
                        selectedProtocols =
                            selectedProtocols | ProtocolTypes.TcpV6;
                        break;
                    case "udpv6":
                        selectedProtocols =
                            selectedProtocols | ProtocolTypes.UdpV6;
                        break;
                    case "ipv6":
                        selectedProtocols = selectedProtocols | ProtocolTypes.IPv6;
                        break;
                    case "icmpv6":
                        selectedProtocols =
                            selectedProtocols | ProtocolTypes.IcmpV6;
                        break;
                }
            }
            // Return the displaystring for known protocol ports
            private static string GetPortNameMapping(int Port)
            {
                string Portname = Port.ToString(NumberFormatInfo.CurrentInfo);
                switch (Port)
                {
                    case 21:
                        Portname = "ftp";
                        break;
                    case 25:
                        Portname = "smtp";
                        break;
                    case 80:
                        Portname = "http";
                        break;
                    case 135:
                        Portname = "epmap";
                        break;
                    case 137:
                        Portname = "netbios-ns";
                        break;
                    case 138:
                        Portname = "netbios-dgm";
                        break;
                    case 139:
                        Portname = "netbios-ssn";
                        break;
                    case 443:
                        Portname = "ssl";
                        break;
                    case 445:
                        Portname = "microsoft-ds";
                        break;
                    case 500:
                        Portname = "isakmp";
                        break;
                }
                return Portname;
            }
            private static string GetProtocolString(ProtocolTypes type)
            {
                switch (type)
                {
                    case ProtocolTypes.Icmp: return "ICMP";
                    case ProtocolTypes.IcmpV6: return "ICMP V6";
                    case ProtocolTypes.IP: return "IP";
                    case ProtocolTypes.IPv6: return "IP V6";
                    case ProtocolTypes.Tcp: return "TCP";
                    case ProtocolTypes.TcpV6: return "TCP V6";
                    case ProtocolTypes.Udp: return "UDP";
                    case ProtocolTypes.UdpV6: return "UDP V6";
                    default: return "Unknown";
                }
            }
            // Display the list of connections on console.
            private static void DisplayConnections()
            {
                IPGlobalProperties ipGlobal =
                    IPGlobalProperties.GetIPGlobalProperties();
                Console.WriteLine();
                Console.WriteLine("Connections");
                Console.WriteLine(
                    connectionFormatString, "Protocol", "State", "Local", "Remote");
                if ((selectedProtocols & ProtocolTypes.Tcp) == ProtocolTypes.Tcp)
                {
                    TcpConnectionInformation[] tcpInfoList =
                        ipGlobal.GetActiveTcpConnections();
                    foreach (TcpConnectionInformation tcpInfo in tcpInfoList)
                    {
                        if (tcpInfo.State == TcpState.Listen && !showListening)
                        {
                            // Skip listening port unless user requested all.
                            continue;
                        }
                        else
                        {
                            Console.WriteLine(
                                connectionFormatString,
                                "TCP",
                                tcpInfo.State,
                                GetLocalAddressAsString(tcpInfo.LocalEndPoint),
                                GetRemoteAddressAsString(tcpInfo.RemoteEndPoint));
                        }
                    }
                }
                if ((selectedProtocols & ProtocolTypes.Udp) == ProtocolTypes.Udp)
                {
                    IPEndPoint[] udpInfoList = ipGlobal.GetActiveUdpListeners();
                    foreach (IPEndPoint udpInfo in udpInfoList)
                    {
                        Console.WriteLine(
                            connectionFormatString,
                            "UDP",
                            "(None)",
                            GetLocalAddressAsString(udpInfo),
                            "*:*");
                    }
                }
            }
            // Display the interface statisitics of all interfaces on console.
            private static void DisplayInterfaceStatistics()
            {
                NetworkInterface[] networkInterfaceList =
                    NetworkInterface.GetAllNetworkInterfaces();
                Console.WriteLine();
                Console.WriteLine("Interface Statistics");
                foreach (NetworkInterface nic in networkInterfaceList)
                {
                    IPv4InterfaceStatistics interfaceStatistics =
                        nic.GetIPv4Statistics();
                    Console.WriteLine(
                        sendReceiveFormatString, nic.Name, "Received", "Sent");
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Bytes",
                        interfaceStatistics.BytesReceived,
                        interfaceStatistics.BytesSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Unicast packets",
                        interfaceStatistics.UnicastPacketsReceived,
                        interfaceStatistics.UnicastPacketsSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Non-unicast packets",
                        interfaceStatistics.NonUnicastPacketsReceived,
                        interfaceStatistics.NonUnicastPacketsSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Discards",
                        interfaceStatistics.IncomingPacketsDiscarded,
                        interfaceStatistics.OutgoingPacketsDiscarded);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Errors",
                        interfaceStatistics.IncomingPacketsWithErrors,
                        interfaceStatistics.OutgoingPacketsWithErrors);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Unknown protocols",
                        interfaceStatistics.IncomingUnknownProtocolPackets,
                        "");
                    Console.WriteLine();
                }
            }
            // Display the protocol statisitics of requested protocols.
            private static void DisplayProtocolStatistics()
            {
                IPGlobalProperties ipGlobal =
                    IPGlobalProperties.GetIPGlobalProperties();
                if ((selectedProtocols & ProtocolTypes.IP) ==
                    ProtocolTypes.IP)
                    DisplayIPv4Statistics(ipGlobal);
                if ((selectedProtocols & ProtocolTypes.Tcp) ==
                    ProtocolTypes.Tcp)
                    DisplayTcpV4Statistics(ipGlobal);
                if ((selectedProtocols & ProtocolTypes.Udp) ==
                    ProtocolTypes.Udp)
                    DisplayUdpV4Statistics(ipGlobal);
                if ((selectedProtocols & ProtocolTypes.Icmp) ==
                    ProtocolTypes.Icmp)
                    DisplayIcmpV4Statistics(ipGlobal);
                if ((selectedProtocols & ProtocolTypes.UdpV6) ==
                    ProtocolTypes.UdpV6)
                    DisplayUdpV6Statistics(ipGlobal);
                if ((selectedProtocols & ProtocolTypes.TcpV6) ==
                    ProtocolTypes.TcpV6)
                    DisplayTcpV6Statistics(ipGlobal);
                if ((selectedProtocols & ProtocolTypes.IPv6) ==
                    ProtocolTypes.IPv6)
                    DisplayIPv6Statistics(ipGlobal);
                if ((selectedProtocols & ProtocolTypes.IcmpV6) ==
                    ProtocolTypes.IcmpV6)
                    DisplayIcmpV6Statistics(ipGlobal);
            }
    
            // Display the data for given IcmpV4Statistics object.
            private static void DisplayIcmpV4Statistics(
                IPGlobalProperties ipGlobal)
            {
                string protocol = GetProtocolString(ProtocolTypes.Icmp);
                Console.WriteLine();
                Console.WriteLine("{0} Statistics", protocol);
                try
                {
                    IcmpV4Statistics icmpStat = ipGlobal.GetIcmpV4Statistics();
                    Console.WriteLine(sendReceiveFormatString, "", "Received", "Sent");
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Messages",
                        icmpStat.MessagesReceived,
                        icmpStat.MessagesSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Errors",
                        icmpStat.ErrorsReceived,
                        icmpStat.ErrorsSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Destination Unreachable",
                        icmpStat.DestinationUnreachableMessagesReceived,
                        icmpStat.DestinationUnreachableMessagesSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Time Exceeded",
                        icmpStat.TimeExceededMessagesReceived,
                        icmpStat.TimeExceededMessagesSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Parameter Problems",
                        icmpStat.ParameterProblemsReceived,
                        icmpStat.ParameterProblemsSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Source Quenches",
                        icmpStat.SourceQuenchesReceived,
                        icmpStat.SourceQuenchesSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Redirects",
                        icmpStat.RedirectsReceived,
                        icmpStat.RedirectsSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Echos",
                        icmpStat.EchoRequestsReceived,
                        icmpStat.EchoRequestsSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Echo Replies",
                        icmpStat.EchoRepliesReceived,
                        icmpStat.EchoRepliesSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Timestamps",
                        icmpStat.TimestampRequestsReceived,
                        icmpStat.TimestampRequestsSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Timestamp Replies",
                        icmpStat.TimestampRepliesReceived,
                        icmpStat.TimestampRepliesSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Address Masks",
                        icmpStat.AddressMaskRequestsReceived,
                        icmpStat.AddressMaskRequestsSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Address Mask Replies",
                        icmpStat.AddressMaskRepliesReceived,
                        icmpStat.AddressMaskRepliesSent);
                }
                catch (NetworkInformationException ex)
                {
                    Console.WriteLine(errorFormatString, protocol, ex.Message);
                }
            }
            // Display the data for given IcmpV6Statistics object.
            private static void DisplayIcmpV6Statistics(
                IPGlobalProperties ipGlobal)
            {
                string protocol = GetProtocolString(ProtocolTypes.IcmpV6);
                Console.WriteLine();
                Console.WriteLine("{0} Statistics", protocol);
                try
                {
                    IcmpV6Statistics icmpStat = ipGlobal.GetIcmpV6Statistics();
                    Console.WriteLine(sendReceiveFormatString, "", "Received", "Sent");
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Messages",
                        icmpStat.MessagesReceived,
                        icmpStat.MessagesSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Errors",
                        icmpStat.ErrorsReceived,
                        icmpStat.ErrorsSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Destination Unreachable",
                        icmpStat.DestinationUnreachableMessagesReceived,
                        icmpStat.DestinationUnreachableMessagesSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Time Exceeded",
                        icmpStat.TimeExceededMessagesReceived,
                        icmpStat.TimeExceededMessagesSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Parameter Problems",
                        icmpStat.ParameterProblemsReceived,
                        icmpStat.ParameterProblemsSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Redirects",
                        icmpStat.RedirectsReceived,
                        icmpStat.RedirectsSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Echos",
                        icmpStat.EchoRepliesReceived,
                        icmpStat.EchoRepliesSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Echo Replies",
                        icmpStat.EchoRepliesReceived,
                        icmpStat.EchoRepliesSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Membership Queries",
                        icmpStat.MembershipQueriesReceived,
                        icmpStat.MembershipQueriesSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Membership Reductios",
                        icmpStat.MembershipReductionsReceived,
                        icmpStat.MembershipReductionsSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Membership Reports",
                        icmpStat.MembershipReportsReceived,
                        icmpStat.MembershipReportsSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Neighbour Advertisements",
                        icmpStat.NeighborAdvertisementsReceived,
                        icmpStat.NeighborAdvertisementsSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Neighbour Solicit",
                        icmpStat.NeighborSolicitsReceived,
                        icmpStat.NeighborSolicitsSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Packets Too Large",
                        icmpStat.PacketTooBigMessagesReceived,
                        icmpStat.PacketTooBigMessagesSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Redirects",
                        icmpStat.RedirectsReceived,
                        icmpStat.RedirectsSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Router Advertisements",
                        icmpStat.RouterAdvertisementsReceived,
                        icmpStat.RouterAdvertisementsSent);
                    Console.WriteLine(
                        sendReceiveFormatString,
                        "Router Solicits",
                        icmpStat.RouterSolicitsReceived,
                        icmpStat.RouterSolicitsSent);
                }
                catch (NetworkInformationException ex)
                {
                    Console.WriteLine(errorFormatString, protocol, ex.Message);
                }
            }
            private static void DisplayUdpV4Statistics(IPGlobalProperties ipGlobal)
            {
                string protocol = GetProtocolString(ProtocolTypes.Udp);
                Console.WriteLine();
                Console.WriteLine("{0} Statistics", protocol);
                try
                {
                    DisplayUdpStatistics(ipGlobal.GetUdpIPv4Statistics());
                }
                catch (NetworkInformationException ex)
                {
                    Console.WriteLine(errorFormatString, protocol, ex.Message);
                }
            }
            private static void DisplayUdpV6Statistics(IPGlobalProperties ipGlobal)
            {
                string protocol = GetProtocolString(ProtocolTypes.UdpV6);
                Console.WriteLine();
                Console.WriteLine("{0} Statistics", protocol);
                try
                {
                    DisplayUdpStatistics(ipGlobal.GetUdpIPv6Statistics());
                }
                catch (NetworkInformationException ex)
                {
                    Console.WriteLine(errorFormatString, protocol, ex.Message);
                }
            }
            // Display the data for given UdpStatistics object.
            private static void DisplayUdpStatistics(UdpStatistics udpStat)
            {
                Console.WriteLine(
                    equalsFormatString,
                    "Datagrams Received",
                    udpStat.DatagramsReceived);
                Console.WriteLine(
                    equalsFormatString,
                    "No Ports",
                    udpStat.IncomingDatagramsDiscarded);
                Console.WriteLine(
                    equalsFormatString,
                    "Receive Errors",
                    udpStat.IncomingDatagramsWithErrors);
                Console.WriteLine(
                    equalsFormatString, "Datagrams Sent", udpStat.DatagramsSent);
            }
            private static void DisplayTcpV4Statistics(IPGlobalProperties ipGlobal)
            {
                string protocol = GetProtocolString(ProtocolTypes.Tcp);
                Console.WriteLine();
                Console.WriteLine("{0} Statistics", protocol);
                try
                {
                    DisplayTcpStatistics(ipGlobal.GetTcpIPv4Statistics());
                }
                catch (NetworkInformationException ex)
                {
                    Console.WriteLine(errorFormatString, protocol, ex.Message);
                }
            }
            private static void DisplayTcpV6Statistics(IPGlobalProperties ipGlobal)
            {
                string protocol = GetProtocolString(ProtocolTypes.TcpV6);
                Console.WriteLine();
                Console.WriteLine("{0} Statistics", protocol);
                try
                {
                    DisplayTcpStatistics(ipGlobal.GetTcpIPv6Statistics());
                }
                catch (NetworkInformationException ex)
                {
                    Console.WriteLine(errorFormatString, protocol, ex.Message);
                }
            }
            // Display the data for given TcpStatistics object.
            private static void DisplayTcpStatistics(TcpStatistics tcpStat)
            {
                Console.WriteLine(
                    equalsFormatString,
                    "Active Opens",
                    tcpStat.ConnectionsInitiated);
                Console.WriteLine(
                    equalsFormatString,
                    "Passive Opens",
                    tcpStat.ConnectionsAccepted);
                Console.WriteLine(
                    equalsFormatString,
                    "Failed Connection Attempts",
                    tcpStat.FailedConnectionAttempts);
                Console.WriteLine(
                    equalsFormatString,
                    "Reset Connections",
                    tcpStat.ResetConnections);
                Console.WriteLine(
                    equalsFormatString,
                    "Current Connections",
                    tcpStat.CurrentConnections);
                Console.WriteLine(
                    equalsFormatString,
                    "Segments Received",
                    tcpStat.SegmentsReceived);
                Console.WriteLine(
                    equalsFormatString,
                    "Segments Sent",
                    tcpStat.SegmentsSent);
                Console.WriteLine(
                    equalsFormatString,
                    "Segments Retransmitted",
                    tcpStat.SegmentsResent);
            }
            private static void DisplayIPv4Statistics(IPGlobalProperties ipGlobal)
            {
                string protocol = GetProtocolString(ProtocolTypes.IP);
                Console.WriteLine();
                Console.WriteLine("{0} Statistics", protocol);
                try
                {
                    DisplayIPStatistics(ipGlobal.GetIPv4GlobalStatistics());
                }
                catch (NetworkInformationException ex)
                {
                    Console.WriteLine(errorFormatString, protocol, ex.Message);
                }
            }
            private static void DisplayIPv6Statistics(IPGlobalProperties ipGlobal)
            {
                string protocol = GetProtocolString(ProtocolTypes.IPv6);
                Console.WriteLine();
                Console.WriteLine("{0} Statistics", protocol);
                try
                {
                    DisplayIPStatistics(ipGlobal.GetIPv6GlobalStatistics());
                }
                catch (NetworkInformationException ex)
                {
                    Console.WriteLine(errorFormatString, protocol, ex.Message);
                }
            }
            // Display the global IP statisitcs for given IPGlobalStatistics 
            // object.
            private static void DisplayIPStatistics(IPGlobalStatistics ipStat)
            {
                Console.WriteLine(
                    equalsFormatString,
                    "Packets Received",
                    ipStat.ReceivedPackets);
                Console.WriteLine(
                    equalsFormatString,
                    "Received Header Errors",
                    ipStat.ReceivedPacketsWithHeadersErrors);
                Console.WriteLine(
                    equalsFormatString,
                    "Received Address Errors",
                    ipStat.ReceivedPacketsWithAddressErrors);
                Console.WriteLine(
                    equalsFormatString,
                    "Datagrams Forwarded",
                    ipStat.ReceivedPacketsForwarded);
                Console.WriteLine(
                    equalsFormatString,
                    "Unknown Protocols Received",
                    ipStat.ReceivedPacketsWithUnknownProtocol);
                Console.WriteLine(
                    equalsFormatString,
                    "Received Packets Discarded",
                    ipStat.ReceivedPacketsDiscarded);
                Console.WriteLine(
                    equalsFormatString,
                    "Received Packets Delivered",
                    ipStat.ReceivedPacketsDelivered);
                Console.WriteLine(
                    equalsFormatString,
                    "Output Requests",
                    ipStat.OutputPacketRequests);
                Console.WriteLine(
                    equalsFormatString,
                    "Routing Discards",
                    ipStat.OutputPacketRoutingDiscards);
                Console.WriteLine(
                    equalsFormatString,
                    "Discarded Output Packets",
                    ipStat.OutputPacketsDiscarded);
                Console.WriteLine(
                    equalsFormatString,
                    "Output Packet No Route",
                    ipStat.OutputPacketsWithNoRoute);
                Console.WriteLine(
                    equalsFormatString,
                    "Reassembly Required",
                    ipStat.PacketReassembliesRequired);
                Console.WriteLine(
                    equalsFormatString,
                    "Reassembly Successful",
                    ipStat.PacketsReassembled);
                Console.WriteLine(
                    equalsFormatString,
                    "Reassembly Failures",
                    ipStat.PacketReassemblyFailures);
                Console.WriteLine(
                    equalsFormatString,
                    "Datagrams Successfuly Fragmented",
                    ipStat.PacketsFragmented);
                Console.WriteLine(
                    equalsFormatString,
                    "Datagrams Failing Fragmentation",
                    ipStat.PacketFragmentFailures);
                Console.WriteLine(
                    equalsFormatString,
                    "Fragments Created",
                    ipStat.PacketsFragmented);
            }
        }
    }
    
    
  • 相关阅读:
    自己学习并保存的一些shell命令
    【Debian学徒记事】 Debian 安装源配置
    第十三周学习总结
    第十二周学习总结
    第十一周学习总结
    第十周CTF解答
    第十周学习总结
    第九周学习总结
    第八周学习总结
    动态规划:最大子串和
  • 原文地址:https://www.cnblogs.com/Microshaoft/p/1553523.html
Copyright © 2020-2023  润新知