HORST(8)
HORST(8) β System Manager's Manual π
okay bestie, this is the HORST(8) manual page, and we're gonna make it make sense. no cap. π
πΈ NAME πΈ
horst β Highly Optimized Radio Scanning Tool β¨
π¦ SYNOPSIS π¦
horst [-v] [-h] [-q] [-D] [-a] [-c file] [-C channel] [-i interface] [-t
sec] [-V view] [-d ms] [-b bytes] [-M file] [-s] [-u] [-N] [-n IP] [-p
port] [-o file] [-X name] [-x command] [-e mac] [-f pkt_name] [-m mode]
[-B BSSID]
π₯ DESCRIPTION π₯
horst is a small, lightweight IEEE802.11 wireless LAN analyzer with a text interface. Its basic function is similar to tcpdump, Wireshark or Kismet, but it's much smaller and shows different, aggregated information which is not easily available from other tools. It is mainly targeted at debugging wireless LANs with a focus on ad-hoc (IBSS) mode in larger mesh networks. It can be useful to get a quick overview of what's going on on all wireless LAN channels and to identify problems.
- Shows signal values per station. πΆ
- Calculates channel utilization ("usage") by adding up the amount of time the packets actually occupy the medium. β³
- "Spectrum Analyzer" shows signal levels and usage per channel. π
- Text-based "graphical" packet history, with signal, packet type and physical rate. π
- Shows all stations per ESSID and the live TSF per node as it is counting. π
- Detects IBSS "splits" (same ESSID but different BSSID - this is a common driver problem). π
- Statistics of packets/bytes per physical rate and per packet type. π
- Has some support for mesh protocols (OLSR and batman). π¦
- Can filter specific packet types, source MAC addresses or BSSIDs. π―
- Client/server support for monitoring on remote nodes. π°οΈ
- Can be controlled via a named pipe. πͺ
See MONITOR MODE below for more information about the network interface setup.
π OPTIONS π
-vβ Show version. β¨-hβ Show summary of options. π«Ά-qβ Quiet mode. Don't show user interface. This is only useful in conjunction when running in server mode (-C) or writing to a file (-o). π€«-Dβ Show lot's of debugging output, including a full package dump. Only available when compiled withDEBUG=1. π-aβ Always add virtual monitor interface. Don't try to set existing interface to monitor mode. π οΈ-c configfileβ Useconfigfileinstead of the default"/etc/horst.conf". π-C channelβ Set inital channel (number not frequency). π‘-i intfβ Operate on the given network interface instead of the default"wlan0". π§΅-t secβ Timeout (remove) nodes after not receiving packets from them for this time in seconds (default:60sec). β°-V viewβ Display'view'. Valid view names are"history","hist","essid","statistics","stats","spectrum","spec". ποΈ-d msβ Display update interval. The default value of100mscan be increased to reduce CPU load caused by redrawing the screen. π₯οΈ-b bytesβ Receive buffer size. The receive buffer size can be set to tune memory consumption and reduce lost packets under load. π§-M filenameβ MAC address to host name mapping file. The file can either be adhcp.leasesfile from dnsmasq or contain mappings in the form"MAC<space>name"(e.g.:"00:01:02:03:04:05 test") line by line (default filename:/tmp/dhcp.leases). π·οΈ-sβ Show a poor mans "spectrum analyzer". The same can be achieved by runninghorstas normal and pressing the button's'(Spec); then'c'(Chan) and'a'(Automatically change channel). π-uβ Upper channel limit for the automatic channel change. β¬οΈ-Nβ Allow client connections. Server mode. Only one client connection is supported at the moment (default: off). ποΈ-n IPβ Connect to ahorstinstance running in server-mode at the specified IP address. π-p portβ Use the specified port (default:4444) for client/server connections. π-o filenameβ Write a information about each received packet intofilename. Note that you can send to STDOUT by using-o /dev/stdout. See OUTPUT FILE FORMAT below. π-Xβ Accept control commands on a named pipe (default/tmp/horst). πͺ-X nameβ Accept control commands on a named pipe with given name or set pipe name used with-x. π·οΈ-x commandβ Send control command to anotherhorstprocess who was started with-Xand then exit. Multiple commands can be concatenated with';'. Currently implemented commands are:pauseβ Pause horst processingresumeβ Resume horst processingresetβ Reset all history, statistics and viewschannel=Xβ Set channel channel numberchannel_scan=Xβ Automatically change channels (1or0)channel_dwell=Xβ Set channel dwell time when automatically changing channel (ms)channel_upper=Xβ Set max channel when automatically changing channeloutfile=Xβ Write to outfile namedX. If the file is already open, it is cleared and re-openend. If filename is not specified ("outfile=") any existing file is closed and no file is written.
-e MACβ Filter all MAC addresses except these, to show only packets originating from the specified MAC addresses. This option can be specified multiple times. π―-f pkt_typeβ Filter all packets except these. This option can be specified multiple times. For valid packet names see NAMES AND ABBREVIATIONS below. π§ͺ-m (AP|STA|ADH|PRB|WDS|UNKNOWN)β Only show/include packets and nodes of this mode. Note that the mode is infered by the information of packets we received and it may take some time until a node is properly classified. This option can be specified multiple times. π·οΈ-B BSSIDβ Only show/include packets which belong to the given BSSID. π―
π TEXT USER INTERFACE π
The ncurses-based text interface tries to display a lot of information, so it may look confusing at first. Below we describe the different screens and options. π«Ά
Main screen
The initial (main) screen is split into three parts. The upper area shows a list of aggregated "node" information, the most useful information about each sender which was discovered, one per line:
/β "Spinner" to show activityPkβ Percentage of this node's packets in relation to all received packetsRe%β Percentage of retried frames of all frames this node sentChaβ Channel numberSigβ Signal value (RSSI) in dBmRATβ Physical data rateTRANSMITTERβ MAC address of senderMODEβ Operating Mode (AP,AHD,PRB,STA,WDS), see "NAMES AND ABBREVIATIONS"ENCRβ Encryption (WPA1,WPA2,WEP)ESSIDβ ESSIDINFOβ Additional info like"BATMAN", IP address...
The lower area shows a scrolling list of packets as they come in:
Chaβ Channel numberSigβ Signal value (RSSI) in dBmRATβ Physical data rateTRANSMITTERβ MAC address of senderBSSIDβ BSSIDTYPEβ Packet type, see "NAMES AND ABBREVIATIONS"INFOβ Additional info like ESSID, TFS, IP address...
The lower right box shows bar graphs for:
- Signal of last received packet in green π’
bpsβ Bits per second of all received packetsUsageβ Percentage of channel use
The lower edge is the menu and status bar, it shows which keys to press for other screens. The status shows ">" when horst is running or "=" when it is paused, then "F" when any kind of filter is active, the Channel, the monitor interface in use and the time. β±οΈ
Pause ('p' or <space>)
Can be used to pause/resume horst. When horst is paused it will loose packets received in the mean time. π
Reset ('r')
Clears all history and aggregated statistical data. π§Ή
History ('h')
The history screen scrolls from right to left and shows a bar for each packet indicating the signal level. In the line below that, the packet type is indicated by one character (See NAMES AND ABBREVIATIONS below) and the rough physical data rate is indicated below that in blue. π
ESSID ('e')
The ESSID screen groups information by ESSID and shows the mode (AP, IBSS), the MAC address of the sender, the BSSID, the TSF, the beacon interval, the channel, the signal, a "W" when encrytoion is used and the IP address if known. π·οΈ
Statistics ('a')
The statistics screen groups packets by physical rate and by packet type and shows other kinds of aggregated and statistical information based on packets. π
Spectrum Analyzer ('s')
The "poor mans spectrum analyzer" screen is only really useful when horst is started with the -s option or the "Automatically change channel" option is selected in the "Chan" settings, or the config option channel_scan is set. π
It shows the available channels horizontally and vertical bars for each channel:
- Signal in green π’
- Physical rate in blue π΅
- Channel usage in orange/brown π
By pressing the 'n' key, the display can be changed to show only the average signal level on each channel and the last 4 digits of the MAC address of the individual nodes at the level (height) they were received. This can give a quick graphical overview of the distance of nodes. π
Filters ('f')
This configuration dialog can be used to define the active filters. ποΈ
Channel Settings ('c')
This configuration dialog can be used to change the channel changing behaviour of horst or to change to a different channel manually. π‘
Sort ('o')
Only active in the main screen, can be used to sort the node list in the upper area by Signal, Time, BSSID or Channel. π
π NAMES AND ABBREVIATIONS π
802.11 standard frames
Management frames
okay bestie, so every management frame has a lil one-letter code, right? here's the whole roster, no gatekeeping:
aβASOCRQ, Association requestAβASOCRP, Associaion responseaβREASRQ, Reassociation requestAβREASRP, Reassociation responsepβPROBRQ, Probe requestPβPROBRP, Probe responseTβTIMING, Timing AdvertisementBβBEACON, BeacontβATIM, ATIMDβDISASC, DisassociationuβAUTH, AuthenticationUβDEAUTH, DeauthenticationCβACTION, ActioncβACTNOA, Action No Ack
Control frames
the control girlies, they're short and sweet and lowkey carrying the whole network:
wβCTWRAP, Control WrapperbβBACKRQ, Block Ack RequestBβBACK, Block AcksβPSPOLL, PS-PollRβRTS, RTSCβCTS, CTSKβACK, ACKfβCFEND, CF-EndfβCFENDK, CF-End + CF-Ack
Data frames
the data frames, aka the ones actually doing the work π (and yes, letters repeat, because the codes overlap β iykyk):
DβDATA, DataFβDCFACK, Data + CF-AckFβDCFPLL, Data + CF-PollFβDCFKPL, Data + CF-Ack + CF-PollnβNULL, Null (no data)fβCFACK, CF-Ack (no data)fβCFPOLL, CF-Poll (no data)fβCFCKPL, CF-Ack + CF-Poll (no data)QβQDATA, QoS DataFβQDCFCK, QoS Data + CF-AckFβQDCFPL, QoS Data + CF-PollFβQDCFKP, QoS Data + CF-Ack + CF-PollNβQDNULL, QoS Null (no data)fβQCFPLL, QoS CF-Poll (no data)fβQCFKPL, QoS CF-Ack + CF-Poll (no data)*βBADFCS, Bad frame checksum
Packet types
so this is like the 802.11 frames above but a glow-up β higher level, and it's a bit field, which means the types can overlap (like DATA + IP at the same time, iconic behaviour fr fr). it also scoops up more info: IP, ARP, BATMAN, OLSR, all of it π¦
CTRLβ0x000001, WLAN Control frameMGMTβ0x000002, WLAN Management frameDATAβ0x000004, WLAN Data frameBADFCSβ0x000008, WLAN frame checksum (FCS) badBEACONβ0x000010, WLAN beacon framePROBEβ0x000020, WLAN probe request or responseASSOCβ0x000040, WLAN associaction request/response frameAUTHβ0x000080, WLAN authentication frameRTSCTSβ0x000100, WLAN RTS or CTSACKβ0x000200, WLAN ACK or BlockACKNULLβ0x000400, WLAN NULL Data frameQDATAβ0x000800, WLAN QoS Data frame (WME/WMM)ARPβ0x001000, ARP packetIPβ0x002000, IP packetICMPβ0x004000, IP ICMP packetUDPβ0x008000, IP UDPTCPβ0x010000, IP TCPOLSRβ0x020000, OLSR protocolBATMANβ0x040000, BATMAND Layer3 or BATMAN-ADV Layer 2 frameMESHZβ0x080000, MeshCruzer protocol
Operating modes
this one's a bit field too, and it gets inferred from the packets that actually show up. so yeah, modes overlap β it's genuinely normal to see STA and PRB living together at the same time, no drama π«Ά
APβ0x01, Access Point (AP)ADHβ0x02, Ad-hoc nodeSTAβ0x04, Station (AP client)PRBβ0x08, Sent PROBE requestsWDSβ0x10, WDS or 4 Address framesUNKNOWNβ0x20, Unknown e.g. RTS/CTS or ACK
π°οΈ MONITOR MODE π°οΈ
to capture and analyze 802.11 traffic, your interface has got to be in monitor mode. that's the whole vibe. you can either set it up manually beforehand like a responsible icon, or just let horst do it automatically at startup. heads up: you usually need root privileges to mess with an interface setup, so β¨sudoβ¨ is your friend.
horst should work with any wireless LAN card and driver that supports monitor mode, with either "prism2" or "radiotap" headers. that includes most modern mac80211-based drivers β we love to see it.
if the interface isn't already in monitor mode at startup, horst first tries to put it in monitor mode itself. if that fails (for example when the interface is already in use π), it adds a new virtual monitor interface called horst0 and uses that instead. that virtual monitor interface gets removed when horst exits, so no leftovers. but β and this is the important bit β changing the channel via a virtual monitor interface is not allowed by the wireless driver, so options -C and -s do not work when a virtual monitor interface is being used. periodt.
Examples of how to setup an interface manually:
Using iw:
iw wlan0 interface add mon0 type monitor
or
sudo iw wlan1 set type monitor
sudo iw wlan1 set channel 6
Using iwconfig:
iwconfig wlan0 mode monitor
iwconfig wlan0 channel 1
ifconfig wlan0 up
Using madwifi:
wlanconfig wlan0 create wlandev wifi0 wlanmode monitor
Using hostap:
iwconfig wlan0 mode monitor
iwpriv wlan0 monitor_type 1
π NOTES π
signal values and ranges may differ between wireless drivers and versions. so don't come for horst if your numbers look different, okay? different drivers, different vibe π
π OUTPUT FILE FORMAT π
the format of the output file (that's the -o flag, bestie) is a comma separated list of the following fields, in the following order, one packet per line. no cap, that's the exact order:
timestampβ Local time, including microseconds (e.g.2015-05-16 15:05:44.338806 +0300)packet_typeβ 802.11 MAC packet type name as defined in the section"NAMES AND ABBREVIATIONS".wlan_srcβ Source MAC addresswlan_dstβ Destination MAC addresswlan_bssidβ BSSIDpkt_typesβ Higher level packet name as defined in section"NAMES AND ABBREVIATIONS".phy_signalβ Signal strength in dBmwlan_lenβ Packet length (MAC)phy_rateβ Physical data ratephy_freqβ Received while tuned to this frequency.wlan_tsfβ TFS timer valuewlan_essidβ ESSID, network namewlan_modeβ Operating modes as defined in"NAMES AND ABBREVIATIONS".wlan_channelβ Channel numberwlan_wepβ Encryption in usewlan_wpaβ WPA1 Encryption in usewlan_rsnβ RSN (WPA2) Encryption in useip_srcβ IP source address (if available)ip_dstβ IP destionation address (if available)
π SEE ALSO π
go read these too, they're all part of the extended universe:
horst.conf(5)tcpdump(1)wireshark(1)kismet(1)READMEhttp://br1.einfach.org/tech/horst
π AUTHOR π
horst was written by Bruno Randolf <br1@einfach.org>.
This manual page was written by Antoine BeauprΓ© <anarcat@debian.org>, for the Debian project (and may be used by others).
okay that's the whole page bestie, you made it to the end π this was HORST(8), dated July 22, 2015 β go forth and monitor some packets, you absolute legend πβ¨
π¦ where this page comes from
- debian bookworm: horst 5.1-3 Β· GPL-2.0-or-later
- debian trixie: horst 5.1-3 Β· GPL-2.0-or-later
- nixos 26.05: horst 5.1
- nixpkgs unstable: horst 5.1
- opensuse-leap 16.0: horst 5.1-bp160.1.13 Β· GPL-2.0-only
- opensuse-leap 16.0: horst 5.1-bp160.1.13 Β· GPL-2.0-only
- opensuse-leap 16.0: horst 5.1-bp160.1.13 Β· GPL-2.0-only
- opensuse-leap 16.0: horst 5.1-bp160.1.13 Β· GPL-2.0-only
- ubuntu jammy: horst 5.1-2.1 Β· GPL-2.0-or-later
- ubuntu noble: horst 5.1-3ubuntu1 Β· GPL-2.0-or-later
- ubuntu questing: horst 5.1-3ubuntu1
- ubuntu resolute: horst 5.1-3ubuntu2 Β· GPL-2.0-or-later
- ubuntu stonking: horst 5.1-3ubuntu2 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms