Что нового

[Сеть, интернет] Функция проверки proxy на живучесть

dimontag

Новичок
Сообщения
22
Репутация
0
как определить живая прокси или нет?
речь о transparent proxy например по порту 3128
 

timsky

Осваивающий
Сообщения
93
Репутация
28
dimontag
Включить ее использование в ИЕ или скрипте и проверить IP на сайте типа whatismyip.com
В чем проблема?
 
Автор
D

dimontag

Новичок
Сообщения
22
Репутация
0
ну т.е. типа прокси чекера.
есть список из 20 прокси, нужно выбрать из них живые, да еще желательно знать насколько они живые, т.е. стабильные. потому что одна страница может загрузиться а потом 10 не загрузиться, или на одной проксе на газрузку страницы надо 1сек а другой 30 сек
 

timsky

Осваивающий
Сообщения
93
Репутация
28
dimontag
InetGet() как раз то,что тебе нужно
 
Автор
D

dimontag

Новичок
Сообщения
22
Репутация
0
timsky сказал(а):
InetGet() как раз то,что тебе нужно
Да, по большому чяету к этому и пришел, делаю загрузку тестового или эталонного файла, анализирую впемя и результат операции
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
dimontag [?]
Да, по большому чяету к этому и пришел, делаю загрузку тестового или эталонного файла, анализирую впемя и результат операции
OffTopic:
Мде, иногда надо и на монитор поглядывать ;D
 
Автор
D

dimontag

Новичок
Сообщения
22
Репутация
0
Хы, это уже не помогает, простите
 

El Panda

Продвинутый
Сообщения
101
Репутация
59
timsky [?]
InetGet() как раз то,что тебе нужно

InetGet как раз то что не нужно.
Правильнее будет что-то вроде этого:

Код:
Func ProxyCheck($proxy,$port)
	$socket = TCPConnect($proxy,$port)
	If $socket = -1 Then 
	   Return 0 
	Else
	   ; Лучше использовать список чекеров, но для примера возьмем один
           $command  = "GET http://zerg.helllabs.net/cgi-bin/textenv.pl HTTP/1.1"&@CRLF
	   $command &= "Host: zerg.helllabs.net"&@CRLF
	   $command &= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"&@CRLF
	   $command &= "Connection: close"&@CRLF
	   $command &= ""&@CRLF	   
	   TCPSend($socket, $command)
	   $timeout = TimerInit()
	   While 1
	      $resp = TCPRecv($socket, 5000)
		  IF $resp<>""Then
	         $timeout = Round(TimerDiff($timeout))
			 ExitLoop		  
		  EndIf	
		  IF TimerDiff($timeout)>30000 Then
			 ExitLoop 
		  EndIf	  
	   Wend
	   ; тут парсим ответ и  узнаем параметры прокси
	EndIf   
EndFunc


Вот простой пример проверки скорости прокси, примерно так же проверяет ProxyChecker

Код:
$BYTES_3000 = ;тут строка длинной 3000 байт
Func Check_Speed($proxy,$port)
	$socket_speed = TCPConnect($proxy,$port)
	IF $socket_speed<>-1 Then
		$timeout = TimerInit()
		TCPSend($socket_speed,$BYTES_3000)
		$timeout = TimerDiff($timeout)
		$recv    = TCPRecv($socket_speed,512)
		$speed = Round(((1000/$timeout)*3000)/1000)
    Else
	    $speed = 0
	EndIf
	Return $speed
EndFunc
 

HukpoFuJl

AццkuЙ HukpoFuJl
Сообщения
98
Репутация
38
Спасибо, примеры очень пригодились...
Хотелось бы узнать как получить уровень анонимности(transparent/anonim/hight anonim/elite/...) и тип сервера(http/socks/...)

Пытался гуглить - выдает всякий шлак (проги для прокси, списки прокси), так ничего и не нашел... Но в принципе я так понимаю это из области winhttp уже?
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
вот этим пользовался:
Код:
#cs ----------------------------------------------------------------------------

    AutoIt Version: 3.3.2.0
    Author:         Luke

    Script Function: test proxy
    Template AutoIt script.

