Releases: donislawdev/BeanNetworkTester
Release list
0.4.0
⭐ If it saved you time, leave a star. That is how the next tester who needs it finds out it exists.

The short version. This release is about numbers you can trust and targeting that catches what
you aimed at. If you read nothing else:
- Aiming at a process now catches a connection from its first packet, TCP and UDP alike.
"Drop SYN" combined with a process target previously did nothing at all, and DNS and QUIC walked
past untouched. - "Effective loss" was wrong and is now right. It counts every impairment, over the traffic you
aimed at. A session losing 90% of its traffic to a speed limit used to report 0.0%. - Presets and the shipped scenarios were recalculated against published measurements. Latency
was applied twice, and three presets were eight times too fast. - A session moves about 1.3x more packets a second, and a delay you ask for arrives without the
old few-millisecond surcharge. - New: "Capture only the targeted traffic". On a real run without it, the driver threw away 43%
of the traffic you had aimed at before this tool ever saw it. - New: "Show only the targeted traffic", five new presets, a "Driver queue wait" reading, and a
warning when your target shares a port with another program. - Config and scenario files now reject a typo instead of ignoring it.
- Plus a long list of fixes to the counters, the Connections table and session start/stop.
If you script this tool, read the BREAKING section: presets, "Effective loss", profiles, the
statistics CSV, the connections CSV and the reproduction report all changed shape or meaning.
BREAKING
-
A misspelled setting in a config file is now an error.
"latancy": 300used to load in
silence, so--dry-runsaid "Configuration is valid" and the run went out with no latency at
all. Unknown settings now fail with code3, naming the key and suggesting the near miss. Files
this tool saved keep loading. A hand-written file with an unknown name will not. -
A mistake in a scenario file now says so instead of doing nothing.
"duraton"used to leave a
reset at its default and"lop"used to turn looping off, both silently, so the tool looked like
it was ignoring your file. Unknown keys, in a step or at the top level, are now an error naming
the key. A correct file keeps working. -
A scenario that ends now ends the run. A non-looping scenario with a timeline used to print
"Scenario finished." and then run forever, which in a pipeline is a job that hangs to its own
timeout and writes nosummary. Such a run now stops withstop_reason: "scenario_done"and says
so at the start.--durationstill wins wherever you pass it. -
The old
reset_nowscenario action is gone.reset_tcpdoes the same thing and is now the
only action. A file still usingreset_nowwill not load and says which step to fix. The
"Reset TCP now" button is unaffected. -
The presets were wrong and are now checked against published measurements. Latency was set as
if it were a ping, but it is added in both directions, so "Satellite link" at 600 ms delivered a
1200 ms ping. Three presets held kilobits where the field wants kilobytes, making them
eight times too fast. If you scripted--preset, your traffic changes. Ids are unchanged, but
--preset "Satellite link"is now "Satellite (geostationary)". -
The shipped scenarios in
scenarios/were recalculated the same way, so a scenario and a
preset describe the same network with the same numbers. The ping you get is now the number written
in the file. -
"Effective loss" now means what its name says, and your numbers will change. It used to be the
configured Loss percentage over every packet seen, ignoring speed limits, blocking, LAN cut, link
outages, resets, dropped SYNs and expired NAT. It now counts every impairment, over the traffic you
aimed at.effective_loss_pctandeffective_corruption_pctmoved with it, so reports from before
and after are not comparable. -
"Duplicated" counts packets actually sent twice, not packets the tool decided to duplicate.
Under load the copy was thrown away while the counter rose anyway: 40 packets in, "Duplicated"
read 40, nothing reached the wire. This matches "Corrupted", which always counted only real
changes. Reports from before and after are not comparable on that field. -
Profiles now remember more of the link: latency spikes, link outages (flapping) and the buffer,
on top of the original seven fields. Outages are why it was worth doing - a profile can finally
describe a link that cuts out. Old profiles load exactly as before. Picking a preset now clears
all of these, so "Perfect network" really does clear everything, and--presetfinally does what
the window does. -
The Connections table now shows what arrived AND what was offered. "down", "up" and "total"
held captured bytes under headings meaning delivered, so a row could read 5 MB while the
application got 0.4 MB. Those three are now delivered, and new "down seen" / "up seen"
hold what was captured. The connections CSV changed shape: the three old byte columns are
replaced by sixdelivered_*andcaptured_*ones, renamed rather than reused. -
The reproduction report's "connections reset" counted packets, not connections. One reset
connection could report itself as 50. The report now carries three keys that answer three
questions:connections_reset,rst_packets_droppedandrst_sent. The statistics CSV gained a
matchingconnections_resetcolumn. Nothing on screen changed. -
The statistics CSV gained
capture_narrowedandpackets_in_scopecolumns. The first records
whether "Capture only the targeted traffic" was in effect, without which two rows under one header
can count completely different traffic. Your existing file is moved aside with a timestamp and a
fresh one started, as it already is whenever columns change, so no row misaligns. A script reading
by column position needs the new offsets. -
--guino longer accepts any other option.--gui --loss 30 --duration 600used to open no
window and quietly impair in the background, with no STOP button anywhere. It now stops with a
usage error (code2) and says what to do instead. If a script relied on this, delete--gui
from it.
Added
-
Five new presets: Satellite (low orbit), Distant server (another continent), Congested home
link (bufferbloat), Train / metro (tunnels) and In-flight Wi-Fi. Two are worth a note: bufferbloat
only bites once you really saturate the link, and Train / metro is the only preset that takes the
connection fully down, so your application has to reconnect rather than just slow down. -
"Show only the targeted traffic" (Settings, off by default) points the counters, the chart, the
Connections table and the connections CSV at your target alone. It changes what you see, never
what is captured or impaired. Three things deliberately do not follow it: "Queue overflow",
"Dropped at stop" and "Send failed" always cover everything, because they count the tool's own
losses. The statistics CSV carries both totals instead. Reports and--format jsonare unchanged. -
"Capture only the targeted traffic" (
--narrow-filter) pushes your destination IP and port
into WinDivert, so traffic that could never be impaired is not handed over at all. It is a
correctness fix, not just a speed one: measured on a real run, without it the driver threw away
43% of the traffic you aimed at before the tool saw it. It applies at START, and does nothing
for a process target, a wildcard or anre:pattern - the run says which. -
"Driver queue wait (peak)" in the Session tab shows how long packets waited inside WinDivert
before the tool saw them. That is the one delay the tool adds and counted nowhere. It is measured,
not estimated. Expect a fraction of a millisecond when idle; above 50 ms the log says so. Blank
under--simulate. -
A session now records the WinDivert queue it ran behind (length, time and size) in the log and
in the reproduction report, so a report from a machine you do not have in front of you says which
queue produced its numbers. -
The tool now warns when your target shares a port with another program. Windows lets several
programs hold one local port - that is how mDNS, SSDP and DHCP work - and this tool decides what to
break from the port number. On this machine four ports out of 127 were shared, one of them by five
programs. Applying a target now names the port and who holds it, so you know that part of the
result is a coin toss. -
The command line says when your target stops matching, instead of finishing green in silence.
Measured: aiming by process id and restarting the program left five out of five new connections
untouched with nothing in the output. Aiming by name recovers on its own and costs only the
first connection. Aiming by process id never recovers. If the program under test restarts, aim
by name. -
Every run with a process target ends by saying how much of the captured traffic was yours -
"In scope: 40 of 500 captured packets" - and calls it out when that is zero. A run where your
target caught nothing looks exactly like a run where your application coped. It is a warning, not
a failure, because a quiet target is perfectly ordinary.
Changed
- The checkbox is now called "Capture only the targeted traffic", not "Narrow the driver filter
to the target". The old name described the machinery. The--narrow-filterflag i...
0.4.0-rc.1
⭐ If it saved you time, leave a star. That is how the next tester who needs it finds out it exists.

Full changelog:
https://github.com/donislawdev/BeanNetworkTester/blob/master/CHANGELOG.md
0.3.0
⭐ If it saved you time, leave a star. That is how the next tester who needs it finds out it exists.

Full changelog:
https://github.com/donislawdev/BeanNetworkTester/blob/master/CHANGELOG.md
0.3.0-rc.1
There are still some bugs, I'm working on it.
But a lot of people has asked for the open source, so here is it :-)
Full changelog (V0.3.0):
https://github.com/donislawdev/BeanNetworkTester/blob/master/CHANGELOG-INTERNAL.md
⭐ If it saved you time, leave a star. That is how the next tester who needs it finds out it exists.
