Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / ping / 6 сообщений из 6, страница 1 из 1
17.07.2005, 13:10
    #33170195
'FaTsO'
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ping
Как программно пингануть машину...и получить некое сообщение в ответ
что нибудь типа "Машина пингуется)))"

Заранее большое спасибо
...
Рейтинг: 0 / 0
19.07.2005, 12:53
    #33173262
SeraTJ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ping
мдя, прикольный вопрос.

Ну, если проявить тупую фантазию, то можно сделать так:
exec("ping 193.1.1.2 > out");
подождать заданное время ( можно в пинге добавить таймаут ), потом взять файлик out, его распарсить, а потом удалить. По крайней мере мое исследование показывает, что в выводе ping-a исп. только 1 знак "%" -- рядом с количеством потерь. От этого можно оттолкнуться.

Здесь только сложно определить, когда пинг завершит работу.
...
Рейтинг: 0 / 0
19.07.2005, 13:08
    #33173324
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ping
- Есть функции Win API
Код: plaintext
getHostAddrByName
, inet_addr
Можно использовать icmp.dll(Функции вроде CreateIcmpFile),
а лучше использовать SOCK_RAW(очень подробно в MSDN)

- InternetCheckConnection
Allows an application to check if a connection to the Internet can be established.

Код: plaintext
1.
2.
3.
4.
BOOL InternetCheckConnection( 
LPCTSTR lpszUrl, 
DWORD dwFlags, 
DWORD dwReserved 
);

-
Код: plaintext
gethostname 
(hostName, sizeof (hostName));

-
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
function NetServerEnum(const ServerName: PWideString; level: DWORD; var Buffer:
                       pointer; PrefMaxLen: DWORD; var EntriesRead: DWORD;
                       var TotalEntries: DWORD; ServerType: DWORD; const Domain: PWideChar;
                       var ResumeHandle: DWORD): DWORD; stdcall;
external 'netapi32.dll';

function NetApiBufferFree(Buffer: pointer): DWORD; stdcall; external 'netapi32.dll';

function IsNet: boolean;
var Buffer: pointer;
    EntriesRead, ResumeHandle, TotalEntries: DWORD;
begin
   ResumeHandle:=  0 ;
   Result:= false;
   if NetServerEnum(nil,  101 , Buffer, DWORD(- 1 ),
                    EntriesRead, TotalEntries, $FFFFFFFF, nil, ResumeHandle) =  0  then
   Result:= EntriesRead >  0 ;
   NetApiBufferFree(Buffer);
end;

______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
19.07.2005, 13:14
    #33173340
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ping
1) Подизассемблировать утилиту ping и посмотреть какие
WinAPI функции она вызывает.

2) Почитать книжку про ICMP протокол.
...
Рейтинг: 0 / 0
19.07.2005, 13:21
    #33173362
SeraTJ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ping
ну вот! а молчали сначала.
Оказалось, что есть хорошая функция InternetCheckConnection , которая решает эту проблему.
А я уже хотела предложить пропустить ping через pipe на себя....
...
Рейтинг: 0 / 0
19.07.2005, 13:52
    #33173475
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ping
Функционал упрощающий жизню - приведён выше. Добавлю только то, что ICMP слабо чем отличаеться от UDP. Но лучше не гиморничать и юзать ранее накопленный опыт - то бишь готовые айпишки.

с уважением
(круглый)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / ping / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]