ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|
Условие подключения к инету |

29.12.2009, 09:15
|
|
Участник форума
Регистрация: 08.11.2009
Сообщений: 114
Провел на форуме: 201148
Репутация:
-4
|
|
Условие подключения к инету
Всем привет!
Подскажите как самым оптимальным условием проверить подключение к инету на С++
вот примерно такой структурой
Код:
If {условие}
остальной код
|
|
|

29.12.2009, 10:17
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
реальное подключение к инету ты можешь проверить тока определив ip какогонить крупного сайта.
типа определить имя ip адрес google.com
Если определился, значит инет есть. Хотя если юзается кеш DNS то может и не быть инета, а данные берутся из кеша.
Но самый действенный способ - просто подрубиться к какомунить сайта, есть подрубился и получил страницу, то инет есть. Единственное что не провериш, если доступ в инет через прокси идет.
|
|
|

29.12.2009, 10:42
|
|
Участник форума
Регистрация: 06.03.2006
Сообщений: 122
Провел на форуме: 709545
Репутация:
72
|
|
slesh, DNS, www от этих сервисов не всегда можно получить достоверную инфу.
Некоторые ISP отдают зоны даже при отключ. инете, с www - прокся.
Обычно админы используют icmp на шлюз. Т.е. если шлюз доступен - инет работает или проблема у ISP, если шлюз не доступен - инета и быть не может 
|
|
|

29.12.2009, 16:12
|
|
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме: 1290766
Репутация:
1236
|
|
так думаю вернее будет
Код:
#include <WinSock2.h>
#pragma comment(lib, "ws2_32")
BOOL IsOnline()
{
WSADATA wsd;
WSAStartup(0x202, &wsd);
SOCKET sck;
SOCKADDR_IN addr;
int rc;
addr.sin_family = AF_INET;
// standard http port
addr.sin_port = htons(80);
// mail.ru ip
addr.sin_addr.S_un.S_addr = inet_addr("217.69.128.44");
sck = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
rc = connect(sck, (LPSOCKADDR)&addr, sizeof(addr));
if(rc == 0){
closesocket(sck);
return TRUE;
}
return FALSE;
}
int _tmain(int argc, _TCHAR* argv[])
{
if(IsOnline()){
MessageBox(0, "ONLINE", 0, 0);
}else{
MessageBox(0, "OFFLINE", 0, 0);
}
return 0;
}
__________________
 
snow white world wide
|
|
|

29.12.2009, 17:25
|
|
Участник форума
Регистрация: 18.07.2009
Сообщений: 272
Провел на форуме: 2083691
Репутация:
330
|
|
Код:
#undef UNICODE
#include <winsock2.h>
#pragma comment( lib, "wsock32.lib" )
int main(int argc, char* argv[])
{
sockaddr_in s_a;
WSADATA wd;
WSAStartup( MAKEWORD( 2, 2 ), &wd );
SOCKET s = socket( AF_INET, SOCK_STREAM, 0 );
if (s == INVALID_SOCKET)
{
return 255;
}
s_a.sin_addr.s_addr = inet_addr( "217.69.128.44" );
s_a.sin_port = htons( 80 );
s_a.sin_family = AF_INET;
if (connect( s, (struct sockaddr*)&s_a, sizeof( s_a ) ) == SOCKET_ERROR)
{
MessageBox(0,"OFFLINE!","Winname",MB_OK);
}
else
{
MessageBox(0,"ONLINE!!","Winname",MB_OK);
}
closesocket( s );
WSACleanup();
return 0;
}
Вот без создания ф-и.
Если нужен постоянный мониторинг - юзай цикл.
|
|
|

29.12.2009, 17:52
|
|
Участник форума
Регистрация: 06.03.2006
Сообщений: 122
Провел на форуме: 709545
Репутация:
72
|
|
А вот пару примеров, из которых два выше варианта работать не будут:
217.69.128.44 упал на 10 сек, а в этот момент была проверка
Траблы с маршрутизацией, BGP такое дело
И снова коннект на 80 порт, это не разумно проверять конект на веб-сервер
Последний раз редактировалось lo0; 29.12.2009 в 17:56..
|
|
|

29.12.2009, 19:12
|
|
Banned
Регистрация: 24.12.2009
Сообщений: 141
Провел на форуме: 487460
Репутация:
45
|
|
tracert до отрезолвленного msn.com
условие присутствия интернета это ответ следующего за вашим гейта!
... хотя можно и пингануть гейт провайдера!
Интернет - это не америка не корневые ДНС сервера!
Интернет -это среда переноса информации!
|
|
|

29.12.2009, 19:20
|
|
Участник форума
Регистрация: 06.03.2006
Сообщений: 122
Провел на форуме: 709545
Репутация:
72
|
|
Сообщение от Retimiled
... хотя можно и пингануть гейт провайдера!
А кокой гейт-то пинговать? У меня 4 канала(BGP)
|
|
|

29.12.2009, 19:25
|
|
Banned
Регистрация: 24.12.2009
Сообщений: 141
Провел на форуме: 487460
Репутация:
45
|
|
ну свой гейт комп знает ....поэтому в логике я и писал трейсерт (icmp c временем жизни +1 от времени TTL при котором ответил свой гейт)
|
|
|

29.12.2009, 19:30
|
|
Участник форума
Регистрация: 06.03.2006
Сообщений: 122
Провел на форуме: 709545
Репутация:
72
|
|
Retimiled, согласен!
PS: Осталось реализовать на с++
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|