Автор Тема: Socks5 и tor, парсинг сайтов  (Прочитано 450 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kupog [?]

  • Новичок
  • *
  • Сообщений: 5
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Socks5 и tor, парсинг сайтов
« Создано: Декабрь 14, 2018, 13:48:38 »
Всем привет, нужно парсить сайт находящийся в сети тор. Есть некоторые наработки. Из того, что получилось - серфить средствами Autoit через тор. Но при этом *.onion группа доменная не открывается.
Пример работающего вариант:
Код: AutoIt [Выделить]
#include <GUIConstantsEx.au3>
#include <IE.au3>
#include <WindowsConstants.au3>


Local $oIE = _IECreateEmbedded()
GUICreate("Embedded Web control Test", 640, 580, _
        (@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, _
        $WS_OVERLAPPEDWINDOW + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
GUICtrlCreateObj($oIE, 10, 40, 600, 360)


GUISetState(@SW_SHOW)

_UseTOR()
_SetUserAgent("Linux, Firefox")
_IENavigate($oIE, "http://2ip.ru")

While 1
    Local $iMsg = GUIGetMsg()
    Select
        Case $iMsg = $GUI_EVENT_CLOSE
            ExitLoop
    EndSelect
WEnd

GUIDelete()

Exit

Func _SetProxy($proxy, $proxybypass = "")
    Local $INTERNET_OPTION_PROXY = 38
    Local $INTERNET_OPEN_TYPE_PROXY = 3
    Local $tBuff = DllStructCreate("dword;ptr;ptr")
    DllStructSetData($tBuff, 1, $INTERNET_OPEN_TYPE_PROXY)
    Local $pproxy = DllStructCreate("char[" & (StringLen($proxy) + 1) & "]")
    DllStructSetData($pproxy, 1, $proxy)
    DllStructSetData($tBuff, 2, DllStructGetPtr($pproxy))
    Local $pproxybypass = DllStructCreate("char[" & (StringLen($proxybypass) + 1) & "]")
    DllStructSetData($pproxybypass, 1, $proxybypass)
    DllStructSetData($tBuff, 3, DllStructGetPtr($pproxybypass))
    $chk_UrlMkSetSessionOption = DllCall("urlmon.dll", "long", "UrlMkSetSessionOption", "dword", $INTERNET_OPTION_PROXY, "ptr", DllStructGetPtr($tBuff), "dword", DllStructGetSize($tbuff), "dword", 0)
EndFunc

Func _UseTOR($TORPort = 9150)
    _SetProxy("socks=127.0.0.1:"&$TORPort)
EndFunc

Func _SetUserAgent($agent)
    $agentLen = StringLen($agent)
    Dim $tBuff = DllStructCreate("char["&$agentLen&"]")
    DllStructSetData($tBuff, 1, $agent)
    $chk_UrlMkSetSessionOption = DllCall("urlmon.dll", "long", "UrlMkSetSessionOption", "dword", 0x10000001, "ptr", DllStructGetPtr($tBuff), "dword", $agentLen, "dword", 0)
EndFunc
 

Обычные сайты без проблем открывает через тор, а вот *.onion не хочет, пишет, что переход отмене.

Но более предпочтительный вариант, сделать запрос через tcp, т.к. нужно консольное приложение в итогом результате. В эту сторону "копать" у меня хуже вышло.
Сделал такой набросок:
Код: AutoIt [Выделить]
$proxy = "127.0.0.1"
$port = 9150

$domain = "hss3uro2hsxfogfq.onion"
$path = "/contact.php"
$agent = "Test"

$request = "GET " & $path & " HTTP/1.1" & @CRLF
$request &= "Host: " & $domain & "" & @CRLF
$request &= "User-Agent: " & $agent & "" & @CRLF
$request &= "Connection: close" & @CRLF
$request &= "Accept: application/xhtml+xml,html/text,application/xml;q=0.9" & @CRLF & @CRLF

TCPStartup()

$socket = TCPConnect($proxy, $port)
If $socket = -1 Then Exit

TCPSend($socket, $request)

While 1
    $recv = TCPRecv($socket, 2048)
    If $recv <> "" Then
        ConsoleWrite($recv)
        ExitLoop
    EndIf
WEnd

TCPShutdown()

Но... Проблема тут уже в том, что Тор отвечает, что не работает через HTTP Proxy. Т.е. нужно правильно составить запрос, чтобы получить ответ с содержанием страницы. И на этом этапе у меня ступор, нужна помощь, уже неделю штудирую интернет безрезультатно, знаний не хватает.

Русское сообщество AutoIt

Socks5 и tor, парсинг сайтов
« Отправлен: Декабрь 14, 2018, 13:48:38 »

Онлайн sngr [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 903
  • Репутация: 362
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: Socks5 и tor, парсинг сайтов
« Ответ #1, Отправлен: Декабрь 14, 2018, 14:27:40 »
Код: AutoIt [Выделить]
Func _tor()
    TCPStartup()

    $hc = TCPConnect("127.0.0.1", 9050) ; Socks4a Proxy Server

    $sReq = Chr(0x04) _                                     ; Protocol version  4
             & Chr(0x01) _                                     ; Command Code      1 - establish a tcp/ip stream connection
             & Chr(0x00) & Chr(0x50) _                        ; Port              80
             & Chr(0x00) & Chr(0x00) & Chr(0x00) & Chr(0xff) _ ; Ip Adress         Invalid - 0.0.0.255
             & "" & Chr(0x00) _                           ; User Id           Empty
             & "rutracker.org" & Chr(0x00) ; Host Name         www.mamma.com
    TCPSend($hc, $sReq)
    While 1
        $sBuff = TCPRecv($hc, 1)
        If @error Then Exit @ScriptLineNumber
        If StringLen($sBuff) > 0 Then ExitLoop
        Sleep(100)
    WEnd
    $sBuff &= TCPRecv($hc, 8)
    Switch StringMid(Hex(BinaryToString($sBuff)), 3, 2)
        Case "5A"
            ConsoleWrite("> request granted" & @CR)
        Case "5B"
            ConsoleWrite("> request rejected or failed" & @CR)
            Exit @ScriptLineNumber
        Case "5C"
            ConsoleWrite("> request failed because client is not running identd (or not reachable from the server)" & @CR)
            Exit @ScriptLineNumber
        Case "5D"
            ConsoleWrite("> request failed because client's identd could not confirm the user id string in the request" & @CR)
            Exit @ScriptLineNumber
    EndSwitch
    $sReq = 'GET /forum/tracker.php?f=1997&nm="' & $data & '" HTTP/1.0' & @CRLF
    $sReq &= "Host: rutracker.org" & @CRLF
    $sReq &= 'Cookie: ' & $sCookies & @CRLF & @CRLF
    TCPSend($hc, $sReq)
    $sRepy = ""
    While 1
        $sBuff = TCPRecv($hc, 1024 * 5)
        If @error Then ExitLoop
        If StringLen($sBuff) > 0 Then
            $sRepy &= $sBuff
;~          ConsoleWrite(".")
        EndIf
        Sleep(100)
    WEnd
    TCPCloseSocket($hc)
    Return $sRepy
    TCPShutdown()
EndFunc   ;==>_tor


Оффлайн kupog [?]

  • Новичок
  • *
  • Сообщений: 5

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Socks5 и tor, парсинг сайтов
« Ответ #2, Отправлен: Декабрь 14, 2018, 14:46:05 »
Код: AutoIt [Выделить]
Func _tor()
    TCPStartup()

    $hc = TCPConnect("127.0.0.1", 9050) ; Socks4a Proxy Server

    $sReq = Chr(0x04) _                                     ; Protocol version  4
             & Chr(0x01) _                                     ; Command Code      1 - establish a tcp/ip stream connection
             & Chr(0x00) & Chr(0x50) _                        ; Port              80
             & Chr(0x00) & Chr(0x00) & Chr(0x00) & Chr(0xff) _ ; Ip Adress         Invalid - 0.0.0.255
             & "" & Chr(0x00) _                           ; User Id           Empty
             & "rutracker.org" & Chr(0x00) ; Host Name         www.mamma.com
    TCPSend($hc, $sReq)
    While 1
        $sBuff = TCPRecv($hc, 1)
        If @error Then Exit @ScriptLineNumber
        If StringLen($sBuff) > 0 Then ExitLoop
        Sleep(100)
    WEnd
    $sBuff &= TCPRecv($hc, 8)
    Switch StringMid(Hex(BinaryToString($sBuff)), 3, 2)
        Case "5A"
            ConsoleWrite("> request granted" & @CR)
        Case "5B"
            ConsoleWrite("> request rejected or failed" & @CR)
            Exit @ScriptLineNumber
        Case "5C"
            ConsoleWrite("> request failed because client is not running identd (or not reachable from the server)" & @CR)
            Exit @ScriptLineNumber
        Case "5D"
            ConsoleWrite("> request failed because client's identd could not confirm the user id string in the request" & @CR)
            Exit @ScriptLineNumber
    EndSwitch
    $sReq = 'GET /forum/tracker.php?f=1997&nm="' & $data & '" HTTP/1.0' & @CRLF
    $sReq &= "Host: rutracker.org" & @CRLF
    $sReq &= 'Cookie: ' & $sCookies & @CRLF & @CRLF
    TCPSend($hc, $sReq)
    $sRepy = ""
    While 1
        $sBuff = TCPRecv($hc, 1024 * 5)
        If @error Then ExitLoop
        If StringLen($sBuff) > 0 Then
            $sRepy &= $sBuff
;~          ConsoleWrite(".")
        EndIf
        Sleep(100)
    WEnd
    TCPCloseSocket($hc)
    Return $sRepy
    TCPShutdown()
EndFunc   ;==>_tor

А можно более полную версию скрипта? :-[ На переменные $data и $sCookies ругается.
PS Натыкался на этот пример в сети уже. Но вызвало много сомнений,а именно версия протокола 4, порт и т.п. В целом весь запрос. Сейчас как раз пытаюсь во всем этом разобраться. Изучаю RFC 1928 — Протокол SOCKS 5, но пока что безрезультатно. Если можно, было бы здорово получить готовый рабочий пример к примеру под сайт hss3uro2hsxfogfq.onion  :-[

Онлайн sngr [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 903
  • Репутация: 362
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: Socks5 и tor, парсинг сайтов
« Ответ #3, Отправлен: Декабрь 15, 2018, 02:33:58 »
Распаковываешь и запускаешь это, затем просто

Код: AutoIt [Выделить]
$oRequest = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oRequest.Open('GET', 'http://flibustahezeous3.onion/')
$oRequest.Setproxy(2,'127.0.0.1:8118')
$oRequest.Send('')
MsgBox(32, '', $oRequest.responsetext)


Русское сообщество AutoIt

Re: Socks5 и tor, парсинг сайтов
« Ответ #3 Отправлен: Декабрь 15, 2018, 02:33:58 »

Оффлайн kupog [?]

  • Новичок
  • *
  • Сообщений: 5

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Socks5 и tor, парсинг сайтов
« Ответ #4, Отправлен: Декабрь 15, 2018, 10:07:06 »
Распаковываешь и запускаешь это, затем просто

Код: AutoIt [Выделить]
$oRequest = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oRequest.Open('GET', 'http://flibustahezeous3.onion/')
$oRequest.Setproxy(2,'127.0.0.1:8118')
$oRequest.Send('')
MsgBox(32, '', $oRequest.responsetext)

Обычные сайты работаюn. При попытке зайти на onion:
(нажмите для показа/скрытия)
Да и все равно хочу реализовать на прямую, а не через костыли :stars: Так то уже проще использовать шлюз с api, а интерес именно черезе сокс5 в AutoIt'е реализовать)

Онлайн sngr [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 903
  • Репутация: 362
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: Socks5 и tor, парсинг сайтов
« Ответ #5, Отправлен: Декабрь 15, 2018, 15:12:26 »
Тебе нужно запустить тор 127.0.0.1:9050, привокси, скрипт - получить счастье. Привокси это прокси, коий может работать поверх socks.

Оффлайн kupog [?]

  • Новичок
  • *
  • Сообщений: 5

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Socks5 и tor, парсинг сайтов
« Ответ #6, Отправлен: Декабрь 16, 2018, 00:08:33 »
Тебе нужно запустить тор 127.0.0.1:9050, привокси, скрипт - получить счастье. Привокси это прокси, коий может работать поверх socks.
Не помогает. А если в конфиге самого privoxy пытаюсь указать порт тора (например forward-socks5t   / 127.0.0.1:9150), то ругается при запуске, что мол не корректно указано. А если просто forward / 127.0.0.1:9150, то уже сам тор ругается, что не работает с http. :stars: Да и все же хочется напрямую реализовать в AutoIt'е самом отправку запроса, чем через прокладку - privoxy.

Онлайн sngr [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 903
  • Репутация: 362
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: Socks5 и tor, парсинг сайтов
« Ответ #7, Отправлен: Декабрь 16, 2018, 00:49:27 »
Там же было всё уже указано, "forward-socks5t  *.onion  127.0.0.1:9050  ." точка в конце нужна, разархивировать архив,запустить файл, править не надо конфиг правильный, у AutoIt нет стредств решения задачи, все средства шиндовс - winapi, с TCP функциями пример выше, не будет https, WinHttpRequest не работает с сокс напрямую, прямо может ие и ие в WinINet.au3.
« Последнее редактирование: Декабрь 16, 2018, 01:06:44 от sngr »

Русское сообщество AutoIt

Re: Socks5 и tor, парсинг сайтов
« Ответ #7 Отправлен: Декабрь 16, 2018, 00:49:27 »

Оффлайн kupog [?]

  • Новичок
  • *
  • Сообщений: 5

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Socks5 и tor, парсинг сайтов
« Ответ #8, Отправлен: Декабрь 16, 2018, 11:12:09 »
Там же было всё уже указано, "forward-socks5t  *.onion  127.0.0.1:9050  ." точка в конце нужна, разархивировать архив,запустить файл, править не надо конфиг правильный, у AutoIt нет стредств решения задачи, все средства шиндовс - winapi, с TCP функциями пример выше, не будет https, WinHttpRequest не работает с сокс напрямую, прямо может ие и ие в WinINet.au3.
Спасибо, с "forward-socks5t  *.onion  127.0.0.1:9050  ." заработало наконец, не внимательно справку прочитал :-[ Порт только на стандартный 9150 сменил.
Но это альтернативное решение моей проблемы, под мой задуманный проект не совсем подходит. :-[
В WinINet.au3 описание вроде как FTP/HTTP/HTTPS/Gopher+.
С ИЕ в первом посте своем выложил пример, работает через тор, но только не *.onion сайты.
Вот с tcp как раз мне и подходит и хочется найти решение именно в этом направление. Но тут у  меня вопросы. В примере, что Вы выложили не совсем рабочий вариант, чему равны переменные $data и $sCookies? На них ругается и не работает скрипт. Второй вопрос - отправляется запрос socks4, а у тора socks5, работает и с таким запросом?
Т.е. должно наверное выглядеть как минимум примерно так:
Код: AutoIt [Выделить]
$sReq = Chr(0x05) _                                     ; Protocol version  5
             & Chr(0x01) _                                     ; Command Code      1 - establish a tcp/ip stream connection
             & Chr(0x00) & Chr(0x50) _                        ; Port              80
             & Chr(0x00) & Chr(0x00) & Chr(0x00) & Chr(0xff) _ ; Ip Adress         Invalid - 0.0.0.255
             & "" & Chr(0x00) _                           ; User Id           Empty
             & "rutracker.org" & Chr(0x00) ; Host Name         www.mamma.com

А т.к. у socks5 больше функционала и соответственно значит параметров, то запрос должен наверное содержать больше информации  :think: :stars: В общем пытаюсь вникнуть в это, а не только готовое решение получить) Хотя пока что и с готовым решением по tcp больше вопросов, чем ответов)) Т.к. когда оно уже работает как-то, то проще ковыряться, понимаешь, что изменил и почему перестало работать или наоборот лучше стало работать. А в том примере орет на куки и дата переменные, т.е. пока не понятно, что туда нужно вообще предоставить этой функции) Извиняюсь, что возможно много в чем-то туплю и вероятно уже поднадоел со своими вопросами, просто пытаюсь разобраться до конца и добиться своей цели - работа через tcp.


Добавлено: Декабрь 16, 2018, 12:47:56
Наконец у меня продвижение..  ;D
Более менее разобрался. Но теперь не получается получить ответ, ругается на неправильный запрос, нужна помощь)
Код: AutoIt [Выделить]
TCPStartup()

    $hc = TCPConnect("127.0.0.1", 9150) ; Socks4a Proxy Server

    $sReq = Chr(0x04) _                                     ; Protocol version  4
             & Chr(0x01) _                                     ; Command Code      1 - establish a tcp/ip stream connection
             & Chr(0x00) & Chr(0x50) _                        ; Port              80
             & Chr(0x00) & Chr(0x00) & Chr(0x00) & Chr(0xff) _ ; Ip Adress         Invalid - 0.0.0.255
             & "" & Chr(0x00) _                           ; User Id           Empty
             & "hss3uro2hsxfogfq.onion" & Chr(0x00) ; Host Name

; Send Request to Proxy
TCPSend($hc,$sReq)

; Wait for the Reply
While 1
    $sBuff = TCPRecv($hc,1)
    If @error Then Exit @ScriptLineNumber
    If StringLen($sBuff) > 0 Then ExitLoop
    Sleep(100)
WEnd

$sBuff &= TCPRecv($hc,8)

; Check for errors
Switch StringMid(Hex(BinaryToString($sBuff)),3,2)
    Case "5A"
        ConsoleWrite("> request granted" & @CR)
    Case "5B"
        ConsoleWrite("> request rejected or failed" & @CR)
        Exit @ScriptLineNumber
    Case "5C"
        ConsoleWrite("> request failed because client is not running identd (or not reachable from the server)" & @CR)
        Exit @ScriptLineNumber
    Case "5D"
        ConsoleWrite("> request failed because client's identd could not confirm the user id string in the request" & @CR)
        Exit @ScriptLineNumber
EndSwitch

; Send Http Request
$sReq  = "GET /index.html HTTP/1.1" & @CRLF
$sReq &= "Host: hss3uro2hsxfogfq.onion" & @CRLF & @CRLF
ConsoleWrite("! Request:" & @CR & $sReq & "---------------------------------" & @CR)
TCPSend($hc,$sReq)

; Wait for the Reply
ConsoleWrite("Receiving Data ")
$sRepy = ""
While 1
    $sBuff = TCPRecv($hc,1024*5)
    If @error Then
        ConsoleWrite("ERROR ")
        ExitLoop
    Endif
    If StringLen($sBuff) > 0 Then
        $sRepy &= $sBuff
        ConsoleWrite(".")
        ExitLoop
    EndIf
    Sleep(100)
WEnd

; Save Result to disk
$hFile = FileOpen("socks.html",2)
FileWrite($hFile,$sRepy)
FileClose($hFile)

ConsoleWrite("Reply Body stored in .\socks.html (" & Round(StringLen($sRepy)/1024,2) & "Kb)" & @CR)

Уже по разному пробовал и все равно 404 ошибка приходит:
(нажмите для показа/скрытия)
« Последнее редактирование: Декабрь 16, 2018, 12:47:56 от kupog, Причина: Объединение сообщений »

Русское сообщество AutoIt

Re: Socks5 и tor, парсинг сайтов
« Ответ #8 Отправлен: Декабрь 16, 2018, 11:12:09 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
0 Ответов
4612 Просмотров
Последний ответ Ноябрь 28, 2012, 12:47:41
от eropov
5 Ответов
2928 Просмотров
Последний ответ Сентябрь 19, 2013, 23:12:56
от Garrett
4 Ответов
1979 Просмотров
Последний ответ Январь 03, 2015, 19:08:39
от iwak
1 Ответов
1897 Просмотров
Последний ответ Март 04, 2015, 22:00:12
от madmasles
2 Ответов
1224 Просмотров
Последний ответ Март 05, 2015, 14:53:01
от CreatoR
0 Ответов
986 Просмотров
Последний ответ Март 05, 2015, 15:28:03
от madmasles
0 Ответов
1201 Просмотров
Последний ответ Апрель 24, 2015, 13:42:48
от isee
1 Ответов
1882 Просмотров
Последний ответ Сентябрь 26, 2015, 23:39:08
от alex33
0 Ответов
806 Просмотров
Последний ответ Сентябрь 26, 2015, 17:26:51
от Yashied
0 Ответов
1831 Просмотров
Последний ответ Апрель 04, 2017, 19:19:53
от DOMINANT