Práctica 3: Introducción a los sockets en Java - Redes de ...
Práctica 3: Introducción a los sockets en Java - Redes de ...
Práctica 3: Introducción a los sockets en Java - Redes de ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
P3-8 <strong>Práctica</strong>s <strong>de</strong> <strong>Re<strong>de</strong>s</strong> <strong>de</strong> Computadores<br />
8. Explorador <strong>de</strong> puertos<br />
¿Está seguro nuestro ord<strong>en</strong>ador? ¿Es fácil <strong>en</strong>trar <strong>en</strong> él <strong>de</strong> forma no<br />
autorizada <strong>de</strong>s<strong>de</strong> otro ord<strong>en</strong>ador? Respon<strong>de</strong>r a esta pregunta es complicado.<br />
En g<strong>en</strong>eral, sabemos que para <strong>en</strong>trar <strong>en</strong> nuestro ord<strong>en</strong>ador <strong>de</strong>s<strong>de</strong> otro equipo<br />
es necesario que <strong>en</strong> alguno <strong>de</strong> <strong>los</strong> puertos <strong>de</strong> nuestro ord<strong>en</strong>ador haya un<br />
servidor escuchando. En el caso más extremo, si todos <strong>los</strong> puertos <strong>de</strong><br />
nuestro ord<strong>en</strong>ador están cerrados, t<strong>en</strong>emos la seguridad <strong>de</strong> que no vamos a<br />
aceptar datos que prov<strong>en</strong>gan <strong>de</strong> la red, por lo que evitamos la <strong>en</strong>trada no<br />
<strong>de</strong>seada <strong>de</strong> intrusos.<br />
Cerrar todos <strong>los</strong> puertos <strong>de</strong>l ord<strong>en</strong>ador pue<strong>de</strong> no ser una bu<strong>en</strong>a i<strong>de</strong>a,<br />
pues seguram<strong>en</strong>te algunos <strong>de</strong> <strong>los</strong> servicios que usamos habitualm<strong>en</strong>te (y <strong>de</strong><br />
<strong>los</strong> cuales incluso no somos consci<strong>en</strong>tes) <strong>de</strong>jarán <strong>de</strong> funcionar, con la<br />
correspondi<strong>en</strong>te molestia.<br />
Una política más acertada es mant<strong>en</strong>er abiertos únicam<strong>en</strong>te <strong>los</strong> puertos<br />
que necesitamos y cerrar el resto. No obstante, a m<strong>en</strong>udo el sistema<br />
operativo se configura con <strong>de</strong>terminadas opciones por <strong>de</strong>fecto, <strong>de</strong>jando<br />
abiertos algunos puertos que seguram<strong>en</strong>te no <strong>de</strong>seamos que estén abiertos.<br />
En otros casos, es posible que un intruso haya abierto un puerto <strong>en</strong> nuestro<br />
ord<strong>en</strong>ador y haya <strong>de</strong>jado <strong>en</strong> él un servidor, <strong>de</strong>l cual no t<strong>en</strong>emos<br />
conocimi<strong>en</strong>to.<br />
La mejor manera <strong>de</strong> saber qué puertos están abiertos <strong>en</strong> nuestro<br />
ord<strong>en</strong>ador es usar un explorador <strong>de</strong> puertos. Realizar esta tarea <strong>en</strong> TCP es<br />
muy s<strong>en</strong>cillo. Basta con recorrer <strong>los</strong> puertos <strong>de</strong> nuestro ord<strong>en</strong>ador<br />
int<strong>en</strong>tando conectarnos a el<strong>los</strong>. Si un puerto nos permite conectarnos,<br />
significa que hay un servidor escuchando <strong>en</strong> él. Si rechaza la conexión,<br />
<strong>en</strong>tonces el puerto está cerrado. En el caso <strong>de</strong> UDP, hacer la exploración no<br />
es tan s<strong>en</strong>cilla, pues al ser un servicio sin conexión, si no recibimos<br />
contestación, nunca vamos a t<strong>en</strong>er la seguridad <strong>de</strong> qué es lo que ha pasado<br />
con nuestro m<strong>en</strong>saje.<br />
Para crear el explorador <strong>de</strong> puertos nos vamos a valer <strong>de</strong> la clase<br />
Socket, que ya hemos empleado <strong>en</strong> <strong>los</strong> ejercicios anteriores. Como hemos<br />
visto, su constructor pue<strong>de</strong> lanzar dos excepciones difer<strong>en</strong>tes:<br />
• UnknownHostException, que se g<strong>en</strong>era cuando el nombre <strong>de</strong>l ord<strong>en</strong>ador<br />
con el que queremos crear la conexión no pue<strong>de</strong> ser resuelto a una<br />
dirección IP.<br />
• IOException, que se g<strong>en</strong>era cuando no se pue<strong>de</strong> establecer la conexión<br />
por cualquier otro motivo, como por ejemplo que no haya un