clase:daw:si:3eval:tema18
Diferencias
Muestra las diferencias entre dos versiones de la página.
| — | clase:daw:si:3eval:tema18 [2025/11/03 11:37] (actual) – creado - editor externo 127.0.0.1 | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| + | ====== 18. TCP en Linux ====== | ||
| + | |||
| + | |||
| + | ===== ss ===== | ||
| + | La orden '' | ||
| + | |||
| + | Veamos las opciones que tiene | ||
| + | |||
| + | ^Opción ^ Explicación ^ | ||
| + | | -t | Solo mostrar información de TCP | | ||
| + | | -u | Solo mostrar información de UDP | | ||
| + | | -n | Mostrar los números de puerto en vez de sus nombres, por ejemplo mostrará 22 en vez de **ssh** | | ||
| + | | **-l** | Solo mostrar información de puertos que está escuchando (servidores). La '' | ||
| + | | **-a** | Solo mostrar información de puertos que conectados a otros Hosts | | ||
| + | | -p | Muestra el proceso que se ha conectado a ese puerto.**Es necesario lanzar la orden ss con sudo para ver los procesos de otros usuarios** | | ||
| + | | -4 | Solo mostrar información de IPv4 | | ||
| + | | -6 | Solo mostrar información de IPv6 | | ||
| + | |||
| + | Las opciones mas importantes son " | ||
| + | |||
| + | |||
| + | Mas infornmación en: | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | |||
| + | <sxh bash> | ||
| + | logongas@beren: | ||
| + | State | ||
| + | LISTEN | ||
| + | LISTEN | ||
| + | LISTEN | ||
| + | </ | ||
| + | |||
| + | Las opciones " | ||
| + | * 127.0.0.1: En este caso el proceso servidor solo podra ser conectado por procesos de nuestra propia máquina ,ya que 127.0.0.1 solo es accesible desde nuestra propia máquima. | ||
| + | * 0.0.0.0: Significa que el proceso servidor está escuchando en cualquier IP que tenga la máquina. | ||
| + | La primera columna ahora siempre muestra " | ||
| + | |||
| + | Así que tenemos a un proceso escuchando en el puerto 17500 que puede ser conectado por cualquier Host. Como ya dijimos no es muy adecuado que tengamos eso. Por ello vamos a ver ahora que proceso lo ha abierto , para ello añadimos la opción " | ||
| + | |||
| + | <sxh bash> | ||
| + | logongas@beren: | ||
| + | State Recv-Q | ||
| + | LISTEN 0 | ||
| + | LISTEN 0 | ||
| + | LISTEN 0 | ||
| + | </ | ||
| + | |||
| + | Y podemos ver que es algo de dropbox, y si hacemos una búsqueda de ese puerto en internet nos sale que es "used for LAN discovery and file Sync between Dropbox Clients." | ||
| + | |||
| + | |||
| + | Ahora vamos a ver todos los puertos que tienen una conexión establecida, | ||
| + | |||
| + | <sxh bash> | ||
| + | logongas@beren: | ||
| + | ESTAB 0 | ||
| + | ESTAB 0 | ||
| + | </ | ||
| + | Ahora vemos que hay una columna mas que antes, como son conexiones establecida con otro ordenador, la primera " | ||
| + | Podemos ver que dropbox tiene establecidas dos conexiones contra las IPs 162.125.19.131 y 162.125.68.13 ambas al puerto 443. Notar que el puerto origen de las conexiones se establecía de forma " | ||
| + | |||
| + | Así que acabamos de ver realmente las conexiones que tenemos en nuestro ordenador recordando que de forma teórica decíamos que era de la siguiente manera: | ||
| + | |||
| + | TCP | ||
| + | (IP Origen, | ||
| + | |||
| + | Y vemos por ejemplo con dropbox | ||
| + | |||
| + | TCP | ||
| + | (192.168.1.110, | ||
| + | |||
| + | |||
| + | ===== iftop ===== | ||
| + | La orden '' | ||
| + | |||
| + | Mas información: | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | |||
| + | |||
| + | <sxh bash> | ||
| + | logongas@beren: | ||
| + | </ | ||
| + | Lo primero es instalar el pequete '' | ||
| + | |||
| + | Y luego no hay mas que ejecutarla: | ||
| + | <sxh bash> | ||
| + | logongas@beren: | ||
| + | 12, | ||
| + | └───────────────┴───────────────┴───────────────┴───────────────┴─────────────── | ||
| + | 192.168.1.110 | ||
| + | < | ||
| + | 192.168.1.110 | ||
| + | < | ||
| + | 192.168.1.110 | ||
| + | < | ||
| + | 255.255.255.255 | ||
| + | < | ||
| + | 192.168.1.110 | ||
| + | < | ||
| + | |||
| + | ──────────────────────────────────────────────────────────────────────────────── | ||
| + | TX: | ||
| + | RX: 5, | ||
| + | TOTAL: | ||
| + | |||
| + | </ | ||
| + | La primera columna es la IP de nuestro ordenador, la segunda es la IP del otro Host. Y las 3 últimas el lo enviado o recibido | ||
| + | |||
| + | En la parte de abajo tenemos los totales desde que se inició la aplicación. Con el total acumulado enviado y recibido (donde pone cum), el máximo de velocidad (donde pone peak) y luego el total de los últimos 2, 10 y 40 segundos. | ||
| + | |||
| + | Aunque el objetivo de iftop es saber el ancho de banda que se está usando, hay otra cosa mas interesante. Con la orden '' | ||
| + | |||
| + | <note tip> | ||
| + | Con iftop se puede añadir también la opción " | ||
| + | <sxh> | ||
| + | logongas@beren: | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== nload ===== | ||
| + | La orden '' | ||
| + | |||
| + | Mas información: | ||
| + | * [[https:// | ||
| + | | ||
| + | <sxh> | ||
| + | logongas@beren: | ||
| + | Device enp2s0 [192.168.1.110] (2/3): | ||
| + | ============================================================================================ | ||
| + | Incoming: | ||
| + | ## | ||
| + | ## | ||
| + | ## | ||
| + | ## | ||
| + | ## | ||
| + | ## | ||
| + | ## | ||
| + | ## #| ####### | ||
| + | ##.## ####### | ||
| + | ##### ####### | ||
| + | ##### | ||
| + | ######################## | ||
| + | Outgoing: | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | Curr: 2.45 kBit/s | ||
| + | Avg: 189.84 kBit/s | ||
| + | |# Min: 0.00 Bit/s | ||
| + | .. | ||
| + | | ||
| + | |||
| + | </ | ||
| + | |||
| + | Se muestran dos gráficas. La superior con los datos que entran y la inferior con los que salen. En el eje X se muestra el tiempo y en el eje Y se muestra el ancho de banda. | ||
| + | |||
| + | Si hay mas de una tarjeta de red, se puede pasar de una tarjeta a otra con las teclas de cursor de izquierda y derecha. | ||
| + | |||
| + | <note tip> | ||
| + | Una orden similar a " | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Mas información en: | ||
| + | * [[https:// | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== nmap ===== | ||
| + | La orden '' | ||
| + | |||
| + | Mas información: | ||
| + | * [[http:// | ||
| + | |||
| + | <sxh bash> | ||
| + | apt install nmap | ||
| + | </ | ||
| + | Primero hay que instalarla | ||
| + | | ||
| + | <sxh bash> | ||
| + | logongas@beren: | ||
| + | |||
| + | Starting Nmap 7.60 ( https:// | ||
| + | Nmap scan report for 192.168.3.1 | ||
| + | Host is up (0.019s latency). | ||
| + | Not shown: 994 closed ports | ||
| + | PORT | ||
| + | 21/ | ||
| + | 22/ | ||
| + | 23/ | ||
| + | 80/ | ||
| + | 443/ | ||
| + | 8080/tcp open | ||
| + | |||
| + | Nmap scan report for 192.168.3.106 | ||
| + | Host is up (0.0018s latency). | ||
| + | Not shown: 995 closed ports | ||
| + | PORT STATE SERVICE | ||
| + | 22/ | ||
| + | 139/ | ||
| + | 445/ | ||
| + | 4662/tcp open edonkey | ||
| + | 9091/tcp open xmltec-xmlmail | ||
| + | |||
| + | Nmap done: 256 IP addresses (2 hosts up) scanned in 3.89 seconds | ||
| + | |||
| + | </ | ||
| + | |||
| + | La orden nos ha dicho que en la red " | ||
| + | |||
| + | <note tip> | ||
| + | En " | ||
| + | |||
| + | Es decir que las siguientes palabras referidas a un puerto son sinómimas: | ||
| + | * open | ||
| + | * abierto | ||
| + | * listen | ||
| + | * escuchando | ||
| + | |||
| + | ¿Y que pasa con la palabra " | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | | ||
| + | | ||
| + | ===== netcat ===== | ||
| + | La orden '' | ||
| + | |||
| + | Mas información | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | Lo primero es instalarla | ||
| + | <sxh bash> | ||
| + | logongas@beren: | ||
| + | </ | ||
| + | |||
| + | |||
| + | <sxh bash> | ||
| + | logongas@beren: | ||
| + | </ | ||
| + | |||
| + | Decimos que netcat se ponga a escuchar en el puerto 55555 de la IP 192.168.1.100. Una vez lanzado, los bytes que lleguen se mostrarán como texto por la pantalla | ||
| + | |||
| + | <sxh bash> | ||
| + | logongas@beren: | ||
| + | </ | ||
| + | Decimos que netcat envíe al host 192.168.1.100 y al puerto 55555 el texto "hola mundo" | ||
| + | |||
| + | Con " | ||
| + | |||
| + | ===== Flent ===== | ||
| + | [[https:// | ||
| + | |||
| + | {{: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | Los pasos de la instalación son: | ||
| + | <sxh python> | ||
| + | apt install netperf | ||
| + | apt install flent | ||
| + | </ | ||
| + | |||
| + | Mas información: | ||
| + | * [[https:// | ||
| + | ===== Ejercicios ===== | ||
| + | |||
| + | ==== Ejercicio 1 ==== | ||
| + | - Actualiza Ubuntu, para ello lanza las órdenes:< | ||
| + | logongas@beren: | ||
| + | logongas@beren: | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Ejercicio 2 ==== | ||
| + | - Muestra que números de puerto están abiertos para TCP con IPv6 | ||
| + | - Muestra que números de puerto están abiertos para UDP con IPv4 | ||
| + | - Muestra los procesos que están conectados a los puertos abiertos para TCP | ||
| + | |||
| + | |||
| + | ==== Ejercicio 3 ==== | ||
| + | - Muestra únicamente las conexiones que hay establecidas por TCP | ||
| + | - Desde tu ordenador real, conectate a Linux por SSH | ||
| + | - Muestra únicamente las conexiones que hay establecidas por TCP y comprueba que ahora está la conexión por SSH | ||
| + | - Según el resultado de la orden anterior, indica el números de puerto origen , el números de puerto destino de la conexión y el proceso que está conectado al puerto de SSH | ||
| + | |||
| + | ==== Ejercicio 4 ==== | ||
| + | - Usanfo " | ||
| + | - Explica a que Host se están conectado e intenta averiguar porqué se están conectando ahí. | ||
| + | - Usando la orden " | ||
| + | - Comprueba como a la vez , van a apareciendo en iftop cada vez que te conectas a las páginas | ||
| + | |||
| + | === Ejercicio 5 === | ||
| + | - Instala los monitores de red " | ||
| + | - Haz una captura de pantalla en las que se vea alguna gráfica del uso de la red | ||
| + | - Usando la orden " | ||
| + | - Usando " | ||
| + | - Usar varias veces seguidas wget y comprueba como cada vez que la usas, se ve en la gráfica de " | ||
| + | |||
| + | ==== Ejercicio 6 ==== | ||
| + | - Averigua que Hosts hay en la red de tu casa y los puertos que tiene abierto cada Host. | ||
| + | - Intenta conectarte a alguno de los puertos que haya abiertos. | ||
| + | - Para saber que un puerto está abierto, ¿Cual es la diferencia entre usar " | ||
| + | |||
| + | ==== Ejercicio 7 ==== | ||
| + | - usando netcat haz que se ponga a escuchar en el puerto " | ||
| + | - Comprueba ahora que el puerto | ||
| + | - Envía datos por http desde el navegador de tu ordenador real al puerto " | ||
| + | - ¿Que datos he enviado el navegador y que han llegado hasta el servidor que está escuchando en el puerto " | ||
| + | |||
| + | ==== Ejercicio 8 ==== | ||
| + | En este ejercicio vamos a crea un servidor Web desde Java. | ||
| + | |||
| + | - Desde tu ordenador real , compila el siguiente código Java para el JDK 11 y crear un fichero " | ||
| + | package com.fpmislata.daw; | ||
| + | | ||
| + | import java.io.IOException; | ||
| + | import java.io.OutputStream; | ||
| + | import java.net.InetSocketAddress; | ||
| + | | ||
| + | import com.sun.net.httpserver.HttpExchange; | ||
| + | import com.sun.net.httpserver.HttpHandler; | ||
| + | import com.sun.net.httpserver.HttpServer; | ||
| + | | ||
| + | public class Server { | ||
| + | | ||
| + | public static int tcpPortNumber=8080; | ||
| + | | ||
| + | public static void main(String[] args) throws Exception { | ||
| + | HttpServer httpServer = HttpServer.create(new InetSocketAddress(tcpPortNumber), | ||
| + | httpServer.createContext("/", | ||
| + | httpServer.start(); | ||
| + | System.out.println(" | ||
| + | } | ||
| + | | ||
| + | static class RootHttpHandler implements HttpHandler { | ||
| + | | ||
| + | @Override | ||
| + | public void handle(HttpExchange httpExchange) throws IOException { | ||
| + | | ||
| + | //Crear un HTML con la direccion y el puerto tanto origen como destino | ||
| + | StringBuilder html = new StringBuilder(); | ||
| + | html.append("< | ||
| + | html.append("< | ||
| + | html.append("< | ||
| + | html.append("</ | ||
| + | |||
| + | | ||
| + | //Enviar el HTML por TCP | ||
| + | httpExchange.getResponseHeaders().add(" | ||
| + | httpExchange.sendResponseHeaders(200, | ||
| + | OutputStream outputStream = httpExchange.getResponseBody(); | ||
| + | outputStream.write(html.toString().getBytes()); | ||
| + | outputStream.close(); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | } | ||
| + | </ | ||
| + | - Ahora en tu máquina linux, instala el JDK 11.<sxh java> | ||
| + | logongas@beren: | ||
| + | </ | ||
| + | - Copiar el fichero " | ||
| + | - Dale permisos de ejecución | ||
| + | - Ejecuta en Linux el servidor java con:<sxh bash> | ||
| + | java -jar server.jar | ||
| + | </ | ||
| + | - Comprueba que el puerto está abierto. | ||
| + | - Conéctate desde tu ordenador real con el navegador al servidor Web de Linux. | ||
| + | - Comprueba el puerto origen de la conexión | ||
| + | - Conéctate desde tu ordenador real con otro navegador navegador al servidor Web de Linux. | ||
| + | - Comprueba el puerto origen de la conexión es distinto que el de antes | ||
| + | - Modifica el programa para que en vez de usar el puerto 8080 , use el puerto 80. | ||
| + | - Vuelve a ejecutar el servidor Java, no te dejará. | ||
| + | - Vuelve a ejecutar el servidor Java pero ahora con " | ||
| + | |||
| + | |||
| + | |||
