Datei über Proxy Verbindung Herunterladen
Datei über Proxy Verbindung Herunterladen
Es ist ja bekannt das die PB HTTP LIB keine Proxy Verbindungen unterstützt, aber wie kann ich (ohne API am besten) eine Datei runterladen aus dem WWW mit aktiven Proxy ?
Beim Suchen bin ich auf den Auto Updater von HeX0R gekommen
> http://purebasic.fr/german/viewtopic.php?t=18904
Source hab ich mir mal angeschaut, den HTTP Download Teil sticht finde ich nicht wirklich raus, da ich nich weiß welche Teile ich alles brauche.
Gibt es irgendwo ein einfaches Beispiel wie ich eben eine Datei über eine Proxy Verbindung runterladen kann.
Würde mich über ein Beispiel/Link etc. freuen.
Die Info ob eine Proxy aktiv ist steht doch in der Registry oder ?
Wenn ja dann bräuchte das Programm ab Vista ja admin rechte oder ?
Beim Suchen bin ich auf den Auto Updater von HeX0R gekommen
> http://purebasic.fr/german/viewtopic.php?t=18904
Source hab ich mir mal angeschaut, den HTTP Download Teil sticht finde ich nicht wirklich raus, da ich nich weiß welche Teile ich alles brauche.
Gibt es irgendwo ein einfaches Beispiel wie ich eben eine Datei über eine Proxy Verbindung runterladen kann.
Würde mich über ein Beispiel/Link etc. freuen.
Die Info ob eine Proxy aktiv ist steht doch in der Registry oder ?
Wenn ja dann bräuchte das Programm ab Vista ja admin rechte oder ?
Hier mal ein Code mit dem man sich über einen HTTP/Socks4/Socks5 Proxy, IPVv4 & IPv6 verbinden kann. Leider weiß ich nicht mehr wo ich den Code gefunden hab, Credits an den Autor:
Die Connection-ID kann man dann mit den normalen PB - Netzwerkbefehlen verwenden.
Die Connection-ID kann man dann mit den normalen PB - Netzwerkbefehlen verwenden.
Code: Alles auswählen
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
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
FreeMemory(*buffer)
ProcedureReturn netid
EndSelect
EndProcedure
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Das findest du unter:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
ProxyEnable - Proxy aktiviert (REG_DWORD)
ProxyServer - ProxyServer IP:Port (REG_SZ)
Der Proxy-Server muss eigentlich ein HTTP-Proxy sein.
Mit dem Registry Codes die im Forum rumschwirren sollte der Rest kein Problem mehr sein.
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
ProxyEnable - Proxy aktiviert (REG_DWORD)
ProxyServer - ProxyServer IP:Port (REG_SZ)
Der Proxy-Server muss eigentlich ein HTTP-Proxy sein.
Mit dem Registry Codes die im Forum rumschwirren sollte der Rest kein Problem mehr sein.
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Dann braucht das Programm aber Admin Mode unter Vista/Win7 oder ?
Gibts keine andere Möglichkeit ?
EDIT
OK selber testen bringt doch immer noch am meisten
Nur eine frage
Die Abfrage ob eine Proxy Verbinung an sind gibt mir kein Ergebnis zurück, liegt das an dem Typ ?
Gibts keine andere Möglichkeit ?
EDIT
OK selber testen bringt doch immer noch am meisten