#ce ----------------------------------------------------------------------------
#include <Inet.au3>
#include <WinHTTP.au3>
#include <File.au3>

HotKeySet('^{F9}', 'Terminate')

$MyPublicIP = _GetIP()
$sFileProxy = @ScriptDir & '\prx.txt'
$sFileGoodProxy = @ScriptDir & '\GoodProxy.txt'
$lines = _FileCountLines($sFileProxy)
$Stop = 0
$counter = 0
$good = 0

ConsoleWrite('[ Start ]' & @CRLF)

ButtonStartClick()

Func ButtonStartClick()
    $hOpen = _WinHttpOpen('testUtility')
    If @error Then
        MsgBox(48, 'Error', 'Error initializing the usage of WinHTTP functions.')
        Return SetError(1)
    EndIf
    _WinHttpSetTimeouts($hOpen, 0, 20000, 10000, 10000)
    _WinHttpSetOption($hOpen, $WINHTTP_OPTION_DISABLE_FEATURE, $WINHTTP_DISABLE_COOKIES)

    $hFileProxy = FileOpen($sFileProxy, 0)
    If $hFileProxy = -1 Then
        MsgBox(0, 'Error', 'Unable to open file.')
        _WinHttpCloseHandle($hOpen)
        Return SetError(1)
    EndIf

    While $Stop = 0
        $Proxy = FileReadLine($hFileProxy)
        If @error = -1 Then
            ExitLoop
        EndIf
		$counter += 1
        $address = '208.78.70.70'
        $zapros = '/?rnd1=' & Random(1, 65536) & '&rnd2=' & Random(1, 65536)
        $CheckProxy = fZapros($hOpen, $zapros, $address, $Proxy)
        If Not @error And TempIP($CheckProxy[2]) <> $MyPublicIP And Not @error Then
			$good += 1
            ConsoleWrite('Proxy' & @TAB & TempIP($CheckProxy[2]) & @TAB & '[ confirmed ].' & @TAB & '[ ' & $counter & ' / ' & $lines & ' ] Confirmed proxy: ' & $good & @CRLF)
            FileWriteLine($sFileGoodProxy, $Proxy)
        Else
            ConsoleWrite('Proxy' & @TAB & $Proxy & @TAB & '[ refused ].' & @TAB & $CheckProxy[0] & @TAB & '[ ' & $counter & ' / ' & $lines & ' ] Confirmed proxy: ' & $good & @CRLF)
        EndIf
    WEnd
	If $Stop = 1 Then
		FileClose($hFileProxy)
		_WinHttpCloseHandle($hOpen)
		MsgBox(0, 'Stopped', 'The proxy checker stopped by user, result: ' & @CRLF & 'In total lines are processed: ' & $counter & @CRLF & 'Refused proxy: ' & $counter - $good & @CRLF & 'Confirmed proxy: ' & $good & @CRLF & 'The result is written down in a file: ' & FileGetLongName($sFileGoodProxy))
	Else
		ConsoleWrite('[ Finish ]. In total ' & $lines & ' lines are processed. Refused proxy: ' & $lines - $good & ' . Confirmed proxy: ' & $good & @CRLF)
		FileClose($hFileProxy)
		_WinHttpCloseHandle($hOpen)
		MsgBox(0, 'Finish', 'The proxy checker finished work, result:' & @CRLF & 'Total adresses: ' & $lines & @CRLF & 'Refused proxy: ' & $lines - $good & @CRLF & 'Confirmed proxy: ' & $good & @CRLF & 'The result is written down in a file: ' & FileGetLongName($sFileGoodProxy))
	EndIf
EndFunc   ;==>ButtonStartClick

Func TempIP($strokaIP)
    $strokaIP = StringTrimLeft($strokaIP, StringInStr($strokaIP, ':') + 1)
    $strokaIP = StringTrimRight($strokaIP, StringLen($strokaIP) - StringInStr($strokaIP, '/') + 2)
    $t_ip = StringSplit($strokaIP, '.')
    If $t_ip[0] = 4 And StringIsDigit($t_ip[1]) And StringIsDigit($t_ip[2]) And StringIsDigit($t_ip[3]) And StringIsDigit($t_ip[4]) Then
        Return $strokaIP
    EndIf
    Return SetError(1, 0, -1)
