moto25ru
Newbie | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Добрый день =) помогите советом, ситуация такая: (для простоты) требуется организовать тунель при помощи TCPsend TCPRecv (ну или если есть другие возможности autoit) между iE и проксёй.. т.е. все запросы и информация сперва идут на прослушиваемый скриптом порт, а затем передаются на проксю, и наоборот соответственно, т.е. идея такая, что нужно сделать тоннель так, чтобы браузер и прокся работали как буд-то без тоннеля, для них он должен быть "прозрачен".. но это не все.. необходимо, чтобы информация не просто передавалась с порта на порт, а предварительно сохранялась в файле, а точнее в 2х 1й - информация направляемая на проксю 2й - информация отправленная проксей в ответ смысл файлов заключается в том, чтобы в дальнейшем реализовать этот тоннель через БД, т.е. с одной стороны будет записываться в таблицу запрос, с другой стороны проверяться с некоторым интервалом наличие данных в таблице со стороны прокси, и если они есть - обрабатываться запрос и выкладываться результат, если коротко получится ТОННЕЛЬ клиент<->БазаДанных<->прокси(смотрящий в интернет) можно и без прокси если такая возможность есть бьюсь не первый день, работает наполовину, не могу понять в чем проблема.. скриптик будет в итоге разбит на 2 кусочка (каждый по обе стороны БД) пока для тестирования используется кусочек на локальном ПК с проксей: Код: #include <GUIConstantsEx.au3> #include <Array.au3> #Include <File.au3> Opt('MustDeclareVars', 1) local $listen_IP = "127.0.0.1" local $listen_PORT = 80;используется для направления браузера как на прокси local $proxy_IP = "127.0.0.1" local $proxy_PORT = 8080;прокси работает на данном порту local $file, $BUFF, $socket, $cleint_IP_Accepted, $MainSocket, $ConnectedSocket, $proxySocket, $array, $addr, $GET Global $to_proxy="temp_proxy", $to_listen="temp_listen" Global $buf = 1024, $TTL = 100, $time=1000, $i=0, $recv = "", $bin=0, $data="" Example() Func Example() ;стираются файлы если были созданы и не удалены (некорректное завершение работы скрипта) If FileExists($to_proxy) Then FileDelete($to_proxy) If FileExists($to_listen) Then FileDelete($to_listen) TCPStartUp() ;прослушиваем iE $MainSocket = TCPListen($listen_IP, $listen_PORT, $TTL ) If $MainSocket = -1 Then Exit Do $ConnectedSocket = TCPAccept($MainSocket) Until $ConnectedSocket <> -1 ;соединяемся с проксей $proxySocket = TCPConnect ( $proxy_IP, $proxy_PORT ) If $proxySocket = -1 Then Exit ;проверка сокетов на наличие запроса-ответа While 1 _TCPSend ($proxySocket,$ConnectedSocket,$to_proxy,$to_listen) WEnd If $ConnectedSocket <> -1 Then TCPCloseSocket ($ConnectedSocket) If $proxySocket <> -1 Then TCPCloseSocket ($proxySocket) TCPShutdown() EndFunc ;хитрый цикл из передал-принял, придумал для замены Sleep() Func _TCPSend ($proxySocket,$ConnectedSocket,$to_proxy,$to_listen) If FileExists($to_proxy) == 0 Then _TCPRecv ($ConnectedSocket, $proxySocket, $to_proxy, $to_listen, $buf) $file = FileOpen($to_proxy, 0) If $file = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit EndIf While 1 $data=FileRead($file, 1) If @error == -1 Then ExitLoop TCPSend ($proxySocket, $data ) WEnd FileClose($file) FileDelete($to_proxy) EndFunc Func _TCPRecv ($ConnectedSocket, $proxySocket, $to_proxy, $to_listen, $buf) Do Sleep (200) $data = TCPRecv ($ConnectedSocket, $buf, $bin) If $data == "" Then _TCPSend ($ConnectedSocket,$proxySocket,$to_listen,$to_proxy) Until $data <> "" If FileExists($to_proxy) == 0 Then _FileCreate($to_proxy) $file = FileOpen($to_proxy, 2) If $file = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit EndIf FileWrite($file, $data) While $data <> "" $data = TCPRecv ($ConnectedSocket, $buf, $bin) FileWrite($file, $data) WEnd FileClose($file) EndFunc | переменных обьявлено, возможно, больше чем используется, просто постоянно переписываю скрипт... беда заключается в том, что он впринципе отображает страничку на которую подан запрос из браузера, но как бы подвисает и больше уже не принимает запросы.. по моим наблюдениям это происходит после того как тип данных в TCPRecv меняется со строковых на бинарные | Всего записей: 12 | Зарегистр. 02-06-2009 | Отправлено: 17:55 02-06-2009 | Исправлено: moto25ru, 18:03 02-06-2009 |
|