SOCAT
Author:pablino
URL:socat.tgz version 1.4.0.3
Add-on State: Beta
Add-on Version: 1.0
Original Project Version: http://www.dest-unreach.org/socat/
Original Project URL:Unknown
System Version Required: 2.31.10
Other Packages Required: none
Other Packages Conflict: Ninguno
Descripcion:
Es una utilidad de linux por línea de comandos que permite establecer flujos de datos en forma bidireccional. Permite generar streams a partir de un conjunto de diferentes tipos, incluyendo sockets.
Se utiliza el siguiente comando en la experiencia:
socat TCP4-LISTEN:8080,fork EXEC:’cat archivo.txt’,pty,stderr
El anterior comando significa que se utiliza la utilidad socat para que trabaje bajo protocolo TCP, ocupando el puerto 8080 de la máquina. Maneja un numero arbitrario de conexiones concurrentes, realizando un "fork" por cada una. Ejecuta el comando cat con el parámetro archivo.txt, lo que significa que volcará el contenido de dicho archivo a la salida estandar. Socat y cat se comunicarán mediante pseudo tty (pty). Además la sterr de cat es redirigida al stdout y por ende, los errores son transferidos al cliente.
INSTALACION
- Código: Selecionar todos
mt
cd mnt
wget http://www.server-d.com.ar/ftp-foro/addon/socat.tgz
cd ..
umt
reboot
socat by Gerhard Rieger - see http://www.dest-unreach.org
Usage:
socat [options] <bi-address> <bi-address>
options:
-V print version and feature information to stdout, and exit
-? print a help text describing command line options and addresses
-?? like -?, plus a list of all common address option names
-??? like -?, plus a list of all available address option names
-d increase verbosity (use up to 4 times; 2 are recommended)
-D analyze file descriptors before loop
-ly[facility] log to syslog, using facility (default is daemon)
-lf<logfile> log to file
-ls log to stderr (default if no other log)
-lm[facility] mixed log mode (stderr during initialization, then syslog)
-lp<progname> set the program name used for logging
-lu use microseconds for logging timestamps
-v verbose data traffic, text
-x verbose data traffic, hexadecimal
-b<size_t> set data buffer size (8192)
-s sloppy (continue on error)
-t<timeout> wait seconds before closing second channel
-u unidirectional mode (left to right)
-U unidirectional mode (right to left)
-g do not check option groups
bi-address:
pipe[,<opts>] groups=FD,FIFO
<single-address>!!<single-address>
<single-address>
single-address:
<address-head>[,<opts>]
address-head:
create:<filename> groups=FD,REG,NAMED
exec:<command-line> groups=FD,FIFO,SOCKET,EXEC,FORK,TERMIOS,PTY,PARENT,UNIX
fd:<num> groups=FD
gopen:<filename> groups=FD,REG,SOCKET,NAMED,OPEN,UNIX
ip4:<host>:<protocol> groups=FD,SOCKET,IP4
ip6:<host>:<protocol> groups=FD,SOCKET,IP6
open:<filename> groups=FD,REG,NAMED,OPEN
openssl:<host>:<port> groups=FD,SOCKET,CHILD,RETRY,IP4,TCP,OPENSSL
openssl-listen:<port> groups=FD,SOCKET,LISTEN,CHILD,RETRY,RANGE,IP4,TCP,OPENSSL
pipe:<filename> groups=FD,FIFO,NAMED,OPEN
proxy:<proxy-server>:<host>:<port> groups=FD,SOCKET,CHILD,RETRY,IP4,TCP,HTTP
pty groups=FD,NAMED,TERMIOS,PTY
socks4:<socks-server>:<host>:<port> groups=FD,SOCKET,CHILD,RETRY,IP4,TCP,SOCKS4
socks4a:<socks-server>:<host>:<port> groups=FD,SOCKET,CHILD,RETRY,IP4,TCP,SOCKS4
stderr groups=FD
stdin groups=FD
stdio groups=FD
stdout groups=FD
system:<shell-command> groups=FD,FIFO,SOCKET,EXEC,FORK,TERMIOS,PTY,PARENT,UNIX
tcp4:<host>:<port> groups=FD,SOCKET,CHILD,RETRY,IP4,TCP
tcp4-listen:<port> groups=FD,SOCKET,LISTEN,CHILD,RETRY,RANGE,IP4,TCP
tcp6:<host>:<port> groups=FD,SOCKET,CHILD,RETRY,IP6,TCP
tcp6-listen:<port> groups=FD,SOCKET,LISTEN,CHILD,RETRY,RANGE,IP6,TCP
udp4:<host>:<port> groups=FD,SOCKET,IP4,UDP
udp4-listen:<port> groups=FD,SOCKET,LISTEN,CHILD,RANGE,IP4,UDP
udp6:<host>:<port> groups=FD,SOCKET,IP6,UDP
udp6-listen:<port> groups=FD,SOCKET,LISTEN,CHILD,RANGE,IP6,UDP
unix-connect:<filename> groups=FD,SOCKET,NAMED,UNIX
unix-listen:<filename> groups=FD,SOCKET,NAMED,LISTEN,CHILD,UNIX
NOTA
Socat tiene un relativo a el clasico netcat -l -p port -e /bin/ls
en socat el relativo a eso seria
socat TCP-LISTEN:2323,reuseaddr SYSTEM:'ls' &
socat TCP-LISTEN:<puerto_de_escucha>,fork TCP:<direccion_de_Y>:<puerto>
por ejemplo, si quieres que X escuche en el puerto 3333 y el proxy Y es 210.10.10.10:8080, el comando sería:
socat TCP-LISTEN:3333,fork TCP:210.10.10.10:8080
(la opcion fork es para que no se cierre al termina la primera conexión y puedas conectar todas las veces que quieras)
Programación de Sockets
Se programa un cliente en Python que se usa para conectar con el servidor con socat, se muestra a continuación el código del script.
- Código: Selecionar todos
import socket
HOST = '192.168.1.128'
PORT = 8080
mysocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysocket.connect((HOST,PORT))
print 'Iniciando recepcion de datos:\n\n'
while 1:
data=mysocket.recv(1024)
if not data:
break
print str(data)
mysocket.close()
Lo que se hace es lo siguiente:
* Se crea un socket mediante la funcion socket(), con parámetros apropiados. En este caso un socket de red que ocupa protocolo TCP.
* Se realiza la conexión con el servidor indicando dirección y puerto mediante la funcion connect().
* Se reciben los datos en bloques de 1024 bytes y se muestran los datos en salida estandar.
* Se cierra la conexion con el servidor mediante close().
http://www.distrotest.es/?p=2973
http://www.marblestation.com/?p=708