EndFunc   ;==>TempIP

Func fZapros($hInternet, $pzapros, $paddress, $pProxy = '')
    Dim $result[3]
    If $pProxy <> '' Then
        WinHttpSetProxy($hInternet, $pProxy)
        If @error Then
            $result[0] = 'Error specifying proxy.'
            SetError(1)
            Return $result
        EndIf
    EndIf
    $hConnect = _WinHttpConnect($hInternet, $paddress)
    If @error Then
        $result[0] = 'Error specifying the initial target server of an HTTP request.'
        SetError(2)
        Return $result
    EndIf
    $h_openRequest = _WinHttpOpenRequest($hConnect, 'GET', $pzapros)
    If @error Then
        $result[0] = 'Error creating request handle.'
        _WinHttpCloseHandle($hConnect)
        SetError(3)
        Return $result
    EndIf
    _WinHttpSendRequest($h_openRequest)
    If @error Then
        $result[0] = 'Error sending specified request.'
        _WinHttpCloseHandle($hConnect)
        SetError(4)
        Return $result
    EndIf
    _WinHttpReceiveResponse($h_openRequest)
    If _WinHttpQueryDataAvailable($h_openRequest) = 1 Then
        $header = _WinHttpQueryHeaders($h_openRequest)
        Dim $sChunk = '', $sData = ''
        While 1
            $sChunk = _WinHttpReadData($h_openRequest)
            If @error Then ExitLoop
            $sData = $sData & $sChunk
        WEnd
        $result[1] = $header
        $result[2] = $sData
    Else
        $result[0] = 'Site is experiencing problems.'
    EndIf
    _WinHttpCloseHandle($h_openRequest)
    _WinHttpCloseHandle($hConnect)
    If $result[0] = 'Site is experiencing problems.' Then SetError(5)
    Return $result

EndFunc   ;==>fZapros

Func WinHttpSetProxy($hInternet, $pProxy, $pProxyBypass = '<local>', $iAccessType = $WINHTTP_ACCESS_TYPE_NAMED_PROXY)

    Local $tProxy = DllStructCreate('wchar[' & StringLen($pProxy) + 1 & ']')
    DllStructSetData($tProxy, 1, $pProxy)

    Local $tProxyBypass = DllStructCreate('wchar[' & StringLen($pProxyBypass) + 1 & ']')
    DllStructSetData($tProxyBypass, 1, $pProxyBypass)

    Local $tWINHTTP_PROXY_INFO = DllStructCreate('dword AccessType;' & _
            'ptr Proxy;' & _
            'ptr ProxyBypass')

    DllStructSetData($tWINHTTP_PROXY_INFO, 'AccessType', $iAccessType)
    DllStructSetData($tWINHTTP_PROXY_INFO, 'Proxy', DllStructGetPtr($tProxy))
    DllStructSetData($tWINHTTP_PROXY_INFO, 'ProxyBypass', DllStructGetPtr($tProxyBypass))
    Local $a_iCall = DllCall('winhttp.dll', 'int', 'WinHttpSetOption', _
            'hwnd', $hInternet, _
            'dword', $WINHTTP_OPTION_PROXY, _
            'ptr', DllStructGetPtr($tWINHTTP_PROXY_INFO), _
            'dword', DllStructGetSize($tWINHTTP_PROXY_INFO))
    If @error Or Not $a_iCall[0] Then
        Return SetError(1, 0, 0)
    EndIf

    Return SetError(0, 0, 1)

EndFunc   ;==>WinHttpSetProxy

Func Terminate()
	ConsoleWrite('[ Script stopped by user ]. In total ' & $counter & ' lines are processed. Refused proxy: ' & $counter - $good & ' . Confirmed proxy: ' & $good & @CRLF)
    $Stop = 1
EndFunc   ;==>Terminate
 
Верх