Tcp Ping или проверка доступности удаленного сервиса

Понадобилось мне недавно какая-нибудь утилита, для проверки доступности удаленного сервера. Вроде все просто, запусти ping и все, но оказалось не так просто, на удаленной машине отключен ответ на ICMP запросы.

Немного поискав в сети понял, что мне нужен tcpping, но ничего подходящего не нашлось. Решил писать сам, в качестве среды разработки выбран MS Visual Studio 2010 Express.
Требования к проекту были простые:
  • Ведение статистики доступности удаленного сервера
  • обычный ping
  • TcpPing — по указанному порту
  • Параллельный мониторинг нескольких серверов
  • Небольшая визуализация текущего состояния
При помощи статей MSDN обычный ICMP ping был реализован быстро, а вот с tcp пришлось повозиться, так как такой функции нет. Реализацию делал на основе Socket.Connect. Получилась следующая функция.

private int pingtcp(string server)
 {
 Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 bool ConState = true;
 sock.LingerState = new LingerOption(true, 2);
 sock.NoDelay = true;
 char[] delimiterChars = { ':' };
 string[] srv = server.Split(delimiterChars);
 try
 { sock.Connect(srv[0], int.Parse(srv[1])); }
 catch (SocketException ex)
 { ConState = false; }
 catch (Exception ex)
 { ConState = false; }
 finally
 {
 if (sock.Connected)
 { sock.Close();
ConState = true; }
 else
 { ConState = false; }
 }
 if (ConState == true)
 { Thread.Sleep(250);
 return 1; }
 else { return -1; }
 }

Пока она только возвращает состояние подключения, но сейчас работаю над определением времени подключения, по типу времени обычного ping.

Весь код и само приложение можно взять тут.


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.