Что нового

Ф-ция проверки интернета _Internet_Ping_URL

The Dream

Новичок
Сообщения
393
Репутация
3
Подскажите пожалуйста как работает ф-ция эта:

Код:
Func _Internet_Ping_URL($sPing_URL = "http://www.google.ru/", $iPing_TimeOut = 1000)
    ;без аргументов проверяет только наличие интернета.
    ;с первым аргументом пингует конкретный URL не зависимо от наличия интернета.
    Local Const $INTERNET_CONNECTION_MODEM = 0x1
    Local Const $INTERNET_CONNECTION_LAN = 0x2
    Local Const $INTERNET_CONNECTION_PROXY = 0x4
    Local Const $INTERNET_CONNECTION_OFFLINE = 0x20
    Local Const $INTERNET_CONNECTION_CONFIGURED = 0x40
    Local $iRetState = 99
    Local $aPing_Host = StringRegExp($sPing_URL, 'http://(.*?)/', 3);выдираем хост из $sPing_URL
    If Not IsArray($aPing_Host) Then Return $iRetState;ошибка в URL
    $sPing_Host = $aPing_Host[0]
    Local $stInetGetConnectedState = DllStructCreate("int")

    DllCall("wininet.dll", "int", "InternetGetConnectedState", "ptr", DllStructGetPtr($stInetGetConnectedState), "dword", 0)

    Local $s_stDataState = DllStructGetData($stInetGetConnectedState, 1)


    If BitAND($s_stDataState, $INTERNET_CONNECTION_MODEM) Or _
            BitAND($s_stDataState, $INTERNET_CONNECTION_PROXY) Then $iRetState = 1;есть подключение к интернету

    If BitAND($s_stDataState, $INTERNET_CONNECTION_OFFLINE) Then $iRetState = 0;нет подключения к интернету
    If $sPing_Host = "google.com" Then;если функция без аргументов
        If $iRetState = 0 Then
            Local $iPingCheck = Ping($sPing_Host, $iPing_TimeOut);пингуем "google.com"
            If $iPingCheck > 0 Then $iRetState = 1;есть подключение к интернету
        EndIf
    Else
        Local $iPingCheck = Ping($sPing_Host, $iPing_TimeOut);пингуем хост "$sPing_URL в любом случае
        If $iPingCheck > 0 Then
            $iRetState = 1;есть подключение к интернету и хост доступен
        Else
            $iRetState = 999; хост не доступен.
        EndIf
    EndIf
    Return $iRetState
EndFunc   ;==>_Internet_Ping_URL


И будет ли она работать корректно на windows xp?
 

urrya

Новичок
Сообщения
159
Репутация
1
прошу прощения, а зачем (для каких нужд) Вам эта громадная функция?
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
urrya, требуется оптимальный вариант проверки соединения - и желательно с учетом настроек IE, а именно - настройка "прокси".
 

urrya

Новичок
Сообщения
159
Репутация
1
а так не проще -

Код:
_INEG()
Func _INEG()
	Local $INE = 0, $INE1 = 0, $INE2 = 0
     $INE = Ping("www.google.com",1000)
If $INE <> 0 Then
    Msgbox(0,"Status","Online, Ping:   " & $INE & " ms",2)
        ; . . . 
	Return
ElseIf $INE = 0 Then
	$INE1 = Ping("www.google.com",3000)
EndIf
If $INE1 <> 0 Then
    Msgbox(0,"Status","Online, Ping:   " & $INE1 & " ms",2)
        ; . . . 
	Return
ElseIf $INE1 = 0 Then
    $INE2 = Ping("www.google.com",5000)
EndIf
If $INE2 <> 0 Then
    Msgbox(0,"Status","Online, Ping:   " & $INE2 & " ms",2)
        ; . . . 
	Return
ElseIf $INE2 = 0 Then
    Msgbox(0,"Status"," Сервер не отвечает, проверьте соединение с интернет.", 5)
EndIf
EndFunc


ну или что то типа этого?
;)



Добавлено:
Сообщение автоматически объединено:


можно так -

Код:
_INEG()

Func _INEG()
	Local $INE = 0, $i = 0, $is = 1000
Do
     $INE = Ping("www.google.com",$is)
	 $is += 2000
	 $i += 1
Select
Case $INE <> 0
    Msgbox(0,"Status","Online, Ping:   " & $INE & " ms", 2)
	; . . .
	Return
Case $INE = 0 And $i = 3
	Msgbox(0,"Status"," Сервер не отвечает, проверьте соединение с интернет.", 5)
EndSelect
Until $i = 3
EndFunc
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
urrya, проще!

У меня именно так и реализована проверка. Но это проверка осуществляется через стандартные установки windows, в плане интернета. То есть не важно, модемное соединение, lan, wan - ping работать будет. Вот тоже самое интересует, только установки не общие, а именно IE. Так как там прописан адрес как прокси, так и порта.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
dream.reckless
Код:
InetRead ( "URL" [, options] )

Может эта функция подойдёт?
 

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Мой вариант:
Код:
Func CheckInetConnect()
	HttpSetProxy(0)
	$sCheckIPAddr = StringRegExpReplace(BinaryToString(InetRead('http://wtfismyip.com/text', 3), 4), '(?is)(.*?)(:?\n|\r)', '$1')
	If @extended == '0' Then
		ConsoleWrite(' No connect ' & @LF)
	Else
		ConsoleWrite(' Connect ' & $sCheckIPAddr & @LF)
	EndIf
EndFunc   ;==>CheckInetConnect
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
ivsatel [?]
А если wtfismyip.com не доступен в настоящий момент? :smile:

OffTopic:
http://wtfismyip.com/xml мне больше понравился, чем http://wtfismyip.com/text ;D
 

ivsatel

Продвинутый
Сообщения
319
Репутация
84
madmasles

madmasles сказал(а):
А если wtfismyip.com не доступен

Думаю блокировка ICMP имеет больше вероятности, чем недоступность этого хоста :smile:

OffTopic:
Мне вообще этот сервис нравится.
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
madmasles, простите вы уверены в HttpSetProxy() - ? Просто я вроде бы пробовал и не "пинговало". Прошу прощение, просто в данный момент не могу проверить (не дома).
 
Верх