moto25ru
Newbie | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору gal7 Цитата: moto25ru, мне кажется у тебя не получится сделать прокси. Как-то я делал socks 4/5 прокси на Perl, так там используется спецфункция select чтобы определять с какого сокета пришли данные (с сайта или от браузера) или есть еще неблокирующие сокеты,незнаю, может еще с многопоточностью можно как-то извернуться. | спасибо за ответ =) ты единственный пока, кто откликнулся =) С какого сокета пришли данные и так определяется =) более того, в последней редакции уже более-менее работает, если так можно выразиться.. беда в другом.. у меня есть 2 скрипта.. 1 впринципе неверен, но работает на половину, второй - верен, но не работает =) поясню 1) работает почти как второй, но "вылетает" и после его завершения (в чем причина понятия не имею) отображается часть странички =) 2) работает отлично, запросы постоянно принимает и отправляет на проксю, прокся их принимает и отправляет ответ, все вроде верно, НО ! итоговая страничка не отображается вообще, есть подозрение, что это связано с тем, что я или не закрываю сессию TCP как это происходит при вылете по ошибке в первом скрипте или же просто надо закрыть сокеты и затем заного открыть, чтобы браузер понял, что ответ который он получил это и есть то, что он ожидал, а то происходит как вечная загрузка.. --- посему вопросы простые, пусть и не в тему 1) как вообще функционирует http протокол по запросу браузера, требует ли он завершения TCP сессии как команды к окончанию загрузки и отображению скаченного ? 2) есть ли примеры (лучше подробные) когда используются функции TCP в autoIT ? т.е. передача файлов, передача текста, смешанные варианты может быть.. у меня вот, например, работает скрипт только в случае записи в файл в бинарном принудительном порядке =) интересно почему =) но не сильно важно впринципе (файлы используются на данный момент как форма передачи запроса на другой порт, а сам скрипт этакий тунель) 3) вообще как формируется страничка ? т.е. в каком порядке что закачивается, например: ) закачивается форма (разметка гипертекстовая) ) затем браузер смотрит каких картинок не хватает и посылает дополнительные запросы и вставляет полученные данные куда положено по форме (разметка гипертекстовая) ### вообще задача казалась более чем простой, получил на одном порту - отправил на другой и наоборот ! и ведь даже не важно что получил и передал, просто как тунель, принял-отправил, а уже почти месяц бьюсь.. приблизился незначительно, хоть и больше стал понимать как, что работает, хелп уже весь почти наизусть по этим функциям помню (( ### Код: #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;1521 local $file, $m,$s,$g,$soc ;, $BUFF, $cleint_IP_Accepted, $array, $addr $time=1000, $recv = "", $i=0, local $to_proxy="temp_proxy.bin", $to_listen="temp_listen.bin", $flag="flag" local $buf = 65432, $TTL = 100, $data="", $GET="", $bin=0, $b=16, $count=0 local $ListenSocket, $ConnectedSocket, $proxySocket, $socket Example() Func Example() If FileExists($to_proxy) Then FileDelete($to_proxy) If FileExists($to_listen) Then FileDelete($to_listen) If FileExists($flag) Then FileDelete($flag) TCPStartUp() $ListenSocket = TCPListen($listen_IP, $listen_PORT, $TTL ) If $ListenSocket = -1 Then Exit $proxySocket = TCPConnect ( $proxy_IP, $proxy_PORT ) $socket = TCPConnect ($listen_IP, $listen_PORT) ProgressOn ("tonnel","", "",0,800,1) While 1 ProgressSet (0,"прослушивание портов") ; проверка на наличие данных для отправки на proxy If FileExists($to_proxy) Then $file = FileOpen ($to_proxy, $b+0) If $file = -1 Then MsgBox(0, "Error", "buffer error") Exit EndIf ProgressSet (0,"передача данных на proxy") $data=FileRead($file);, 1) $count=TCPSend ($proxySocket, $data ) If @error == -1 Then _MsgBox (0, "Error", "EOF") If @error == 1 Then _MsgBox(0, "Error", "buffer error") ; # # # # # _MsgBox (0, "Send to proxy", $data&@CRLF&@CRLF&"binary="&isBinary($data)&@CRLF&"@error="&@error&@CRLF&"$count="&$count) ; # # # # # FileClose($file) FileDelete($to_proxy) $data = "" EndIf If not FileExists($to_listen) Then ; получение данных на локальном порту ; $data = _TCPRecv(TCPAccept($ListenSocket), $buf) $data = _TCPRecv($ConnectedSocket, $buf) ; # # # # # _MsgBox (0, "получено с 127.0.0.1:80", $data&@CRLF&@CRLF&"binary="&isBinary($data)&@CRLF&"@error="&@error&@CRLF&"$buf="&$buf) ; # # # # # If $data<>"" Then If FileExists($to_proxy) Then;And $proxySocket<>-1 Then $file = FileOpen ($to_proxy, $b+2) If $file = -1 Then MsgBox(0, "Error", "buffer error") Exit EndIf FileWrite($file, $data) FileClose($file) Else _FileCreate($to_proxy) $file = FileOpen ($to_proxy, $b+1) If $file = -1 Then MsgBox(0, "Error", "buffer error") Exit EndIf FileWrite($file, $data) FileClose($file) EndIf ProgressSet (0,"получение данных с 127.0.0.1:80") Else ; переключение порта в режим ожидания|приема $ConnectedSocket = TCPAccept($ListenSocket) EndIf EndIf ; проверка на наличие данных для отправки в браузер If FileExists($to_listen) Then;$ListenSocket<>-1 Then $file = FileOpen ($to_listen, $b+0) If $file = -1 Then MsgBox(0, "Error", "buffer error") Exit EndIf ProgressSet (0,"передача данных в iE") $GET=FileRead($file);, 1) $count=TCPSend ($socket, $GET );$ListenSocket, $GET ) If @error == -1 Then _MsgBox (0, "Error", "EOF") If @error == 1 Then _MsgBox(0, "Error", "buffer error") ; # # # # # _MsgBox (0, "Send to iE", $GET&@CRLF&@CRLF&"binary="&isBinary($GET)&@CRLF&"@error="&@error&@CRLF&"$count="&$count) ; # # # # # FileClose($file) FileDelete($to_listen) $GET = "" EndIf If not FileExists($to_proxy) Then ; получение данных на порту proxy ; $GET = _TCPRecv($socket, $buf) $GET = _TCPRecv($proxySocket, $buf) _MsgBox (0, "получено с 127.0.0.1:8080", $GET&@CRLF&@CRLF&"binary="&IsBinary($GET)&@CRLF&"@error="&@error&@CRLF&"$buf="&$buf) If $GET<>"" Then If FileExists($to_listen) Then $file = FileOpen ($to_listen, $b+2) If $file = -1 Then MsgBox(0, "Error", "buffer error") Exit EndIf FileWrite($file, $GET) FileClose($file) Else _FileCreate($to_listen) $file = FileOpen ($to_listen, $b+1) If $file = -1 Then MsgBox(0, "Error", "buffer error") Exit EndIf FileWrite($file, $GET) FileClose($file) EndIf ; Else ; переключение порта в режим ожидания|приема ; $socket = TCPAccept($proxySocket) EndIf EndIf $data = "" $GET = "" WEnd ProgressOff ( ) If $ConnectedSocket <> -1 Then TCPCloseSocket($InputSocket) If $proxySocket <> -1 Then TCPCloseSocket($InputSocket) TCPShutdown() EndFunc Func _MsgBox ($m, $s, $g) MsgBox($m,$s,$g,0) EndFunc Func _TCPRecv ($soc, $buf) Return TCPRecv ($soc, $buf, 0) EndFunc | последняя функция переписана для форума =) она у меня реально в скрипте используется в старом виде где проходит проверка на бинарность полученного, НО ! на любые данные она реагирует, что данные строковые, кроме тех, что читаются из бинарного файла =) | Всего записей: 12 | Зарегистр. 02-06-2009 | Отправлено: 13:04 09-06-2009 | Исправлено: moto25ru, 13:12 09-06-2009 |
|