inververs
AutoIT Гуру
- Сообщения
- 2,135
- Репутация
- 465
Как сделать свой прокси сервер, который должен работать только на прослушку трафика в обе стороны?
Я понимаю что это будет очень медлено, но все таки хочется попробывать.
Вот что набросал:
Но как то криво Не понятно как определять что все данные получены.
Я понимаю что это будет очень медлено, но все таки хочется попробывать.
Вот что набросал:
Код:
OnAutoItExitRegister("OnAutoItExit")
HotKeySet('{F11}', 'OnAutoItExit')
TCPStartup()
$stop = 0
Local $iListenSocket = TCPListen('127.0.0.1', 56888)
If @error Then Exit MsgBox(0,'Ошибка '& @error,'Нельзя слушать этот парт и адрес')
Local $sReceived
Do
Do
$iSocket = TCPAccept($iListenSocket)
If @error Then Exit 99
Sleep(10)
Until $iSocket <> -1
ConsoleWrite('> Кто то подключился' & @LF)
$sReceived = ''
Do
$sReceived = TCPRecv($iSocket, 2048 * 60) ;получаем часть сообщения сервера
If $sReceived Then ExitLoop
Sleep(10)
Until 0
$sReceived &= TCPRecv($iSocket, 2048 * 60)
$aHost = StringRegExp($sReceived, 'Host: (.+?)\s+', 1)
$sReceived = StringRegExpReplace($sReceived, '(?m)Accept-Encoding: .+\r?\n', '') ;нам не нужен GZIP
ConsoleWrite($sReceived & @LF) ;Запрос
If IsArray($aHost) Then
$iSocket2 = TCPConnect(TCPNameToIP($aHost[0]), 80) ;Порты могут быть другие
TCPSend($iSocket2, $sReceived)
$sData = ''
$iTimer = TimerInit() ;запускаем таймер
Do
$sBuffer = TCPRecv($iSocket2, 2048 * 6) ;получаем часть сообщения сервера
$iError = @error
If Not $sBuffer = '' Then ;если удалось получить сообщение
$sData &= $sBuffer ;сохраняем полученное сообщение
$iTimer = TimerInit() ;обнуляем таймер
EndIf
Until $iError <> 0 Or TimerDiff($iTimer) > 1000 ;если при получении сообщения произошла ошибка (данные получены, соединение закрыто) или в течении 5 секунд ничего не было получено, выход из цикла
;~ ConsoleWrite($sData & @LF) ;Ответ
Else
$sData = 'Запрос не выполнялся'
EndIf
TCPSend($iSocket, $sData)
TCPCloseSocket($iSocket)
Until $stop
Func OnAutoItExit()
$stop = True
TCPCloseSocket($iListenSocket)
TCPShutdown()
EndFunc ;==>OnAutoItExit
Но как то криво Не понятно как определять что все данные получены.