ooni-probe-cli/internal/tutorial/netxlite
Simone Basso 8f7e3803eb
feat(netxlite): implement DNSTransport wrapping (#776)
Acknowledge that transports MAY be used in isolation (i.e., outside
of a Resolver) and add support for wrapping.

Ensure that every factory that creates an unwrapped type is named
accordingly to hopefully ensure there are no surprises.

Implement DNSTransport wrapping and use a technique similar to the
one used by Dialer to customize the DNSTransport while constructing
more complex data types (e.g., a specific resolver).

Ensure that the stdlib resolver's own "getaddrinfo" transport (1)
is wrapped and (2) could be extended during construction.

This work is part of my ongoing effort to bring to this repository
websteps-illustrated changes relative to netxlite.

Ref issue: https://github.com/ooni/probe/issues/2096
2022-06-01 11:10:08 +02:00
..
chapter01 doc: add tutorial on how to use netxlite (#519) 2021-09-28 18:15:38 +02:00
chapter02 doc: add tutorial on how to use netxlite (#519) 2021-09-28 18:15:38 +02:00
chapter03 doc: add tutorial on how to use netxlite (#519) 2021-09-28 18:15:38 +02:00
chapter04 cli: upgrade to lucas-clemente/quic-go@v0.27.0 (#715) 2022-05-06 12:24:03 +02:00
chapter05 doc: add tutorial on how to use netxlite (#519) 2021-09-28 18:15:38 +02:00
chapter06 feat(netxlite): implement DNSTransport wrapping (#776) 2022-06-01 11:10:08 +02:00
chapter07 doc: add tutorial on how to use netxlite (#519) 2021-09-28 18:15:38 +02:00
chapter08 cli: upgrade to lucas-clemente/quic-go@v0.27.0 (#715) 2022-05-06 12:24:03 +02:00
README.md doc(netxlite): revamp the documentation (#523) 2021-09-29 20:21:25 +02:00

Tutorial: using the netxlite networking library

Netxlite is the underlying networking library we use in OONI. In most cases, network experiments do not use netxlite directly, rather they use abstractions built on top of netxlite (e.g., measurex). Though, you need to know about netxlite if you need to modify these abstractions.

For this reason, this chapter shows the basic netxlite primitives that we use when writing higher-level measurement primitives.

We will start from simple primitives and we will combine them together to reach to the point where we can perform GET requests to websites using already existing TLS or QUIC connections. (The code we will end up writing will look like a stripped down version of the measurex library, for which there is a separate tutorial.)

Index:

  • chapter01 shows how to establish TCP connections;

  • chapter02 covers TLS handshakes;

  • chapter03 discusses TLS parroting;

  • chapter04 shows how to establish QUIC sessions;

  • chapter05 is about the "system" DNS resolver;

  • chapter06 discusses custom DNS-over-UDP resolvers;

  • chapter07 shows how to perform an HTTP GET using an already existing TLS connection to a website;

  • chapter08 is like chapter07 but for QUIC.