HTTPTUNNEL
HTTPTUNNEL
.Gnu.httptunnel
PROTOCOLOS
.HTTP.1.1
FAQ DE HTTPTUNNEL
.FAQ.de.httptunnel
HTTPTUNNEL -H --HELP
.htc.-h.--help
.hts.-h.--help
PUERTOS
.Lista.de.puertos.comunes
.Lista.de.aplicaciones.relacionadas.con.puertos
REFERENCIAS
.Referencias
GR33TS
.gr33ts
HTTPUNNEL
<=======>
.Gnu.httptunel
HTTPTUNNEL crea una conexion virtual bidireccional tuneleada
en peticiones de HTTP. Las peticiones de HTTP pueden ser
enviadas atraves de un proxy.
Si por ejemplo te encuentras detras de un firewall que
unicamente te permite ver paginas de internet (puerto 80) y
no te deja correr otros servicios como Kazaa, MSN Messenger,
IRC, Telnet, SSH. Con esta herramienta podras pasar
diferentes conexiones atravez del mismo puerto 80.
Para lo siguiente necesitaras una maquina externa la cual
usaras como tunel para conectarte a la maquina destino. Ej.
Quieres conectarte a un canal de IRC pero en tu red esta
bloqueado el puerto 6667 necesario para la conexion al
servidor irc.red-latina.org...
A localhost cliente (htc)
B maquinatunel servidor (hts)
6667 puerto de IRC
irc.red-latina.org servidor de IRC
A:6667 <--> FIREWALL -> X
El firewall bloquea la salida por ese puerto.
A:80 <==> FIREWALL <==> B:80 <--> irc.red-latina.org:6667
La conexion 192.168.0.2:80 sale por el puerto 80 permitido
por el firewall dirigido a la conexion B:80 quien recibe la
informacion de irc.red-latina.org y la mete en peticiones de
HTTP para ser pasadas atravez del puerto 80.
La forma de transmision por puerto 80 estan reguladas por el
protocolo HTTP, por lo que es necesario hacerle un
encapsulamiento a la informacion de manera que sea
compatible con este protocolo.
El encapsulado es llevado a cabo en la maquina tunel (B) y
es leido por la maquina del cliente (A), es por eso que se
usan los programas htc (cliente) (A) y hts (servidor) (B)
Por parte del servidor es necesario correr:
$ hts -F irc.red-latina.org:6667 80
Por parte del cliente correr:
$ htc -F 80 B:80
PROTOCOLOS
<========>
.HTTP
El protocolo HTTP 1.1 Hyper Text Transfer Protocol (RFC2616)
utilza metodos de peticiones llamados HTTP request, una
peticion de URL, encabezado y contenido. HTTP 1.1 define los
siguientes metodos:
* GET: Obtiene recurso identificado por la peticion de URL
* HEAD: Obtiene encabezado especificado en peticion de URL
* POST: Manda datos al servidor
* PUT: Guarda un recurso en la peticion de URL
* DELETE: Borra recurso identificado por la peticion de URL
* OPTIONS: Obtiene metodos de HTTP que soporta el servidor
* TRACE: Obtiene encabezados mandados por la peticion TRACE
FAQ DE HTTPTUNNEL
<===============>
.FAQ.de.httptunnel
Q: Que es y para que sirve httptunnel?
A: Es un programa para mandar informacion atravez de un
HTTP proxy. En si esto no es muy importante, necesitas un
cliente del programa para crear el "tunel". Por ejemplo
puedes usar telnet para conectarte a una computadora fuera
del proxy.
Q: Como me conecto atravez del proxy?
A:
En el server debes correr hts. Si quisieras redirigir el
trafico del 80 (http) al puerto 23 (telnet) pondrias algo
asi:
hts -F server.test.com:23 80
En el cliente debes correr htc. Si te conectaras atraves de
un proxy utiliza la opcion -P.
htc -P proxy.corp.com:80 -F 22 server.test.com:80
Un telnet a localhost mandara el trafico por el puerto 80
del proxy server al puerto 80 del server, y de regreso a tu
puerto 23.
Q: httptunnel crashea mi SuSE 5.3, porque?
A: No se, pero actualizar a 6.0 ayuda.
Q: Puse 'hts -d /dev/ptyq1' pero 'cat </dev/ptyq1'
marca error.
A: Usa 'cat </dev/ttyq1'.
Q: Mi amigo corre hts en el puerto 8888, pero cuando
me intento conectar me marca error.
A: hts no maneja tunneles multiples. Puedes correr
otro proceso de hts.
Q: Mi firewall requiere HTTP user authentication (y
no es soportado por httptunnel). Planean algun dia incluir
soporte?
A: Si.
Q: Que tan dificil seria implementar hts como un cgi
en un servidor de web normal?
A:
hts no puede ser llamado directamente del HTTP server,
porque abriria demasiadas conexiones en el lifetime del
tunnel. Si el HTTP server ejecuta nuevas instancias,de hts
cada ves que se hace un request no se tendria acceso al hts
anterior.
De todas formas un proxy CGI que mande el request a un hts
normal esuchando en un puerto diferente al 80 seria algo
facil de hacer.
Q: Has pensado en implementar HTTPS?
A: Ha sido sugerido, pero es preferible usas software
externo para realizar la encripcion.
Q: En REMOTE (brugd.ctrl-c.liu.se) hago lo siguiente:
hts -F localhost:23 8888
Esto funciono bien la primera vez, y ahora me marca:
hts: couldn't create tunnel
A: El proceso sigue corriendo en el backgroud.
Q:
En LOCAL (dhcp-XXX.enea.se) hago:
htc -F 2323 -P
Necesitas ser usuario para ver los enlaces
Crear Usuario Hacer Sesion brugd.ctrl-c.liu.se:8888
Y ahora intento:
[root @localhost httptunnel-1.101]# telnet localhost 2323
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
A: [Christian Brideau]
Necesitas ser usuario para ver los enlaces
Crear Usuario Hacer Sesionno es la direccion del proxy. Esta es la direccion del
Proxy-Auto-Configure (PAC). Este archivo contiene la
direccion del servidor proxy. Para encontrarla solo abre un
browser a cualquier pagina y usa netstat.
Q: Porque falla el 'configure' en HP-UX?
A:
Porque no has instalado GCC. Si
CFLAGS=-O ./configure
no funciona, instala gcc, o cualquier compilador ANSI C.
Q: Cuando uso SSH (o VNC, o <cualquier-otro-programa>)
atravez del httptunnel, El programa se congela despues de un
tiempo. Cuando quiero cerrar el programa y reconectar me
marca un timed out. Que pasa?
Tu conexion de httptunnel ha fallado por parte del cliente,
pero el server no ha detectado que la conexion se ha perdido
y no permitira conexiones hasta que llegue a su time out.
Para establecer un tunel mas estable experimenta con las
opciones de los hts y htc. Las siguientes funcionan bien
para mi:
hts -S --max-connection-age 20000 -F localhost:22 8890
htc -F 8890 --strict-content-length -B 5k
--max-connection-age 2000 -P proxy.mycompany.com:8080
10.1.1.1:8890
Q: Ok, Ya econtre unas opciones que parecen funcionar,
pero me sigue "bloqueando" y tengo que esperar el time out
del server. Existe alguna forma para no tener que esperar?
A:
Tienes que terminar el proceso manualmente, para realizar
esto necesitas una conexion de tipo SSH o Telnet que
funcione dentro del server que corre el hts. Estos ejemplos
fueron creados para cuando tienes 2 o mas tuneles corriendo.
Ahora, cuando se congele vas a conectarte a tu servidor y
terminar el proceso de hts del puerto el cual se te congelo.
En caso de LINUX:
#Usa la opcion 'w' para verlo completo
#y asi puedes determinar cual hts es por el puerto en el que
#corre y poder terminar el proceso con su PID
$ ps aux w|grep hts
my_user_name 7268 0.0 0.3 1692 768 ? S Sep24
0:00 hts -S -F localhost:22 8890
my_user_name 7270 0.0 0.2 1692 744 ? S Sep24
0:00 hts -S -F localhost:22 8891
my_user_name 10515 0.0 0.2 1692 720 ? S 15:37
0:00 hts -S -F localhost:22 8889
my_user_name 10549 0.0 0.2 1624 616 pts/2 S 15:40
0:00 grep hts
#asumimos que es el httptunnel del puerto 8889
$ kill 10515
#reiniciamos hts
$ hts -S -F localhost:22 8889
En caso de WINDOWS (2000, XP):
#Usamos netstat -a -o para ver todas las conexiones
#y los PIDs asociados con cada conexion
> netstat -a -o
Proto Local Address Foreign Address State PID
TCP LOCALHOST:8889 LOCALHOST:0 LISTENING 2696
#suponemos que el hts esta corriendo en el puerto 8889
#identificamos que PID es el asociado con esa conexion 2696
#y lo terminamos con taskkill /F /PID PID
>taskkill /F /PID 2696
SUCCESS: The process with PID 2696 has been terminated.
#y volvemos a inciar el hts como estaba
>hts -S -F localhost:23 8889
Q: Porque me siguen marcando errores el Application
Event Log al usar htc en Windows? Que significa "HTTP
error-503"?
9/24/2001 2:10:15 PM htc Error None 0 N/A MYPC_NAME The
description for Event ID ( 0 ) in Source ( htc ) cannot be
found. The local computer may not have the necessary
registry information or message DLL files to display
messages from a remote computer. The following information
is part of the event: htc : Win32 Process Id = 0x6BC :
Cygwin Process Id = 0x6BC : exit with status = 1.
9/24/2001 2:10:15 PM htc Error None 0 N/A MYPC_NAME The
description for Event ID ( 0 ) in Source ( htc ) cannot be
found. The local computer may not have the necessary
registry information or message DLL files to display
messages from a remote computer. The following information
is part of the event: htc : Win32 Process Id = 0x6BC :
Cygwin Process Id = 0x6BC : couldn't open tunnel: I/O error.
9/24/2001 2:10:15 PM htc Error None 0 N/A MYPC_NAME The
description for Event ID ( 0 ) in Source ( htc ) cannot be
found. The local computer may not have the necessary
registry information or message DLL files to display
messages from a remote computer. The following information
is part of the event: htc : Win32 Process Id = 0x6BC :
http_error_to_errno: HTTP error -503.
9/24/2001 2:10:15 PM htc Error None 0 N/A MYPC_NAME The
description for Event ID ( 0 ) in Source ( htc ) cannot be
found. The local computer may not have the necessary
registry information or message DLL files to display
messages from a remote computer. The following information
is part of the event: htc : Win32 Process Id = 0x6BC :
tunnel_in_connect: HTTP error 503.
A: HTTP 503 significa "Service Unavailable." Servicio
no Disponible, esto sucede en caso que no se pueda conectar
al servidor. En el ejemplo anterior, hts no habia sido
iniciado en el servidor, pero el mismo error puede variar.
HTTPTUNNEL -H --HELP
<==================>
.hts.-h.--help
htc [OPCIONES] HOST[:PORT]
htc realiza una conexion httptunnel al PORT de HOST (el PORT
default es 8888). Cuando se realiza una conexion, el I/O es
redirigido de la fuente especificada por --device o
--forward-port al tunnel.
-h, --help
Muestra las opciones.
-c, --content-length BYTES
usa HTTP PUT con tamano BYTES (k, M, y G son
soportados)
-d, --device DEVICE
usa DEVICE para Input / Output
-F, --forward-port PORT
usa el puerto PORT de TCP para Input / Output
-k, --keep-alive SECONDS
mandar keepalive bytes cada SECONDS segundos (el
default es 5)
-M, --max-connection-age SEC
tiempo maximo que estara abierta una conexion en
SEC segundos (el default es 300)
-S, --strict-content-length
Mandar Content-Length bytes en los HTTP requests
-A, --proxy-authorization USER:PASSWORD
proxy authorization
--proxy-authorization-file FILE
proxy authorization file
-B, --proxy-buffer-size BYTES
asumir un buffer de proxy de BYTES bytes (k, M,
y G son soportados)
-P, --proxy HOSTNAME[:PORT]
usa HTTP proxy (el default es 8080)
-T, --timeout TIME
timeout en milisegundos, antes de mandar el
padding)
-U, --user-agent STRING
especifica el valor de User-Agent en los HTTP
requests
-V, --version
mostrar unicamente la version
.htc.-h.--help
hts [OPCIONES] [:PORT]
Escucha por conexiones entrantes de tipo httptunnel en PORT
(el default es 8888). Cuando se realiza una conexion, el
I/O es redirigido de la fuente especificada por --device o
--forward-port al tunnel.
-h, --help
Muestra las opciones.
-c, --content-length BYTES
usa HTTP PUT con tamano BYTES (k, M, y G son
soportados)
-d, --device DEVICE
usa DEVICE para Input / Output
-F, --forward-port HOST:PORT
conecta al PORT de HOST y lo usa para la conexion
input / output
-k, --keep-alive SECONDS
send keepalive bytes every SECONDS seconds
(el default es 5)
-M, --max-connection-age SEC
tiempo maximo que se quedara la conexion abierta
en segundos (el default es 300)
-s, --stdin-stdout
usar stdin/stdout para la comunicacion
(implica --no-daemon)
-S, --strict-content-length
Escribir Content-Length bytes en los requests
-V, --version
muestra la version.
-w, --no-daemon
No irse al background
-p, --pid-file LOCATION
Escribe un PID file a LOCATION.
PUERTOS
<=====>
Algunos puertos llamados well know services tienen
protocolos asociados con ellos, la combinacion de puerto
y protocolo es lo que realiza la conexion.
.Lista corta de puertos comunes:
21 (File Transfer Protocol, FTP)
22 (Secure Shell, SSH)
23 (Telnet)
25 (Simple Mail Transfer Protocol, SMTP)
69 (Trivial File Transfer Protocol, tftp)
79 (finger)
80 (Hypertext Transfer Protocol, HTTP)
110 (Post Office Protocol v3, POP3)
119 (Network News Protocol, NNTP)
161 y 162 (Simple Network Management Protocol, SNMP)
443 (Secure Sockets Layer over HTTP, https)
Para ver una lista completa de los puertos conocidos (well
known services) puedes visitar:
Necesitas ser usuario para ver los enlaces
Crear Usuario Hacer Sesion.
.Lista.de.aplicaciones.relacionadas.con.puertos
1214 fasttrack (Kazaa, ...)
1863 MSN Messenger
5190 ICQ, AOL Instant Messenger
6667 IRC (mIRC, ...)
REFERENCIAS
<=========>
GNU HTTPTUNNEL es una herramienta desarrollada y mantenida
por Lars Brinkhoff de
Necesitas ser usuario para ver los enlaces
Crear Usuario Hacer Sesionwww.nocrew.org
. HTTPTUNNEL es software
libre bajo la licencia de GNU General Public Licence.
Este texto se llevo acabo previa autorizacion escrita del
Autor original, en este caso Lars Brinkhoff lars[]nocrew.org
Para detalles y colaboracion se encuentra mas info en el
archivo AUTHORS dentro del .tar.
Puedes Bajar el HTTPTUNNEL para:
Debian GNU/Linux
Necesitas ser usuario para ver los enlaces
Crear Usuario Hacer SesionwinNT win2000
Necesitas ser usuario para ver los enlaces
Crear Usuario Hacer Sesionwin32
Necesitas ser usuario para ver los enlaces
Crear Usuario Hacer SesionGnu_Http_Tunnel_3_3.zip
RPMs
Necesitas ser usuario para ver los enlaces
Crear Usuario Hacer SesionGNU Httptunnel.
Necesitas ser usuario para ver los enlaces
Crear Usuario Hacer SesionGNU Httptunnel FAQ (eng)
Necesitas ser usuario para ver los enlaces
Crear Usuario Hacer SesionGNU Copyleft
Necesitas ser usuario para ver los enlaces
Crear Usuario Hacer SesionHTTP 1.1 RFC
Necesitas ser usuario para ver los enlaces
Crear Usuario Hacer SesionAGRADECIMIENTOS
<=============>
Thanx Lars.
Y gr33ts para todos:
hd, freetv1, taer, acid_phreak, AVA, Crypkey, darko, Dekar,
Haifa, hiryuu, mcherem, Napa, Obscure Cloud, rem7, vision,
Creado por flux. (Ex usuario de este foro)
Necesitas ser usuario para ver los enlaces
Crear Usuario Hacer SesionExpuesto por Sonico