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 ) 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: http://www.iana.org/assignments/port-numbers. .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 www.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 http://packages.debian.org/httptunnel winNT win2000 http://userpages.umbc.edu/~tmoses1/hypertunnelNT.zip win32 http://eduardo.cobian.free.fr/gnuht/Win32/ Gnu_Http_Tunnel_3_3.zip RPMs http://www.geocities.com/patola_br/httptunnel/ GNU Httptunnel. http://www.nocrew.org/software/httptunnel.html GNU Httptunnel FAQ (eng) http://www.nocrew.org/software/httptunnel/faq.html GNU Copyleft http://www.gnu.org/copyleft/gpl.html HTTP 1.1 RFC http://www.rfc-editor.org/rfc/rfc2616.txt AGRADECIMIENTOS <=============> Thanx Lars. Y gr33ts para todos: hd, freetv1, taer, acid_phreak, AVA, Crypkey, darko, Dekar, Haifa, hiryuu, mcherem, Napa, Obscure Cloud, rem7, vision, toloache. Saludos, h k m hkm[]hakim.ws