15.05.2013 Views

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 ...

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!