Skip to content

Instantly share code, notes, and snippets.

@mid-kid
Last active October 30, 2024 14:44
Show Gist options
  • Save mid-kid/b60563059a393f90522f5e57aabfc493 to your computer and use it in GitHub Desktop.
Save mid-kid/b60563059a393f90522f5e57aabfc493 to your computer and use it in GitHub Desktop.
WiFi in de trein auto login script
#!/bin/sh
# Logs in automatically to the "WiFi in de trein" public hotspots, located in
# trains in the Netherlands.
# Requires: curl, sed
set -e
tmp="$(mktemp -d -p '' 'hslogin.XXXXXXXXXX')"
trap "rm -r '$tmp'" EXIT
curl="curl --dns-servers 8.8.8.8,8.8.4.4 -s -v -m 30"
$curl -c "$tmp/cookies" 'http://portal.nstrein.ns.nl/' > "$tmp/page"
token="$(sed -n -e 's/.* id="csrfToken" value="\([^"]*\)" .*/\1/p' "$tmp/page")"
test -n "$token"
$curl -b "$tmp/cookies" -X POST -H 'Content-Length: 0' -H 'Origin: http://portal.nstrein.ns.nl' -H 'Referer: http://portal.nstrein.ns.nl/' -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: close' "http://portal.nstrein.ns.nl/nstrein:main/internet?csrfToken=$token" > /dev/null
@Josef47
Copy link

Josef47 commented Jun 17, 2024

how do I run this?

@mid-kid
Copy link
Author

mid-kid commented Jun 17, 2024

It's a shell script. You run it with a shell.

Depending on what wireless networking system you use, you can bind it to execute after connecting to specific networks. For example, in my /etc/dhcpcd.exit-hook file, I have the following:

case "$reason" in
BOUND|BOUND6)
    if $if_up; then
    case "$ifssid" in
    "WiFi in de trein"|"WiFi in de Trein"|"Wifi in de trein")
        setsid sh -c 'sleep 5 && exec /usr/local/bin/hslogin-nstrein' 2>&1 > /dev/null &
        ;;
    esac
    fi
    ;;
esac

But if you're using NetworkManager without dhcpcd (which I think is the most common configuration for Linux these days), then you might want to look for examples on how to make a dispatcher.d script for it. Exact documentation is for example here: https://manpages.debian.org/bookworm/network-manager/NetworkManager-dispatcher.8.en.html

@ThunderSphun
Copy link

When i run this, it states that --dns-servers not supported is, i have tried with curl from snap and from apt, but both dont give a result

@mid-kid
Copy link
Author

mid-kid commented Oct 30, 2024

I don't know if curl on ubuntu is built with adns support, I use gentoo and I had to enable it. The only reason it's there is because dnsmasq wouldn't consistently resolve domain names before logging into the portal. You can remove the --dns-servers 8.8.8.8,8.8.4.4 option and depending on your system it might "just work".

@ThunderSphun
Copy link

yes, this worked, it even worked when i forgot to remove the dns servers listed, script works way better than all the "solutions" i found

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment