Why receiving is opt-in
An XDP program sits in front of the kernel. Whatever it claims, the kernel never sees. That’s fine when the program claims nothing, which is the default. Wireblast installs a filter that matches nothing at all, so every packet the interface receives continues up the normal stack. Your SSH session, DNS, ARP, monitoring, everything: untouched. Turn receiving on and packets start getting pulled aside. Do that too broadly on a box you’re logged into over that interface, and you cut yourself off. Not “the tool gets slow” but the session freezes, and stays frozen until the run ends. So receiving is something you ask for, per run, and Wireblast tells you exactly what you’re about to take:The receive modes
Before it attaches anything, Wireblast spells out the consequence in plain language:
Honest limitations
These matter, because a filter that’s broader than you assumed is how you lose a box:generated-flowmatches the IP pair only, not ports. So any protocol between those two addresses gets redirected, not just this test’s traffic. The underlying matcher can AND a source and destination CIDR, but can’t also require a port.udp-portandtcp-portmatch the destination port only. Replies to a port Wireblast chose as its source aren’t matched.cidrmatches the source address only. Traffic you send toward that range is unaffected; traffic coming back from it is redirected in full.udp-portandtcp-portare IPv4 only. The address-based modes (cidr,generated-flow,keep-management,all) work for IPv6 as well.
Warnings you’ll get
Point a filter at something load-bearing and it says so:--rx-mode cidr, if your own client might be inside the range:
Capturing everything safely: keep-management
Often you want to capture broadly on the very interface you’re logged in over, without the ceremony ofall and without losing your session. That’s --rx-mode keep-management.
It redirects everything, then carves out the handful of things that keep the box reachable:
- ARP and IPv6 neighbour discovery. Without these the kernel loses the gateway’s MAC within about a minute and the box goes unreachable, no matter what else you spared. These matter most.
- SSH to and from this host (TCP port 22).
- DNS replies (UDP and TCP source port 53).
--allow-match-all, no typed confirmation, because it can’t cut you off.
- Other services on the interface still lose their traffic. A web server or database listening on this NIC stops receiving for the duration of the run. Your SSH and DNS keep working, but everything else is captured. That’s the point, but it’s worth knowing on a box that does more than testing.
- The exceptions are scoped to the standard ports. SSH on a non-standard port is not spared, and traffic from ports 22 or 53 toward the host isn’t captured. For a measurement that’s irrelevant; if you’re hunting an adversary who picks those source ports, it matters.
The match-all guard
--rx-mode all is the one that can genuinely take a machine away from you. It has three independent layers of protection, and --yes gets past none of them.
1
Validation refuses it outright
Without
--allow-match-all, the run never starts:2
The filter builder checks again
A second, independent check, so a code path that skipped validation still can’t produce a match-all filter by accident.
3
You type the word
The run is marked dangerous, which means a confirmation you have to actually type:One keystroke won’t do it. Neither will
--yes.Scripting it anyway
You can automate--rx-mode all. You just have to be explicit about it:
--allow-match-all is the non-interactive stand-in for typing yes. That’s also why picking all in the wizard sets it for you: the review screen with its typed confirmation is already doing that job, so the flag isn’t an extra gate there.
Receive-only runs
--mode receive transmits nothing at all, which is useful for turning a box into a sink that just counts what arrives:
--rx-mode none would do nothing whatsoever, so Wireblast catches that combination and says so.
What isn’t remembered
Wireblast remembers your settings between runs, but never your consent.--allow-match-all and --yes are always dropped, and a saved --rx-mode all is downgraded to none.
Remembering that a previous run said yes to something dangerous would quietly carry that decision forward, which is exactly what these confirmations exist to prevent. Narrower receive modes are useful to remember, and are kept.