4 releases (breaking)

Uses old Rust 2015

0.4.0 Jul 22, 2018
0.3.0 Jul 7, 2018
0.2.0 Jun 26, 2018
0.1.0 Jun 22, 2018

#14 in #network-manager

GPL-3.0 license

220KB
4K SLoC

snail Build Status Crates.io

Disclaimer: The project is in a very early state, you're very likely to experience bugs. I'm using it as my daily driver, but you should expect a very bare bone experience if you're considering doing the same.

Parasitic network manager. snail is trying to fill the gap of a metasploit-like network manager. Its core feature is a scripting engine that can be used to match known networks and also interact with captive portals if one is discovered. Have a look at the scripts/ folder for examples. The basic idea is that you're trying to get connectivity, but you don't really care where it's actually coming from. Please remain seated and keep your arms and legs inside the firewall at all times.

logo

Installation

If possible, use the snail-git package for archlinux. For a manual setup on a debian based system, install the dependency libraries libseccomp-dev, libdbus-1-dev and libzmq3-dev.

Next, build the binary:

cargo build --release

And install it:

install -Dm755 target/release/snail{d,ctl} /usr/bin
install -Dm644 scripts/* -t /usr/lib/snaild/scripts

install -d /etc/snail/scripts
install -Dm644 contrib/snail.conf -t /etc/snail
install -Dm644 contrib/snail@.service -t /usr/lib/systemd/system
install -Dm644 contrib/snail-tmpfiles.conf /usr/lib/tmpfiles.d/snail.conf
install -Dm644 contrib/snail-sysuser.conf /usr/lib/sysusers.d/snail.conf

systemd-tmpfiles --create
systemd-sysusers
systemctl daemon-reload
systemctl enable --now snail@wlp3s0

You can monitor your network status with snailctl. Make sure your user is in the correct group which is specified in /etc/snail/snail.conf.

snailctl status

To add yourself to the correct group, run

usermod -aG snail user

snailctl decap

The captive portal engine should run automatically as part of snaild, but it's also possible to invoke it manually.

To execute the engine in verbose mode, run:

snailctl decap -v

Some portals also hijack the android captive portal probe, in that case you can bypass the captive portal test and execute the scripts directly by running:

snailctl decap -vf

If you are developing a new script, you can provide the path to that script using:

snailctl decap -v ~/scripts/foo.lua

By default, custom scripts are loaded from /etc/snail/scripts/*.lua, but you can also add additional folders to /etc/snail/snail.conf:

[scripts.paths."/home/user/snail/scripts"]
[scripts.paths."/opt/snail/scripts"]

To ensure your script is properly being picked up, run snailctl without any arguments:

snailctl

If you wrote a new script for a captive portal, please submit a pull request.

snaild dns

snaild contains a dns server that listens for dns queries on localhost and forwards them to a dns-over-https recursor. You can also configure your own zones that get forwarded to a different dns recursor, or hardcode static dns records.

[dns]
bind = "127.0.0.1:53"

# cloudflare
servers = ["1.1.1.1",
           "1.0.0.1",
           "2606:4700:4700::1111",
           "2606:4700:4700::1001"]
port = 443
sni = "cloudflare-dns.com"

[dns.records]
"foo.example.com" = ["192.0.2.10", "2001:DB8::10"]
"bar.example.com" = ["192.0.2.20", "2001:DB8::20"]

[dns.zones]
"example.com" = ["192.0.2.2", "2001:DB8::2"]
"corp.example.com" = ["192.0.2.3", "2001:DB8::3"]

Trivia

The name snailctl is inspired by Leucochloridium, a parasite that lives inside a snail and is able to control its host. In the long term, snaild is the process that interfaces with the snails brain and snailctl is the utility to control the snail through snaild.

The logo has been created by Baudon in 1879.

License

GPLv3+

Dependencies

~75MB
~1.5M SLoC