🧅 An IPv4 and IPv6 exit node scanner for the Tor network
This repository has been archived on 2025年12月14日 . You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
- Rust 95.6%
- Shell 4.4%
| src | fixes | |
| tools |
tools: add sql.sh
|
|
| .gitignore | Initial commit | |
| Cargo.lock | fixes | |
| Cargo.toml | fixes | |
| LICENSE | Initial commit | |
| README.md | doc: update "Implementation Details" in README.md | |
chexit
A tool to check the actual IPv4 and IPv6 exit address of all Tor exit nodes.
Description
chexit is a small Rust program that utilizes arti in order to obtain all actual exit addresses. It fills a gap in the regard that it is the only(?) tool that also collects IPv6 exit addresses alongside the IPv4 ones. Originally it was written in the hope to eventually support IPv6 for check.torproject.org. It is a highly efficient tool that can gather ≈ 99% of all exit addresses within 4 minutes (maybe even less).
Usage
$ RUST_LOG=info chexit > exit_addresses
[2024年07月14日T13:38:53Z INFO chexit] Bootstrapping list of relays ...
[2024年07月14日T13:38:58Z INFO chexit] Bootstrapped list of 7525/2098
[2024年07月14日T13:38:58Z INFO chexit] Spawning 2098 tasks ...
[2024年07月14日T13:38:58Z INFO chexit] Spawned all tasks, waiting 240 seconds ...
[2024年07月14日T13:42:58Z INFO chexit] Waited 240 seconds, collecting results ...
[2024年07月14日T13:42:58Z ERROR chexit] 0ドルc8f681ed2e2e4da5525aa11416e970b7158cacb: Received an END cell with reason NOROUTE
[2024年07月14日T13:42:58Z ERROR chexit] 7ドルaa017ba2897ec9ebb5b5f08863254363e15ad77: Received an END cell with reason NOROUTE
[2024年07月14日T13:42:58Z INFO chexit] Collected results, successfully checked 2061 out of 2098 exits (98.24%, 37 abortions, 2 errors)
$ head exit_addresses
000ドルc351f86033654a82d9fd6ac3b178f44e236be 5.196.8.113
000ドルf3eb75342be371f1d8d3fae90890aeb5664ee 204.137.14.106
0011254ドルcc8444369b20ef11156b8990438221a54 178.218.144.18
0011ドルbd2485ad45d984ec4159c88fc066e5e3300e 162.247.74.201
0036ドルfa36ab435fd5d0f640626636867ebfb72c68 185.220.101.33 2a0b:f4c2:2::33
003ドルa08f1adc002d24979c68aa5a33369c04d9c7f 185.220.101.170 2a0b:f4c2:1::1
004ドルf9a0513c84e72054ceb555db51eeef319546d 192.42.116.174 2001:67c:6ec:203:192:42:116:174
0055ドルdb090820d7c08999ec1598fd6ea6365861ad 192.42.116.185 2001:67c:6ec:203:192:42:116:185
0061ドルd22afd1f06d4e6f35006bd3d9c21d7981ea9 109.70.100.70 2a03:e600:100::70
0077640ドルe103a829bf8228d42f95818dad1e9d84c 179.43.159.78
$ wc -l exit_addresses
2061 exit_addresses
Implementation Details
chexit works as follows:
- Bootstrap the consensus
- Spawn as many asynchronous tasks as there are exit nodes in the consensus
- Create a channel to a guard node
- Create a two hop circuit to the exit node
- Create an IPv4 and IPv6 stream to ip.cve.cx
- Perform an HTTP GET and parse the result
- Wait 4 minutes for all tasks to finish
- Collect the results, write them to stdout
Copyright
chexit was written by Clara Engler.
It is licensed under AGPL-3.0-only, see LICENSE for more details.