Creación De Una Herramienta Para La Investigación De La Red Bittorrent
Total Page:16
File Type:pdf, Size:1020Kb
Universidad de Alcalá Escuela Politécnica Superior Grado en Ingeniería Informática Trabajo Fin de Grado Creación de una herramienta para la investigación de la red BitTorrent Autor: Raúl Calvo Laorden Tutor: Manuel Sánchez Rubio 2019 UNIVERSIDAD DE ALCALÁ ESCUELA POLITÉCNICA SUPERIOR Grado en Ingeniería Informática Trabajo Fin de Grado Creación de una herramienta para la investigación de la red BitTorrent Autor: Raúl Calvo Laorden Director: Manuel Sánchez Rubio Tribunal: Presidente: « Nombre y Apellidos » Vocal 1o: « Nombre y Apellidos » Vocal 2o: « Nombre y Apellidos » Calificación: .......................................................................... Fecha: ................................................................................... A todos los profesores que se preocupan porque sus alumnos aprendan de verdad y hacen todo lo posible para conseguirlo.. “Sólo podemos ver poco del futuro, pero lo suficiente para darnos cuenta de que hay mucho que hacer” Alan Mathison Turing Resumen BitTorrent, a pesar de ser una de las principales formas de compartir ficheros en red, su número de herramientas para la investigación es escaso. En este trabajo se realiza, en primer lugar, un estudio en profundidad del protocolo BitTorrent para después desarrollar una aplicación con el máximo número de funcionalidades encontradas. Esta aplicación tiene como objetivo ser útil a investigadores de modo que tengan todas las funcionalidades necesarias para cualquier investigación en este campo, desde encontrar los archivos .torrent que se están compartiendo de un fichero, a monitorizar uno o más torrents y recibir alertas por IP o rango. Palabras clave: BitTorrent, herramienta, Protocolo BitTorrent, DHT, Golang. Abstract BitTorrent, despite being one of the main ways of sharing files on a network, its number of research tools is scarce. In this work, in the first place, an in-depth study of the BitTorrent protocol is carried out to later develop an application with the maximum number of functionalities found. This application aims to be useful to researchers so that they have all the necessary functionalities for any investigation in this field, from finding the .torrent files that are being shared from a file, to monitoring one or more torrents and receiving alerts via IP or range. Keywords: BitTorrent, toolkit, BitTorrent Protocol, DHT, Golang. Índice general Resumen vii Abstract ix Índice general xi Índice de figuras xv Índice de tablas xvii Índice de listados de código fuente xix Lista de acrónimos xxi Glosario xxiii Lista de símbolos xxiv 1 Introducción 1 1.1 Presentación...........................................1 1.2 Motivación y objetivos......................................1 1.3 Organización y formato de la memoria.............................2 2 Estudio teórico 3 2.1 Introducción............................................3 2.2 Estado del Arte..........................................3 2.3 P2P................................................4 2.4 BitTorrent.............................................6 2.5 Protocolo BitTorrent.......................................6 2.5.1 BEP............................................7 2.5.1.1 Proceso de un BEP..............................7 2.5.1.2 Otros datos importantes para el BEP....................8 2.5.2 Bencoding.........................................8 xii ÍNDICE GENERAL 2.5.3 Ficheros Metainfo....................................9 2.5.4 Trackers..........................................9 2.5.4.1 Trackers HTTP................................9 2.5.4.1.1 Petición................................ 10 2.5.4.1.2 Respuesta............................... 10 2.5.4.2 Trackers UDP................................. 11 2.5.4.3 Scrape..................................... 11 2.5.4.4 Multitracker.................................. 12 2.5.5 Comunicación Peer-to-Peer (Igual a Igual) (P2P) o Peer Protocol....... 12 2.5.5.1 Handshake................................... 12 2.5.5.2 Estados..................................... 13 2.5.5.3 Mensajes.................................... 13 2.5.5.4 Peer_id..................................... 14 2.5.5.4.1 Estilo Mainline BitTorrent..................... 14 2.5.5.4.2 Estilo Azureus............................ 14 2.5.5.4.3 Estilo Shadow............................ 15 2.5.5.5 Seguridad.................................... 15 2.5.6 DHT............................................ 15 2.5.6.1 Funcionamiento DHT............................. 16 2.5.6.2 Protocolo KRPC................................ 17 2.5.7 Otros BEPs........................................ 18 2.5.7.1 DHT Infohash Indexing............................ 18 2.5.7.2 The BitTorrent Protocol Specification v2.................. 19 2.5.7.3 DHT Security extension............................ 19 2.6 Implementaciones BitTorrent.................................. 19 2.6.1 Clientes.......................................... 19 2.6.2 Bibliotecas........................................ 19 2.7 Conclusiones........................................... 20 3 Desarrollo 21 3.1 Introducción............................................ 21 3.2 Objetivo del desarrollo...................................... 21 3.3 Tecnología utilizada....................................... 22 3.4 Plan de trabajo.......................................... 22 3.5 Desarrollo del programa..................................... 22 3.5.1 Bibliotecas de Go utilizadas............................... 22 3.5.2 Base de datos....................................... 23 ÍNDICE GENERAL xiii 3.5.2.1 Diagrama de la base de datos......................... 23 3.5.2.2 Código SQL de la base de datos....................... 24 3.5.3 Explicación código.................................... 24 3.5.3.1 CLI....................................... 24 3.5.3.2 Manipulación fichero torrent......................... 25 3.5.3.2.1 Crear y descargar un torrent.................... 26 3.5.3.2.2 Obtener el torrent dado un hash.................. 26 3.5.3.3 Alertas y monitorización........................... 27 3.5.3.4 Demonio.................................... 28 3.5.3.5 Crawl...................................... 29 3.5.3.6 Buscar ficheros en la red (find)........................ 30 3.5.3.7 Mostrar información de la base de datos................... 33 3.5.4 Problemas encontrados................................. 33 3.6 Conclusiones........................................... 33 4 Conclusiones y líneas futuras 39 4.1 Conclusiones........................................... 39 4.2 Líneas futuras........................................... 40 Bibliografía 41 A Manual de usuario 45 A.1 Introducción............................................ 45 A.2 Instalación............................................ 45 A.2.1 Docker........................................... 45 A.2.2 Golang.......................................... 46 A.2.3 BNToolkit......................................... 46 A.3 Uso................................................ 46 A.3.1 Inicio PostgreSQL.................................... 47 A.3.2 Fichero de configuración configFile.toml........................ 47 A.3.3 help............................................ 47 A.3.4 version........................................... 48 A.3.5 initDB........................................... 48 A.3.6 create........................................... 49 A.3.7 download......................................... 50 A.3.8 addAlert.......................................... 51 A.3.9 deleteAlert........................................ 51 A.3.10 addmonitor........................................ 52 xiv ÍNDICE GENERAL A.3.11 deleteMonitor....................................... 52 A.3.12 crawl............................................ 53 A.3.13 daemon.......................................... 54 A.3.14 find............................................ 55 A.3.15 insert........................................... 56 A.3.16 show............................................ 57 A.3.16.1 hash....................................... 58 A.3.16.2 alert....................................... 58 A.3.16.3 count...................................... 59 A.3.16.4 ip........................................ 59 A.3.16.5 monitor..................................... 60 A.3.16.6 possibles.................................... 60 A.3.16.7 project..................................... 60 A.3.17 Ejecución en Windows.................................. 61 B Herramientas y recursos 63 Índice de figuras 2.1 Evolución de publicaciones en IEEEXplore [1] hasta 2019...................4 2.2 Tiempo mínimo de distribución.................................5 2.3 Arquitectura BitTorrent[2]...................................6 2.4 Flujo trabajo de un BitTorrent Enhancement Proposal (BEP)[3]..............8 3.1 Diagrama de la base de datos con Toad Data Modeler [4].................. 23 A.1 BNTtoolkit –help......................................... 45 A.2 BNTtoolkit help –help...................................... 47 A.3 BNTtoolkit version –help y ejecución.............................. 48 A.4 BNTtoolkit initDB –help.................................... 48 A.5 BNTtoolkit create –help y ejecución.............................. 49 A.6 BNTtoolkit download –help y ejecución............................ 50 A.7 addAlert y deleteAlert...................................... 51 A.8 addMonitor y deleteMonitor................................... 53 A.9 bntoolkit crawl –help y ejecución................................ 54 A.10 bntoolkit daemon –help y ejecución............................... 55 A.11 bntoolkit find –help.......................................