Выводимые результаты сильно зависят от того, в какой системе действует испытуемый компьютер. В системе со сложной конфигурацией на экран будет выведено довольно много данных. Если так, то стоит подумать о частичном выводе данных или разработке Windows-приложения, в котором информация будет отражаться в нескольких списках (элементах типа ListView).
Теперь добавим вывод реальной статистики, полученной с помощью объекта класса IPGlobalStatistics и его метода GetIPv4GlobalStatistics. Информация проходит через адаптер в двух направлениях, некоторые пакеты фрагментированы и нуждаются в процедуре восстановления (Reassembly), поэтому все статистические данные разделены на 4 группы (общие данные, данные о входящих пакетах, выходящих и фрагментированных пакетах).
Следующий код надо вставить в конец цикла прохода по адаптерам и использовать совместно с кодом, прозванивающим сервер, иначе (если нет подключения к Internet) статистика, может оказаться нулевой. Здесь используется ссылка p на объект класса IPGlobalProperties, которая была получена ранее.
IPGlobalStatistics st = p.GetIPv4GlobalStatistics();
Console.WriteLine("\n Statistics\n " + line.Substring(1, 10) +
"\n{0,-28}: {1}\n{2,-28}: {3}\n{4,-28}: {5}\n{6,-28}: {7}\n",
" Interfaces", st.NumberOfInterfaces,
" IP addresses", st.NumberOfIPAddresses,
" Routes", st.NumberOfRoutes,
" Default TTL", st.DefaultTtl);
Console.WriteLine(" Inbound Packet Data:\n " + line.Substring(1, 20) +
"\n{0,-28}: {1}\n{2,-28}: {3}\n{4,-28}: {5}\n" +
"{6,-28}: {7}\n{8,-28}: {9}\n{10,-28}: {11}\n{12,-28}: {13}\n",
"\tReceived", st.ReceivedPackets,
"\tForwarded", st.ReceivedPacketsForwarded,
"\tDelivered", st.ReceivedPacketsDelivered,
"\tDiscarded", st.ReceivedPacketsDiscarded,
"\tHeader Errors", st.ReceivedPacketsWithHeadersErrors,
"\tAddress Errors", st.ReceivedPacketsWithAddressErrors,
"\tUnknown Protocol Errors", st.ReceivedPacketsWithUnknownProtocol);
Console.WriteLine(" Outbound Packet Data:\n " + line.Substring(1, 21) +
"\n{0,-28}: {1}\n{2,-28}: {3}\n{4,-28}: {5}\n{6,-28}: {7}\n",
"\tRequested", st.OutputPacketRequests,
"\tDiscarded", st.OutputPacketsDiscarded,
"\tNo Routing Discards", st.OutputPacketsWithNoRoute,
"\tRouting Entry Discards", st.OutputPacketRoutingDiscards);
Console.WriteLine(" Reassembly Data:\n " + line.Substring(1, 16) +
"\n{0,-28}: {1}\n{2,-28}: {3}\n{4,-28}: {5}\n" +
"{6,-28}: {7}\n{8,-28}: {9}\n",
"\tReassembly Timeout", st.PacketReassemblyTimeout,
"\tReassemblies Required", st.PacketReassembliesRequired,
"\tPackets Reassembled", st.PacketsReassembled,
"\tPackets Fragmented", st.PacketsFragmented,
"\tFragment Failures", st.PacketFragmentFailures);
Анализ полученных данных потребует времени и заметных усилий и вы, если надо, выполните его самостоятельно а сейчас отметим, что свойство PacketReassemblyTimeout показывает количество миллисекунд (60 в нашем случае), в течение которых должны прийти все части (фрагменты) расчлененного пакета. Если это не случится, то пакет будет забракован.
Рассмотрим, как использовать метод GetIcmpV4Statistics класса IcmpV4Statistics, а также его многочисленные свойства для получения статистики прохождения сообщений. Вставьте следующий код после цикла прохода по адаптерам, так как он не зависит от типа адаптера.
IcmpV4Statistics s = p.GetIcmpV4Statistics();
string snt = "Sent", rec = "Received";
Console.WriteLine("\n\nICMP V4 Statistics:" + line.Substring(0, 20) +
"\n{0,-28}{1}: {2,-10}{3}: {4,-10}\n" +
"{5,-28}{6}: {7,-10}{8}: {9,-10}\n" +
"{10,-28}{11}: {12,-10}{13}: {14,-10}\n" +
"{15,-28}{16}: {17,-10}{18}: {19,-10}\n" +
"{20,-28}{21}: {22,-10}{23}: {24,-10}\n" +
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.