Hostbound is a teaching tool first and a game second. This guide is for instructors using it in a class, lab, or assigned-homework setting. It assumes you've already played the game once or twice and have read the Student Guide; this page focuses on the workflows that only make sense from the front of the room.

What Hostbound teaches

The single core concept is the SSH perspective shift: once you ssh into a remote machine, every command runs there, and the network that machine is on decides who you can reach next. Students who have only ever opened a terminal on their own laptop typically assume the laptop's connectivity travels with the session - Hostbound makes that wrong assumption fail loudly.

Layered on top of that core concept, the game also drills:

Classroom uses

Assigning a network

Code format

Every world is identified by a short shareable code. The prefix carries the address family, the body packs the topology seed plus mode bits (difficulty, Hidden Host Mode, Firewalls, Cybersecurity). A student pasting just the code reproduces your exact world byte-for-byte.

PrefixFamilyNotes
HB1-Pure IPv4The default. 10.x, 172.16-31.x, 192.168.x show up naturally; public-looking nets dominate at Normal+.
HB2-Pure IPv6Every LAN a unique ULA /64 inside fd00::/8. Hostname-only ssh works.
HB3-Dual-stackEach LAN independently v4-only, v6-only, or true dual-stack. Crossing v4↔v6 requires hopping a dual-stack bridge.
HB4-Custom sandboxYou dial the topology. See below.

HB1, HB2, HB3 bodies are 9 base36 characters: two mode chars + seven seed chars. Difficulty, Hidden Host Mode state, Firewalls bit, and Cybersecurity bit are inside the mode chars - so the code alone tells the recipient's browser everything. No URL parameters required.

HB4 bodies pack par hop count, branches, loops, family, IPv6 percentage, dual-stack percentage, and a density preset directly into the code body. Difficulty does not apply to a sandbox world; the recipient's difficulty badge shows Custom.

Copy Share Link vs Copy Challenge Link

Both menu items put a URL on the clipboard in the form https://www.its.ohio.edu/tools/hostbound/#<code>. The code itself carries every mode bit - difficulty, family, Firewalls, Hidden Host Mode, Cybersecurity - so the two buttons currently produce identical output. Use whichever language feels right for the moment ("here's a network" vs "here's a challenge").

Today's network (daily seed)

Hamburger menu → Today's network. The code is derived from today's local date and the current address-family selection - so every student opening the daily on the same day, in the same family, gets the same world. Useful for a once-a-week class race or a "warmup of the day" routine.

Custom sandbox worlds (HB4)

Hamburger menu → Challenges ▸ Custom network. Opens a modal where you can dial:

Hit Generate & play to drop into the world; hit Copy custom link to put the resulting HB4- link on the clipboard. The same parameters always produce the same world (the code is the source of truth); a random nonce inside the code lets a re-roll at identical parameters vary.

Every HB4 world is still solvability-proven: pinned G feeds the same chain generator, so the shortest start-to-gold path is exactly the par you dialled and the greedy hop-distance descent always succeeds.

Difficulty does not apply (it shows Custom); Firewalls and Cybersecurity are ignored on HB4 sandbox worlds - if you want filtered or vuln-laden topology, build it with a regular HB1 / HB2 / HB3 code at the difficulty you want.

Difficulty levels and what they teach

LevelPar hopsBranchesLoopsRoutersBest for
Casual2001First-five-minutes intro; a single demo on the projector.
Normal2-4a few01-2Default lab world. Subnet sizes start varying here.
Hard4-6several0-12-3Homework or graded turn-in.
Brutal6-8many1-23-5Capstone-style; rewards careful note-taking.
Extreme10-13many3-45-8~120 hosts. Class race / one-off challenge.

Casual is intentionally boring: no branches, no loops, the par is two hops. That makes it perfect for teaching the loop (ip anmapsshcat) without distractions. Normal is where variable subnet sizes start showing up. Hard adds occasional loop rings. Extreme has been verified to stay solvable across hundreds of seeds even with the largest counts.

Address modes (IPv4 / IPv6 / Dual-stack)

Selecting an address mode (top-right family badge) only steers the next new code you roll. Loaded codes always play in their own native family.

Firewall mode

Hamburger menu → Network Options ▸ Firewalls, or click the orange FW badge in the top bar once it's on. Some hosts and off-spine subnets silently drop ICMP and / or refuse ssh - the symptom is "host up in nmap but ssh refuses and ping times out". The puzzle is to find an unfiltered same-LAN peer and route around. The generator's filter-placement pass is constructive validate-or-revert: every tentative filter is kept only if the filtered forward-reachability still has dist(start → golden) == par AND every non-golden host stays reachable with truthful hints. Every Firewall world is solvable by construction. Toggling Firewalls regenerates the world (it is a generator-gate, not a runtime overlay) - so toggling mid-run will reroll your seed.

What this is good for in class: the most common confusing failure mode on real networks ("but I can ping it from the other room") is exactly what a Firewall world produces. Run the same world side-by-side with and without Firewalls on the projector and let students see the symptom shift.

Hidden Host Mode

The HHM / HHM Hard badge in the top bar (left of the Difficulty badge) cycles three states (Off / HHM / HHM Hard). HHM Hard hides everything except the LAN squares (and their labels) and the current host - host icons, ports, switches, and the hop trail are all hidden, so the rest must be deduced from terminal commands.

The win screen always shows the full map, so HHM Hard reveals what they were navigating only at the end. Useful for screen-reader-first students (the describe command works in any mode) and for upper-division labs where you want to force tracking on paper.

