[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