Un frontal SOCKS5 pot utilitzar un proxy HTTP com a transport posterior. Actua com a servidor SOCKS envers el client i com a client HTTP CONNECT envers el pare. Els dos intercanvis de control acaben abans que comenci el flux de l'aplicació.

La sol·licitud SOCKS CONNECT ja proporciona l'amfitrió o l'adreça de destinació i el port. Per a un intercanvi HTTP/1.1 il·lustratiu amb el pare:

client → adapter: SOCKS5 CONNECT service.example.net:443
adapter → parent:
    CONNECT service.example.net:443 HTTP/1.1
    Host: service.example.net:443

parent → adapter: HTTP/1.1 200 Connection Established
                 [end of headers]
adapter → client: SOCKS5 success reply

client ↔ adapter ↔ parent ↔ service: application bytes

Traduïu el resultat a la frontera

L'adaptador completa qualsevol autenticació requerida pel pare i espera el resultat del CONNECT. Una resposta 2xx correcta estableix el túnel del pare. Només llavors ha de retornar la resposta SOCKS d'èxit corresponent al client descendent.

Si el pare rebutja l'operació, envieu una resposta SOCKS de fallada definida i després tanqueu la connexió del client immediatament. SOCKS5 exigeix aquest tancament dins dels deu segons posteriors a la detecció de la fallada. Manteniu l'estat HTTP del pare com a informació de diagnòstic per a l'adaptador. Reenviar aquesta línia d'estat com a dades de l'aplicació posaria un missatge de control HTTP en un flux el client del qual espera un emmarcat SOCKS.

Abans d'un resultat CONNECT correcte, el pare encara parla HTTP, incloent-hi l'emmarcat de qualsevol resposta de repte o d'error. Després del delimitador de capçaleres d'un resultat correcte, la connexió esdevé el túnel; no hi ha cap cos de resposta HTTP per consumir primer.

Preserveu els bytes posteriors a les capçaleres

Una lectura pot contenir alhora el final de les capçaleres del pare i bytes de la destinació. Reteniu aquests bytes addicionals per a l'aplicació descendent. Els protocols en què el servidor parla primer poden saludar immediatament després d'obrir la connexió.

Un cop enviada la resposta SOCKS d'èxit, retransmeteu el flux de l'aplicació en totes dues direccions. L'adaptador no necessita alternar un missatge de client amb un missatge de servidor, ni cal que entengui els registres TLS per reenviar-los. La seva feina de protocol era establir i traduir les dues negociacions de túnel.

Articles relacionats