Я пытаюсь реализовать SysInternals Марка Руссиновича PsPing tool в C# для измерения задержек с использованием TCP-пинга.Как реализовать PSPing TCP ping в C#
Я не уверен, как он выполняет вызов ping (видимо, не использует raw-сокеты Windows, поскольку для него не требуются привилегии администратора). Я знаю, что hping
отправляет пакет SYN через TCP и измеряет время отклика.
Какова была бы методика реализации точного измерения задержки сервера, которая по TCP не измеряет время загрузки страницы, а только время ожидания сети для подтверждения пакета? Есть ли библиотека для этого?
C:\>psping stackoverflow.com:80
PsPing v2.01 - PsPing - ping, latency, bandwidth measurement utility
Copyright (C) 2012-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
Pinging 198.252.206.16 with 32 bytes of data:
5 iterations (warmup 1) ping test:
Reply from 198.252.206.16: 81.57ms
Reply from 198.252.206.16: 80.81ms
Reply from 198.252.206.16: 80.68ms
Reply from 198.252.206.16: 80.52ms
Reply from 198.252.206.16: 80.71ms
Ping statistics for 198.252.206.16:
Sent = 4, Received = 4, Lost = 0 (0% loss),
Minimum = 80.52ms, Maximum = 80.81ms, Average = 80.68ms
Обновление: Пожалуйста, не отвечайте, как «почему бы вам не использовать класс Ping, это уже делает вещь», как я и спрашиваю о пинг через TCP, а не ICMP.
Многие инструменты Sysinternals используют недокументированные системные вызовы. Вы вряд ли найдете простой источник ссылок, говорящий, как он это делает, не говоря уже о том, как сделать то же самое с C#. –
@ScottChamberlain просто пытается, возможно, есть метод, о котором я не знаю. –
@ahmetalpbalkan: как насчет класса Ping, который позволяет вам пинговать сервер или внутренний IP-адрес, и вы можете получить время воспроизведения? http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping%28v=vs.110%29.aspx – houssam