SlideShare a Scribd company logo
1 of 50
Download to read offline
E n x tendiendo el[n|x]tendiendo el  |x]tendiendo el  ]tendiendo el 
protocolo BitTorrent
2About:ME
Exos
exos@kaktheplanet.xyz
https://log.exos.ninja
PGP: 576be1068798902f
@exos
3ABOUT:THIS
Objetivos:
● Entender el funcionamiento a nivel
protocolo (bajo nivel)
● Aprender las distintas partes
● Extender el protocolo agregando
funcionalidad
4ABOUT:THIS
POC:
Simple chat
extendiendo el
protocolo de
BitTorrent.
Requisitos: node
5ABOUT:BitTorrent
● Abierto
● Colaborativo
● P2P
● Descentralizado
● Seguro
● Extendible
● Agnostico de
protocolos de
red
6ABOUT:BitTorrent
Bueno para:
● Descara de archivos
de gran tamaño.
● Subir información
dificil de rastrear
la fuente
Malo para:
● Archivos de poco
tamaño.
● Mucha cantidad de
archivos activos.
E n[n|x]tendiendo el  |x]tendiendo el x tendiendo el]tendiendo el 
protocolo BitTorrent
8About:BitTorrent
Partes
● Peer
● Tracker
● TorrentFile
● Wire protocol
9About:Torrent
Metadata
Información sobre el torrent y
archivos
Bitfield
Bitfiel donde cada bit
simboliza una pieza
Chunk Store
Almacenamiento basado en chunks
de tamaño fijo.
Hash list
Lista de hashes SHA1 de cada
chunk.
10Chunk Store
11Hash list
12Info Hash
13Swarm de descarga
Peer: Cada nodo en
la red es un peer,
entre estos formas
swarms (enjambres).
Announce: Los peers
utilizan un tracker
para anunciarse, el
protocolo hace el
resto
Torrent tracker
15Torrent Tracker
Los trackers son urls
HTTP que se encargan de
ofrecer información
sobre los peers,
agrupados por torrents.
Ex:
http://torrent.nwps.ws/announce
16Torrent Tracker
Request
● info_hash
● peer_id
● port
● downloaded
● left
● event
● [numwant]
● [ip]
● [tracker_id]
Response
● Failure reason
● Warning message
● interval
● tracker_id
● complete (aka seeders)
● incomplete (aka leechers)
● Peers[]
– peer_id
– IP
– port
17Torrent Tracker
Events
● started
● stopped
● completed
Peers
19Peers
Un peer es un nodo interesado o
poseedor de un torrent concreto,
este es identificado por un PeerID.
Tipos:
● Leecher
● Seeder
20Peers no altruistas
FreeRiders
Muchas veces
nombrados leecher
por error. Son
peers que
descargan sin
compartir.
Hit&Run
Nodos que apenas
terminan de bajar
un torrent,
abandonan el
swarm.
Torrent file
22Torrent file
Fields
● info
● info_hash
● announce
● [announce-list]
● [comment]
● [creation date]
● [created by]
● [encoding]
Info field
● length
● piece_length
● pieces
● [private]
Single file
● name
● length
● [md5sum]
Multi file
● files
– length
– path
– [md5sum]
23Torrent file: Bencode
Bencode flags:
● d{...}e Dictionary→ Dictionary
● l{...}e List→ Dictionary
● i{...}e Integer→ Dictionary
● <length>:{...} Byte→ Dictionary
string
d3:bar4:spam3:fooi42ee
{
“bar”: “spam”,
“foo”: 42
}
24Torrent File
00000000 64 38 3a 61 6e 6e 6f 75 6e 63 65 34 32 3a 68 74 |d8:announce42:ht|
00000010 74 70 3a 2f 2f 74 72 61 63 6b 65 72 2e 61 72 63 |tp://tracker.arc|
00000020 68 6c 69 6e 75 78 2e 6f 72 67 3a 36 39 36 39 2f |hlinux.org:6969/|
00000030 61 6e 6e 6f 75 6e 63 65 37 3a 63 6f 6d 6d 65 6e |announce7:commen|
00000040 74 34 31 3a 41 72 63 68 20 4c 69 6e 75 78 20 32 |t41:Arch Linux 2|
00000050 30 31 39 2e 30 33 2e 30 31 20 28 77 77 77 2e 61 |019.03.01 (www.a|
00000060 72 63 68 6c 69 6e 75 78 2e 6f 72 67 29 31 30 3a |rchlinux.org)10:|
...
00000100 3a 70 69 65 63 65 73 32 34 30 38 30 3a 5c e8 6b |:pieces24080:.k|
00000110 d5 db cd f0 93 6c 5f 96 a8 d4 ad 90 7d 78 54 2f |.....l_.....}xT/|
00000120 ce 81 40 a6 e9 b5 db 59 26 ee 79 a4 cb e1 9f 77 |..@....Y&.y....w|
00000130 57 b4 6b ee dd 19 9e a4 db ed 08 23 87 cd 2c 52 |W.k........#..,R|
00000140 52 0b d0 de 70 7a 64 50 39 d7 c3 4e 9a a8 f8 82 |R...pzdP9..N....|
00000150 4d a6 01 c2 60 6c 8c 5b 8f 91 b6 0a 2e 7b b6 e9 |M...`l.[.....{..|
00000160 fd 2a 69 9a d6 2b 06 c4 50 1e 86 e2 98 12 ad 72 |.*i..+..P......r|
00000170 dd f7 14 85 f3 4e 80 d9 b8 44 0b ea 1e c4 73 79 |.....N...D....sy|
00000180 32 16 27 c2 a0 b7 95 2b c9 fb 38 7d 06 c5 46 b1 |2.'....+..8}..F.|
25Torrent File
$ dd if=archlinux-2019.03.01-x86_64.iso skip=0 bs=524288 count=1 | sha1sum
5ce86bd5dbcdf0936c5f96a8d4ad907d78542fce -
1+0 records in
1+0 records out
524288 bytes (524 kB, 512 KiB) copied, 0.0250828 s, 20.9 MB/s
$
AlgorithmS
27Choking Algorithm: Estados
Choked: (Estreñido).
Un peer está estreñido
cuando no está dispuesto a
compartir piezas con otro en
particular.
Interested: (Interesado)
Un peer está interesado en
otro cuando este tiene
partes faltantes del
torrent.
28
Choking algorithm:
Downloaders
Cada 10 segundos, los 4 peers con el ratio mas
alto de descarga (Que estén interesados) son des-
chokeados, estos son conocidos como downloaders.
Los peers que tengan mejor ratio de descarga que
los downloaders pero no estén interesados son des-
chokeados para, que si se convierte en interesado,
el downloader con peor ratio es reemplazado por
este.
29
Choking algorithm:
Optimist unchocking
Cada 30 segundos, se hace un-choke
a un peer al azar, sin importar si
tiene ratio de subida, dando
prioridad a los peers mas
recientes, de esta forma se
garantiza que los nuevos peers del
swarm tengan piezas para compartir.
30
Choking Algorithms:
Estrategias
Rare first
Se le da prioridad a las
piezas mas raras (o menos
disponibles en el swarm)
Sequential
Se le da prioridad a las
primeras piezas, y se
descarga de forma
secuencial
31Super Seeding
El super-seeding es una
estrategia de subida, en la que se
busca reducir el ancho de banda
subido, o dificultar el rastreo
del primer seeder.
El Peer, no se va a presentar al
swarm como un peer normal, sino
que va a entrar como un leecher. Y
va a anunciar distintas piezas
descargadas, diferentes por cada
peer conectado, sin anunciar que
tiene otras.
32Super Seeding
Lo que se busca es subir
cada pieza solo una vez,
y que sea el resto del
swarm el que se vayan
compartiendo las piezas.
Al terminar de comartir
una pieza con un peer,
este puede anunciar que
descargo otra, para asi
compatirla con este.
Wire Protocol
34Wire protocol
Los wires (cables), son la
representación de la conexión entre
dos peers. Esta es bidireccional y
está basada en el envio y recibo de
paquetes simples.
35Wire Protocol
36Wire Protocol: HandShake
Formato:
[pstrlen][pstr][reserved][info_hash][peer_id]
● pstrlen: Tamaño del pst
● pst: Identificar de protocolo
● reserved: 64 bits reservados
● info_hash: Infohash (160 bits)
● peer_id: Peer ID (160 bits)
37Wire Protocol: Handshake
[pstrlen][pstr][reserved][info_hash][peer_id]
13 42 69 74 54 6f 72 72 65 6e 74 20 70 72 6f 74 6f 63 6f 6c 00 00 00 00 00 00 00 00
19 B i t T o r r e n t p r o t o c o l -
9b a3 20 60 b7 ad 96 d0 a0 16 78 d1 dd e9 32 98 e5 a9 34 c2 2d 41 5a 32 30 36 30 2d
- -AZ2060-
00 00 00 00 00 00 00 00 00 00 00 00
38Wire protocol: Messages
Formato:
[length][id][payload]
● length: Tamaño del mensaje
● id: Id del mensaje
● payload: (opcional) contenido
39Wire Protocol: Mensajes
Message Length ID Payload
keep-alive 0000 - -
choke 0001 0 -
unchoke 0001 1 -
interesed 0001 2 -
not ninteresed 0001 3 -
have 0005 4 Piece index
Message Length ID Payload
bitfield 0001+x 5 Bitfield
request 0013 6 Index:offset:length
piece 0009+x 7 Index:offset:length
cancel 0013 8 Index:offset:length
port 0003 9 port
extended 0002+x 20 eid:epayload
00 00 00 0d 06 00 00 00 05 00 00 00 82 00 00 40 00
13 6 5 130 16384
E[n|x]tendiendo el n|x]tendiendo el x tendiendo el]tendiendo el 
protocolo BitTorrent
41BEP10
El protocolo torrent es extendible, a
través de la definición BEP10, la cual
agrega un mensaje (id=20) con la
posibilidad de enviar mensajes
extendidos, el id de mensage extendido
0x00, está reservado al handshake
extendido. En el que se dará información
sobre las extensiones soportadas.
42Extensiones populares
● DHT
● Connection Obfuscation
● WebSeeding
● PEX (Peer exchange)
● ut_metadata
43
Extensiones: ut metadata_metadata
Magnet URI
magnet:?xt=urn:btih:9ba32060b7ad96d0a01678d1dde93298e5a934c2&dn=archlinux-
2019.03.01-x86_64.iso&tr=http%3A%2F%2Ftracker.archlinux.org
%3A6969%2Fannounce
● xt=urn:btih:9ba32060b7ad96d0a01678d1dde93298e5a934c2
● dn=archlinux-2019.03.01-x86_64.iso
● tr=http://tracker.archlinux.org:6969/announce
magnet:?xt=urn:btih:9ba32060b7ad96d0a01678d1dde93298e5a934c2
44Extensiones: ut metadata_metadata
45BEP10: INICIALIZACION
[pstrlen][pstr][reserved{64b}][info_hash][peer_id]
0000000000000000000000000000000000000000000010000000000000000000
00 00 00 00 00 10 00 00
(reserved_byte[5] & 0x10)
[length][id=20][id{8b}:payload]
46BEP10: HandShake
[length][id=20][id=0:dicto{m,p,v}]
m: Dicto
lt_metadata: 1
ut_pex: 2
p: TCP Port
v: Complete client name + version
47BEP10: Messages
[length][id=20][id=>0:payload]
Todo mensaje extendido mayor a 0
será buscado en el diccionario de
extensiones, y enviada a esta.
48POC: MessageS
[length][id=20][id=3:dicto]
d3:msg1:17:payload4:holaee
{
“msg”: 1,
“payload”: “hola”
}
49POC: DEMO
DEMO
http://10.81.4.160:8000/announce
THE END
http://www.bittorrent.org/beps/bep_0010.html

More Related Content

Similar to Extendiendo el protocolo BitTorrent

Similar to Extendiendo el protocolo BitTorrent (20)

Zentyal cloud sample_report_es
Zentyal cloud sample_report_esZentyal cloud sample_report_es
Zentyal cloud sample_report_es
 
Bolilla 2 ppt técnico en redes
Bolilla 2 ppt técnico en redesBolilla 2 ppt técnico en redes
Bolilla 2 ppt técnico en redes
 
Redes
Redes Redes
Redes
 
CUADRO COMPARATIVO ENTRE MODELO OSI Y TCP/IP
CUADRO COMPARATIVO ENTRE MODELO OSI Y TCP/IPCUADRO COMPARATIVO ENTRE MODELO OSI Y TCP/IP
CUADRO COMPARATIVO ENTRE MODELO OSI Y TCP/IP
 
Puertos de linux
Puertos de linuxPuertos de linux
Puertos de linux
 
Redes 03 santi
Redes 03 santiRedes 03 santi
Redes 03 santi
 
Modelo TCP/IP.pdf
Modelo TCP/IP.pdfModelo TCP/IP.pdf
Modelo TCP/IP.pdf
 
Aporte fase 1 evaluacion final
Aporte fase 1 evaluacion finalAporte fase 1 evaluacion final
Aporte fase 1 evaluacion final
 
Redes ii
Redes iiRedes ii
Redes ii
 
CursoProgamacionNFC-Dia2
CursoProgamacionNFC-Dia2CursoProgamacionNFC-Dia2
CursoProgamacionNFC-Dia2
 
Presentacion Python
Presentacion  Python Presentacion  Python
Presentacion Python
 
FUNDAMENTOS PYTHON.ppsx
FUNDAMENTOS PYTHON.ppsxFUNDAMENTOS PYTHON.ppsx
FUNDAMENTOS PYTHON.ppsx
 
Zookeeper
ZookeeperZookeeper
Zookeeper
 
Analisis de red mediante Wireshark y Tcpdump
Analisis de red mediante Wireshark y TcpdumpAnalisis de red mediante Wireshark y Tcpdump
Analisis de red mediante Wireshark y Tcpdump
 
Redes
RedesRedes
Redes
 
Configuracion de Firewalls e Pasarelas
Configuracion de Firewalls e PasarelasConfiguracion de Firewalls e Pasarelas
Configuracion de Firewalls e Pasarelas
 
Evaluacion final fase1_grupo86
Evaluacion final fase1_grupo86Evaluacion final fase1_grupo86
Evaluacion final fase1_grupo86
 
Informe Ejecutivo Fase 1
Informe Ejecutivo Fase 1Informe Ejecutivo Fase 1
Informe Ejecutivo Fase 1
 
Pract campo
Pract campoPract campo
Pract campo
 
Adivina quién viene a CDNear esta noche
Adivina quién viene a CDNear esta nocheAdivina quién viene a CDNear esta noche
Adivina quién viene a CDNear esta noche
 

Extendiendo el protocolo BitTorrent