Пинг компьютера подключенного через маршрутизатор

  • Автор темы Автор темы Shouldercannon
  • Дата начала Дата начала
S

Shouldercannon

Собственно как это сделать? Данный способ не работает.
Код:
IdIcmpClient1.Host := '192.168.0.1'; // Без порта и с портом не определяет
IdIcmpClient1.Ping;
Memo1.Lines.Add('Время до хоста: ' + IntToStr(IdIcmpClient1.ReplyStatus.MsRoundTripTime) + ' ms ' + ComboBox1.Text);
 
Собственно как это сделать? Данный способ не работает.
Код:
IdIcmpClient1.Host := '192.168.0.1'; // Без порта и с портом не определяет
IdIcmpClient1.Ping;
Memo1.Lines.Add('Время до хоста: ' + IntToStr(IdIcmpClient1.ReplyStatus.MsRoundTripTime) + ' ms ' + ComboBox1.Text);
:)
http://www.eomy.net/forum/ping-sredstvami-delphi-vt2290.html
unit Ping;
...
 
Ни один из способов не работает. Маршрутизатор портит всю картину. Может я рою не в ту сторону, может вообще ненадо зацикливаться на пингующих компонентах. Я опрашиваю через UDPClient сервера, может через него можно определить пинг при помощи вычислений (полученное значение - начальное = нужное значение)? Беда просто.
 
Ни один из способов не работает.
Как так "не работает"? :)
У меня работает, проверил специально...
Маршрутизатор портит всю картину.
Маршрутизатор "портить" не может ничего... его дело "поросяче" - взял пакет и "пнул" куда велено было...
Портить могут фаервол и прокси (если есть таковые)...
Вы из консоли проверяли команду ping к какому нибудь из ваших серверов? работает?
Может я рою не в ту сторону, может вообще ненадо зацикливаться на пингующих компонентах.
Боюсь что (если Вам действительно необходимо узнать время "запрос+отклик") другого пути кроме как "пропинговать" сервер у Вас нет...
Тут вопрос еще в том "хотят ли" сервера, чтобы их пинговали... :)
Я опрашиваю через UDPClient
А вот нужен ли Вам именно ринг?
Например, если Вас устроит время между запросом Вашего UDPClient и моментом когда сервер "скажет" - "ПРИВЕТ! Ты кто?",
то сделать это действительно можно и без пинга.
Напимер так:
Код:
 var
Q,A: TTimeStamp;
implementation

//...

Q := DateTimeToTimeStamp(Now); // в обработчике запроса

//...
A := DateTimeToTimeStamp(Now); // в обработчике ответа сервера

//...
// там где надо "отчитаться" перед пользователем
ShowMessage('Я спросил... и мне ответили через ' + IntToStr(Trunc(TimeStampToMSecs(A) - TimeStampToMSecs(Q))) + ' мс.' );
Вот... но учтите, это ничего общего с ping не имеет... и время в основном зависит не от прохождения пакетов, а от того насколько быстро вам решит ответить сервер... а может у него есть клиенты и поважнее чем Вы... :)
 
Возможно стоит какая та защита, я забил на это и разрулил с помощью GetTickCount. Перед опросом получаю GetTickCount и при получении ответа получаю GetTickCount далее из второго вычитаю первое, вот и пинг.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab