[perl] Ayuda con dos sockets simultaneos

Gunnar Wolf gwolf@campus.iztacala.unam.mx
Wed, 12 Apr 2000 22:31:17 -0500 (CDT)


Estoy intentando escribir un programa que sirva como intermediario
transparente entre dos hosts, filtrando la comunicacion siguiendo
ciertos criterios. Voy avanzando poco a poco con la logica del
programa, pero hay un punto en el que estoy atorado: Como puedo
esperar datos de dos diferentes fuentes? 

Me explico: Quiero que si el cliente manda un comando al servidor,
este sea pasado de inmediato. Va a ser muy poco comun que el cliente
mande mas de una linea sin que el servidor le responda. Por otro lado,
el servidor normalmente solo respondera a las peticiones del cliente -
rara vez tendra la iniciativa de enviar una linea... Sin embargo, esta
siempre la posibilidad.

Como punto a mi favor, los protocolos que quiero interceptar estan
orientados a linea - Toda transaccion es unicamente de texto ASCII de
7 bits, y termina con un cambio de linea.

Hice el siguiente pedacito de codigo. De sobra esta decir que no
sirve, pero creo que ilustra aproximadamente lo que busco.

------------------------------------------------
while ($client = $listSock->accept()) {
    $src_conn=getpeername($client);
    ($src_port,$src_iaddr)=unpack_sockaddr_in($src_conn);
    $src_ip_address=inet_ntoa($src_iaddr);
    print "Connection recieved from $src_ip_address, source port $src_port\n";

    $server=IO::Socket::INET->new(PeerAddr=>$destAddr,
				  PeerPort=>$destPort,
				  Proto=>"tcp",
				  Type=>SOCK_STREAM)
	or die "$! - $@";

    while ($line=$client->getline) {
	$line=~s/\r|\n//g;
	$testok=testLine(\$line);
	$server->print("$line") or last;
	
	$line=$server->getline;
	$client->print("$line");
    }

    close $client;
    close $server;
    print "Closing communication with $src_ip_address:$src_port\n";
}
------------------------------------------------

Les agradezco cualquier ayuda que puedan brindarme.


-------------------------------------------------------------------
           Gunnar Wolf    gwolf@campus.iztacala.unam.mx
     Universidad Nacional Autónoma de México, Campus Iztacala
   Jefatura de Sección de Desarrollo y Admon. de Sistemas en Red
        Area de Seguridad en Computo - DCI - DGSCA - UNAM
-------------------------------------------------------------------
  Beginner thinks 1Kb == 1000 bytes.   Master knows 1Km == 1024m

--------- Pie de mensaje --------------------------------
Visite: http://tlali.iztacala.unam.mx/~randrade/perl.shtml
Cancelar inscripcion:
mail to: majordomo@tlali.iztacala.unam.mx
text   : unsubscribe perl