The Tutorial forces HHM Off; it needs the visible map to function.

Cybersecurity Mode

The purple CS badge in the top bar enables Cybersecurity Mode (Hamburger menu → Network Options ▸ Cybersecurity). Some hosts grow a vulnerability (sudo-misconfig, default-password, weak-password, unpatched-service) and to ssh them you need the matching tool in your inventory (priv-esc-kit, default-creds, hash-cracker, bof-exploit). nmap -sV annotates each up host's 22/ssh line with the vulnerability class so students can plan capability before they walk into a "Permission denied".

Capability comes from two sources:

The CS placement pass uses the same constructive validate-or-skip discipline as the Firewall pass: every vulnerability is kept only if a key-door BFS from start (with achievable inventory) still preserves dist(start → golden) == par and every baseline-reachable host stays reachable. Every CS world is solvable. Verified across 50 worlds per difficulty.

HB4 sandbox worlds ignore Cybersecurity - if you want a vulnerability-laden lab, use HB1 / HB2 / HB3 at Normal+.

Difficulty controls the difficulty: Casual is a no-op (zero vulns, zero loot, one starting tool); Normal / Hard give you a starting kit; Brutal / Extreme start you empty - you must walk into the broker's neighbourhood before you can do much.

The cipher ladder on the win screen

Win on any non-sandbox world and the win panel shows a short encrypted note about the next difficulty level. There is no scheme name and no hint - identifying and cracking it by hand is the puzzle. The ladder goes Caesar → Pigpen → Polybius → Rail Fence → Vigenère across Casual / Normal / Hard / Brutal / Extreme. Each level's plaintext spells the cipher used on the next level; Extreme's plaintext is the final reward.

The Pigpen rung is rendered as canvas line-segment glyphs (no external font - the no-CDN constraint still applies), auto-sized and word-wrapped to fit the win card.

Custom sandbox (HB4) worlds do not show a cipher note - difficulty doesn't apply and there's no canonical "next level" to point at.

Run reports and answer keys

Hamburger menu → Export run report, or the Export report button on the win panel. Produces a plain-text report covering:

The report is emitted three ways at once (no server / file://-safe): printed to the terminal as selectable text, copied to the clipboard, and offered as a data: download of hostbound-<code>.txt. Students hand in the unredacted report; you regenerate the same report on your own browser with Admin unlocked to compare against the answer key. (Or, if the assignment is just "win it", the hops / claims / rating lines are enough on their own.)

Admin tools

The hamburger menu has an Admin ▸ popout (a left-flyout, like Challenges ▸ and Theme ▸). It is gated by a passphrase prompt the first time you open it during a session.

Unlock (the passphrase)

Opening Admin ▸ opens a masked-input modal (not a plaintext browser prompt()). Wrong passphrase keeps the modal open with an inline error; Cancel / Esc / backdrop click drops the action. Successful unlock sets the session's S.admin flag. The passphrase is now sticky: it is remembered in localStorage, so you are not asked again on later games or reloads (admin mode still starts fresh each game - only the authentication is remembered). Use Clear Local Settings (below) to forget it.

The default passphrase is ducky. Because Hostbound ships as a static file, this is client-side obscurity, not real authentication - it stops casual shoulder-surfing and stops a student from poking around the menu by accident. Don't expect it to stop a determined student reading the source. If you'd rather use your own passphrase, recompute the hash in index.html (the comment near seedFromCode walks through it).

Reveal Path

Reveals the route from the current host to the golden machine: the path's hosts and LANs are added to the discovered set, a gold dashed line draws on the map, and the terminal prints the named hops. Useful when demoing a finished world without needing to actually play it.

Reveal Network

Adds every host and every LAN in the world to the discovered set. The whole map renders; you can pan / zoom to inspect topology, branches, loops, and bridges. The most useful Admin item in front of a class.

Jump to host

Opens a modal with a typeahead list of every host in the world (sorted by name). Pick one - or paste an IP - and you are teleported there. Does not count as an ssh hop, does not push to the hop trail, and does not trigger gameplay events (loot pickup, broker discovery). Admin teleports stay out of the recorded path so they don't pollute the student-facing record.

Show Firewalls

Toggle-style admin overlay. While on, every discovered host that is filtered (host firewall or a LAN-ACL victim) shows an orange flame badge at the top-right of its icon - on both the main map and the minimap. Honours fog-of-war and HHM Hard. Run-only visual aid for debugging "why won't this hop?"

Show Darkweb

Toggle-style admin overlay (Cybersecurity Mode only). Auto-reveals the broker host and its LAN on enable and overlays a purple $ badge on the broker's icon - on both the main map and the minimap. Useful for showing a class "this is the host they need to find to unlock the shop". Silent on non-CS worlds and on HB4 sandboxes.

Clear Local Settings

Wipes the only browser-persisted state Hostbound keeps - the Theme choice, High-Visibility, and the sticky Admin passphrase - and resets them to their defaults. Use it to re-lock Admin (the passphrase will be required again) or to hand a lab machine back in a clean state. Game progress is never persisted, so there is nothing else to clear.

Accessibility for students with different needs

High-Visibility, Theme, and (once you unlock it) the sticky Admin passphrase are the only things that persist across reloads - and Admin ▸ Clear Local Settings wipes all three. Everything else - game progress, the current code, all the mode toggles - resets, which is the intentional behaviour for a learning tool that gets re-opened many times.

In-class demo checklist

Grading suggestions

What Hostbound deliberately does not do