Nur eine frage
Code: Alles auswählen
Procedure.s ReadReg(HKEY, Ort$, Var$)
RetVal = RegOpenKeyEx_(HKEY, Ort$, 0, #KEY_ALL_ACCESS, @lhkey)
cch = 255 : sValue$ = Space(255)
lType = #REG_SZ
lrc = RegQueryValueEx_(lhkey, Var$, 0, @lType, @sValue$, @cch)
RegCloseKey_(lhkey)
ProcedureReturn sValue$
EndProcedure
Debug ReadReg(#HKEY_CURRENT_USER,"Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyEnable")
Debug ReadReg(#HKEY_CURRENT_USER,"Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyServer")
- HeX0R
- Beiträge: 3040
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Danke!cxAlex hat geschrieben: [...]
Credits an den Autor
[...]

Übrigens:
Wenn du anstatt #KEY_ALL_ACCESS, #KEY_READ nimmst, brauchst du auch keine Adminrechte.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
Super Code

Hab ihn mal schnell überarbeitet, Enable Explicit - kompatibel und ein paar andere Späße:
Code: Alles auswählen
; EnableExplicit
; InitNetwork()
Procedure IsIP(ip.s)
Protected count, ret, i, a$, va
;ReturnValues :
;0 = no ip
;1 = IPv4 - IP
;2 = IPv6 - IP
count = CountString(ip, ".")
If count = 3
ret = 1
ElseIf count = 5
ret = 2
Else
ProcedureReturn 0
EndIf
For i = 0 To count
a$ = StringField(ip, i + 1, ".")
va = Val(a$)
If a$ = "" Or Str(va)<>a$ Or va>255 Or va<0
ProcedureReturn 0
EndIf
Next i
ProcedureReturn ret
EndProcedure
; führt einen DNS - Lockup aus
Procedure DNS_Lookup(Host$)
Protected ret, *host.hostent
*host = gethostbyname_(host$)
If *host
ret = PeekL(PeekL(*host\h_addr_list))
Else
ret = *host
EndIf
ProcedureReturn ret
EndProcedure
Structure ByteArray
*b.b[0]
EndStructure
Procedure Proxy_Connect(proxy_ip.s, proxy_port.l, ip_to_connect.s, port_to_connect.l, type.l, username.s, userpass.s, timeout.l)
Protected *buffer.ByteArray, netid, text$, user$, length, encoded$, check_timeout, Content$, Result, i, a$
Protected hi, lo, ver, CD, Port, method, k, cont, reply, reserved, atyp, passver, status, cnts
;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
proxy_ip = IPString(DNS_Lookup(proxy_ip))
ip_to_connect = IPString(DNS_Lookup(ip_to_connect))
*buffer = AllocateMemory(1024)
If *buffer = 0
ProcedureReturn #False
EndIf
netid = 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 = 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 = ElapsedMilliseconds() + (timeout*1000) ; Timeout
Repeat
Delay(10)
If NetworkClientEvent(netid) = #PB_NetworkEvent_Data
Content$ = Space(14500)
length = ReceiveNetworkData(netid, @Content$, 14500)
While length = 14500
;Clear Input-Buffer
length = ReceiveNetworkData(netid, *buffer, 14500)
Wend
Break
EndIf
Until check_timeout<ElapsedMilliseconds()
Result = 0
cnts = CountString(Content$, Chr(10))
For i = 1 To cnts
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
*buffer\b[0] = 4
*buffer\b[1] = 1
hi = Int(port_to_connect/256)
lo = port_to_connect-(256*hi)
*buffer\b[2] = hi
*buffer\b[3] = lo
For i = 1 To 4
*buffer\b[3 + i] = Val(StringField(ip_to_connect, i, ".")) & 255
Next i
PokeS(*buffer + 8, username)
length = 9 + Len(username)
SendNetworkData(netid, *buffer, length)
;Check if connection is established
check_timeout = ElapsedMilliseconds() + (timeout*1000)
Repeat
Delay(10)
If NetworkClientEvent(netid) = #PB_NetworkEvent_Data
ReceiveNetworkData(netid, *buffer, 1024)
ver = *buffer\b[0] & 255
CD = *buffer\b[1] & 255
port = (*buffer\b[2] & 255)*256
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
FreeMemory(*buffer)
ProcedureReturn netid
Case 2
;====================
;Socks5 - Proxy
;====================
;Phase 1 SOCK5
;Send wished method
If username = "" And userpass = ""
length = 3
*buffer\b[0] = 5
*buffer\b[1] = 1
*buffer\b[2] = 0
Else
length = 4
*buffer\b[0] = 5
*buffer\b[1] = 2
*buffer\b[2] = 0
*buffer\b[3] = 2
EndIf
SendNetworkData(netid, *buffer, length)
;Check if method is allowed
check_timeout = ElapsedMilliseconds() + (timeout*1000)
Repeat
Delay(10)
If NetworkClientEvent(netid) = 2
ReceiveNetworkData(netid, *buffer, 2)
ver = *buffer\b[0] & 255
method = *buffer\b[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)
*buffer\b[0] = 1
*buffer\b[1] = Len(username)
PokeS(*buffer + 2, username)
k = 2 + Len(username)
*buffer\b[k] = Len(userpass)
PokeS(*buffer + k + 1, userpass)
SendNetworkData(netid, *buffer, Len(userpass) + 1 + k)
;Check if Username/Password is accepted
check_timeout = ElapsedMilliseconds() + (timeout*1000)
Repeat
Delay(10)
If NetworkClientEvent(netid) = #PB_NetworkEvent_Data
ReceiveNetworkData(netid, *buffer, 2)
passver = *buffer\b[0] & 255
status = *buffer\b[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
*buffer\b[0] = 5
*buffer\b[1] = 1
*buffer\b[2] = 0
Select IsIP(ip_to_connect)
Case 0
*buffer\b[3] = 4
*buffer\b[4] = Len(ip_to_connect)
cnts = Len(ip_to_connect)
For i = 1 To cnts
*buffer\b[4 + i] = Asc(Mid(ip_to_connect, i, 1))
Next i
cont = 4 + i
Case 1
*buffer\b[3] = 1
For i = 1 To 4
*buffer\b[3 + i] = Val(StringField(ip_to_connect, i, ".")) & 255
Next i
cont = 8
Case 2
*buffer\b[3] = 4
For i = 1 To 6
*buffer\b[3 + i] = Val(StringField(ip_to_connect, i, ".")) & 255
Next i
cont = 10
EndSelect
hi = Int(port_to_connect/256)
lo = port_to_connect-(256*hi)
*buffer\b[cont] = hi
*buffer\b[cont + 1] = lo
SendNetworkData(netid, *buffer, cont + 2)
;Now Check the reply
check_timeout = ElapsedMilliseconds() + (timeout*1000)
Repeat
Delay(10)
If NetworkClientEvent(netid) = #PB_NetworkEvent_Data
length = ReceiveNetworkData(netid, *buffer, 1024)
ver = *buffer\b[0] & 255
reply = *buffer\b[1] & 255
reserved = *buffer\b[2] & 255
atyp = *buffer\b[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
FreeMemory(*buffer)
ProcedureReturn netid
EndSelect
EndProcedure
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
- HeX0R
- Beiträge: 3040
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Naja, ich würde einiges davon heute anders machen.cxAlex hat geschrieben: Super Code.
Aber ist ja auch nen 5 Jahre alter Code.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
Mich würde ja intressieren wieso mein zusammengebastler Code nicht geht.
Habs mit verschiedenen Proxys versucht, als Ergebnis bekomme ich jedes mal 0 aus.
Meine weitere frage wäre jetzt, selbst wenn es gehen würde, wie würde ich an die Datei rankommen ?
Z.b http://purebasic.fr/german/templates/Ap ... _phpBB.gif
Habs mit verschiedenen Proxys versucht, als Ergebnis bekomme ich jedes mal 0 aus.
Meine weitere frage wäre jetzt, selbst wenn es gehen würde, wie würde ich an die Datei rankommen ?
Z.b http://purebasic.fr/german/templates/Ap ... _phpBB.gif
Code: Alles auswählen
InitNetwork()
Procedure.l Proxy_Connect(proxy_ip.s, proxy_port.l, ip_to_connect.s, port_to_connect.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
;====================
;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
EndProcedure
url$ = "http://purebasic.fr"
ip$ = "138.246.99.250"
port = 3127
Debug Proxy_Connect(ip$, port,url$, 80 ,"", "",10)
- HeX0R
- Beiträge: 3040
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Du kannst doch selbst schauen, was der Proxy von deinem Verbindungsversuch hält.
Dein genannter z.B. sagt:
Dein genannter z.B. sagt:
138.246.99.250 hat geschrieben: HTTP/1.0 405 Method Not Allowed
Content-Type: text/html
Allow: GET
You are trying to use a node of the CoDeeN CDN Network. Your IP address is not recognized as a valid PlanetLab address, so your access to CoDeeN does not include all HTTP types [...]
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}