Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > PureBasic

PureBasic Мощный кросс-платформенный язык среднего уровня на основе BASIC. Подходит для решения широкого круга задач.

Ответ
 
Опции темы
Старый 05.04.2009, 18:54   #1
Slepetc
Нуждающийся
 
Аватар для Slepetc
 
Регистрация: 05.07.2008
Сообщений: 53
Написано 6 полезных сообщений
(для 7 пользователей)
Прокси.

Народ, может кто-нить пояснить, как слать пакеты через прокси? Если быть точнее, то пост запросы. Ну очень надо.
__________________
...
(Offline)
 
Ответить с цитированием
Старый 08.05.2009, 06:13   #2
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: Прокси.

<? 
$proxy = "1.1.1.1";  
$port = "8080"; 

$fp = fsockopen($proxy, $port, $errno, $errstr, 30);  
if($fp) 

    $data        = "post=ok"; 
    $headers  = "POST $path HTTP/1.1\r\n";  
    $headers .= "Host: $hostname\r\n";  
    $headers .= "Content-type: application/x-www-form-urlencoded\r\n"; 
    $headers .= "Content-Length: ".strlen($data)."\r\n"; 
    $headers .= "Connection: close\r\n\r\n"; 
      
    $fw = fwrite($fp, $headers.$data); 
    fclose($fp); 
} else die; 
?>
Это у нас на php.
Аналогию думаю не трудно реализовать и на любом другом языке.
Значит так...
заранее говорю что не знаю какие команды по этой теме есть в PB, да и вобще я его в глаза не видел ни разу.
после директивы HOST: заместо $hostname ставь хост.
$path - путь до штукидрюки в которую данные посылаем.
strlen($data) - меняем на размер посылаемых данных (len() length())
После посылки запроса читай прямо из этого сокета и будет всё ок.
ЗЫ Переборщик пишешь?
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti

Последний раз редактировалось Randomize, 08.05.2009 в 06:19.
(Offline)
 
Ответить с цитированием
Старый 08.05.2009, 16:58   #3
Slepetc
Нуждающийся
 
Аватар для Slepetc
 
Регистрация: 05.07.2008
Сообщений: 53
Написано 6 полезных сообщений
(для 7 пользователей)
Ответ: Прокси.

Спс.
Нет, просто было интересно.
З.Ы. Вот интересный пример, может кому пригодится.
; English forum: http://www.purebasic.fr/english/viewtopic.php?t=13520
; Author: HeX0R
; Date: 28. December 2004
; OS: Windows
; Demo: No


; http, SOCKS4,5 - Proxy-Connection
; ---------------------------------
; The user / pass - authorization is untested, cause it's really difficult
; to find such proxys.
; User comment: "Invaluable for networking apps where you may need to connect
;                via a user defined proxy like an IRC client...."


;+----------------------------------+
; Proxy_Connect
;
; (c)HeX0R 2004
;
; Procedure for giving your online-applications the
; possibility to connect through different proxys
; like http, socks4 and socks5.
;
; NOT meant for connecting to websites!
; For this check Num3's example here:
; http://purebasic.myforums.net/viewtopic.php?t=10327
;
;+----------------------------------+

InitNetwork()

Procedure.l IsIP( ip.s )
  ;ReturnValues :
  ;0 = no ip
  ;1 = IPv4 - IP
  ;2 = IPv6 - IP
  count.l = CountString(ip, ".")
  If count = 3
    ret.l = 1
  ElseIf count = 5
    ret.l = 2
  Else
    ProcedureReturn 0
  EndIf
  For i = 0 To count
    a$ = StringField(ip, i + 1, ".")
    If a$ = "" Or Str(Val(a$)) <> a$ Or Val(a$) > 255 Or Val(a$) < 0
      ProcedureReturn 0
    EndIf
  Next i
  ProcedureReturn ret
EndProcedure

Procedure.l Proxy_Connect( proxy_ip.s, proxy_port.l, ip_to_connect.s, port_to_connect.l, type.l, username.s, userpass.s, timeout.l )
  ;proxy_ip        = IP or URL of the Proxy-Server
  ;proxy_port      = Port of the Proxy-Server
  ;ip_to_connect   = IP or URL of where you want to connect through proxy. ATTENTION:
  ;  SOCKS4 only supports IP in IPv4-format! You have to get the IP first before using this on urls, otherwise it will fail!
  ;port_to_connect = Port of where you want to connect through proxy
  ;type            = 0 -> http-proxy
  ;type            = 1 -> socks4-proxy
  ;type            = 2 -> socks5-proxy
  ;If no authorization is needed set username and userpass = ""
  ;timeout         -> Time after connection-trial will time out (in SECONDS)
  ;Return-Value    = 0 -> error ; Return-Value > 0 -> ConnectionID
 
  *buffer = AllocateMemory(1024)
  If *buffer = 0
    ProcedureReturn #False
  EndIf
 
  netid.l = OpenNetworkConnection(proxy_ip, proxy_port)
 
  If netid = 0
    FreeMemory(*buffer)
    ProcedureReturn #False
  EndIf

  Select type
 
    Case 0
      ;====================
      ;-HTTP - Proxy
      ;====================
      ;Based on Num3's http-proxy-snippet , THX! ->
      ;http://purebasic.myforums.net/viewtopic.php?t=10327
     
      text$ = "CONNECT " + ip_to_connect + ":" + Str(port_to_connect) + " HTTP/1.0" + #CRLF$
     
      If username And userpass
        user$ = username + ":" + userpass
        length.l = Len(user$) * 2
        If length < 64
          length = 64
        EndIf
        Base64Encoder(@user$, Len(user$), *buffer, length)
        encoded$ = PeekS(*buffer)
        text$ + "Authorization: Basic " + encoded$ + #CRLF$
        text$ + "Proxy-Authorization: Basic " + encoded$ + #CRLF$
      EndIf
      text$ + #CRLF$

      SendNetworkData(netid, @text$, Len(text$))
      check_timeout.l = ElapsedMilliseconds() + ( timeout * 1000 )
      Repeat
        Delay(10)
        If NetworkClientEvent(netid) = 2
          Content$ = Space(14500)
          length.l = ReceiveNetworkData(netid, @Content$, 14500)
          While length = 14500
            ;Clear Input-Buffer
            length = ReceiveNetworkData(netid, *buffer, 14500)
          Wend
          Break
        EndIf
      Until check_timeout < ElapsedMilliseconds()
      Result.l = 0
      For i = 1 To CountString(Content$, Chr(10))
        a$ = Trim(StringField(Content$, i, Chr(10)))
        If Left(a$, 7) = "HTTP/1."
          Result = Val(StringField(Content$, 2, Chr(32)))
          Break
        EndIf
      Next i
      If check_timeout < ElapsedMilliseconds() Or Result <> 200
        FreeMemory(*buffer)
        CloseNetworkConnection(netid)
        ProcedureReturn #False
      EndIf
      FreeMemory(*buffer)
      ProcedureReturn netid

    Case 1
      ;====================
      ;-Socks4 - Proxy
      ;====================
     
      ;Socks4 only supports IPv4 !
      ;You have to do a DNS-Lookup before using this on urls, otherwise it will fail!
      If IsIP(ip_to_connect) <> 1
        FreeMemory(*buffer)
        CloseNetworkConnection(netid)
        ProcedureReturn #False
      EndIf
      ;-Phase 1 SOCK4
      ;Send Request
      PokeB(*buffer, 4)
      PokeB(*buffer + 1, 1)
      hi.l = Int(port_to_connect / 256)
      lo.l = port_to_connect - (256 * hi)
      PokeB(*buffer + 2, hi)
      PokeB(*buffer + 3, lo)
      For i = 1 To 4
        PokeB(*buffer + 3 + i, Val(StringField(ip_to_connect, i, ".")) & 255)
      Next i
      PokeS(*buffer + 8, username)
      length.l = 9 + Len(username)
      SendNetworkData(netid, *buffer, length)
      ;Check if connection is established
      check_timeout.l = ElapsedMilliseconds() + ( timeout * 1000 )
      Repeat
        Delay(10)
        If NetworkClientEvent(netid) = 2
          ReceiveNetworkData(netid, *buffer, 1024)
          ver.l = PeekB(*buffer) & 255
          CD.l = PeekB(*buffer + 1) & 255
          port.l = (PeekB(*buffer + 2) & 255) * 256
          port + (PeekB(*buffer + 3) & 255)
          ip.s = Str(PeekB(*buffer + 4) & 255) + "." + Str(PeekB(*buffer + 5) & 255) + "."
          ip + Str(PeekB(*buffer + 6) & 255) + "." + Str(PeekB(*buffer + 7) & 255)
          Break
        EndIf
      Until check_timeout < ElapsedMilliseconds()
      If check_timeout < ElapsedMilliseconds() Or ver <> 0 Or CD <> 90
        FreeMemory(*buffer)
        CloseNetworkConnection(netid)
        ProcedureReturn #False
      EndIf
      ;IP and Port should be the same like ip_to_connect/port_to_connect and is just for information
      Debug "Connected to IP:" + ip
      Debug "Connected to Port:" + Str(port)
      FreeMemory(*buffer)
      ProcedureReturn netid
     
    Case 2
      ;====================
      ;-Socks5 - Proxy
      ;====================

      ;-Phase 1 SOCK5
      ;Send wished method
      If username = "" And userpass = ""
        length.l = 3
        PokeB(*buffer, 5)
        PokeB(*buffer + 1, 1)
        PokeB(*buffer + 2, 0)
      Else
        length.l = 4
        PokeB(*buffer, 5)
        PokeB(*buffer + 1, 2)
        PokeB(*buffer + 2, 0)
        PokeB(*buffer + 3, 2)
      EndIf
      SendNetworkData(netid, *buffer, length)
      ;Check if method is allowed
      check_timeout.l = ElapsedMilliseconds() + ( timeout * 1000 )
      Repeat
        Delay(10)
        If NetworkClientEvent(netid) = 2
          ReceiveNetworkData(netid, *buffer, 2)
          ver.l = PeekB(*buffer) & 255
          method.l = PeekB(*buffer + 1) & 255
          Break
        EndIf
      Until check_timeout < ElapsedMilliseconds()
      If check_timeout < ElapsedMilliseconds() Or ver <> 5 Or method = 255
        FreeMemory(*buffer)
        CloseNetworkConnection(netid)
        ProcedureReturn #False
      EndIf
      If method = 2
        ;-Phase 2 SOCK5
        ;Send Username/Password (if allowed)
        PokeB(*buffer, 1)
        PokeB(*buffer + 1, Len(username))
        PokeS(*buffer + 2, username)
        k = 2 + Len(username)
        PokeB(*buffer + k, Len(userpass))
        PokeS(*buffer + k + 1, userpass)
        SendNetworkData(netid, *buffer, Len(userpass) + 1 + k)
        ;Check if Username/Password is accepted
        check_timeout.l = ElapsedMilliseconds() + ( timeout * 1000 )
        Repeat
          Delay(10)
          If NetworkClientEvent(netid) = 2
            ReceiveNetworkData(netid, *buffer, 2)
            passver.l = PeekB(*buffer) & 255
            status.l = PeekB(*buffer + 1) & 255
            Break
          EndIf
        Until check_timeout < ElapsedMilliseconds()
        If check_timeout < ElapsedMilliseconds() Or passver <> 1 Or status <> 0
          FreeMemory(*buffer)
          CloseNetworkConnection(netid)
          ProcedureReturn #False
        EndIf
      EndIf
      ;-Phase 3 SOCK5
      ;Send Connect-Request
      PokeB(*buffer, 5)
      PokeB(*buffer + 1, 1)
      PokeB(*buffer + 2, 0)
      Select IsIP( ip_to_connect )
        Case 0
          PokeB(*buffer + 3, 3)
          PokeB(*buffer + 4, Len(ip_to_connect))
          For i = 1 To Len(ip_to_connect)
            PokeB(*buffer + 4 + i, Asc(Mid(ip_to_connect, i, 1)))
          Next i
          cont.l = 4 + i
        Case 1
          PokeB(*buffer + 3, 1)
          For i = 1 To 4
            PokeB(*buffer + 3 + i, Val(StringField(ip_to_connect, i, ".")) & 255)
          Next i
          cont.l = 8
        Case 2
          PokeB(*buffer + 3, 4)
          For i = 1 To 6
            PokeB(*buffer + 3 + i, Val(StringField(ip_to_connect, i, ".")) & 255)
          Next i
          cont.l = 10
      EndSelect
      hi.l = Int(port_to_connect / 256)
      lo.l = port_to_connect - (256 * hi)
      PokeB(*buffer + cont, hi)
      PokeB(*buffer + cont + 1, lo)
      SendNetworkData(netid, *buffer, cont + 2)
      ;Now Check the reply
      check_timeout.l = ElapsedMilliseconds() + ( timeout * 1000 )
      Repeat
        Delay(10)
        If NetworkClientEvent(netid) = 2
          length.l = ReceiveNetworkData(netid, *buffer, 1024)
          ver.l = PeekB(*buffer) & 255
          reply.l = PeekB(*buffer + 1) & 255
          reserved.l = PeekB(*buffer + 2) & 255
          atyp.l = PeekB(*buffer + 3) & 255
          Break
        EndIf
      Until check_timeout < ElapsedMilliseconds()
      If check_timeout < ElapsedMilliseconds() Or ver <> 5 Or reply <> 0 Or reserved <> 0
        FreeMemory(*buffer)
        CloseNetworkConnection(netid)
        ProcedureReturn #False
      EndIf
      Select atyp
        Case 1
          ;IPv4
          ip.s = Str(PeekB(*buffer + 4) & 255) + "." + Str(PeekB(*buffer + 5) & 255) + "."
          ip + Str(PeekB(*buffer + 6) & 255) + "." + Str(PeekB(*buffer + 7) & 255)
          port.l = (PeekB(*buffer + 8) & 255) * 256
          port + (PeekB(*buffer + 9) & 255)
        Case 3
          ;Name
          ip.s = ""
          For i = 1 To (PeekB(*buffer + 4) & 255)
            ip + Chr(PeekB(*buffer + 4 + i) & 255)
          Next i
          port.l = (PeekB(*buffer + 4 + i) & 255) * 256
          port + (PeekB(*buffer + 5 + i) & 255)
        Case 4
          ;IPv6
          ip.s = Str(PeekB(*buffer + 4) & 255) + "." + Str(PeekB(*buffer + 5) & 255) + "."
          ip + Str(PeekB(*buffer + 6) & 255) + "." + Str(PeekB(*buffer + 7) & 255)  + "."
          ip + Str(PeekB(*buffer + 8) & 255) + "." + Str(PeekB(*buffer + 9) & 255)
          port.l = (PeekB(*buffer + 10) & 255) * 256
          port + (PeekB(*buffer + 11) & 255)
      EndSelect
      ;Following IP and Port is just for information...
      ;this is proxy-internal and not necessarily the same as ip_to_connect/port_to_connect
      Debug "Internal Proxy-IP:" + ip
      Debug "Internal Proxy-Port:" + Str(port)
      FreeMemory(*buffer)
      ProcedureReturn netid

  EndSelect

EndProcedure 

Debug Proxy_Connect("80.250.244.179",8080 ,"google.ru", 80,0,"","",3)
__________________
...
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Randomize (21.05.2009)
Старый 08.05.2009, 19:16   #4
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: Прокси.

Да тут пример по круче, мягко новоря.
Тут ещё и соксификация.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связь через прокси Progger_Leo 2D-программирование 3 21.07.2007 22:24


Часовой пояс GMT +4, время: 23:22.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com