Skip to content

Feature: More improvements - #3667

Merged
mergify[bot] merged 13 commits into
mainfrom
feature/some-improvements
Oct 28, 2026
Merged

mergify[bot] merged 13 commits into
mainfrom
feature/some-improvements

Conversation

@BornToBeRoot

@BornToBeRoot BornToBeRoot commented Oct 28, 2026 •

Copy link
Copy Markdown
Owner

Description

A few improvements across the app. See commits.

Related issue

Ref #3609

Type of change

  • 🐛 Bug fix
  • ✨ New feature / improvement
  • 📖 Documentation / website
  • 🧹 Refactoring / maintenance (no functional change)

How has this been tested?

Manual and with tests.

Screenshots

Checklist

  • The solution builds and was tested on Windows (dotnet build, dotnet test).
  • The documentation is updated (if needed).
  • An entry is added to the changelog.
  • New texts are only added to Strings.resx (translations are done on Transifex).
  • No files in Source/3rdparty/ are changed.

Contributing

By submitting this pull request, I confirm that:

BornToBeRoot and others added 13 commits October 28, 2026 20:36
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add 554 (RTSP), 631 (IPP), 8080, 8443 and 62078 (iPhone / iPad) to the
default ports (16 ports, all scanned at the same time with the default
16 port threads). Settings with the old defaults (release and
pre-releases) are migrated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ast to the default ports

Add 21, 23, 5900, 5985, 7000 and 8009 (22 ports, 2 rounds with the
default 16 port threads, ~4 s for an unreachable host like 2 ICMP
attempts).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…before the scan

Ping hosts before the scan used the timeout / attempts of the port scan
and a fixed 32-byte buffer. New settings like the IP Scanner (default
2 attempts, 2000 ms, 32 bytes), disabled while the option is off.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The group views were only translated with ProfileGroup_* keys (only
General / Application exist), so e.g. "RemoteDesktop" was shown. Fall
back to the application names like the profile dialog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Groups get Ports (ports, port ranges and port profiles) for the Port
Scanner, used by the profiles of the group that don't override them.
Profiles get a Ports checkbox under "Override default settings", like
the other settings that can be set in a group. The ports of a profile
are resolved in one place (Profiles.Application.PortScanner.GetPorts).

Profile file schema version 2 (first use of the version): profiles of
older files with ports get the override enabled when loaded, so they
keep their ports.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ApplicationName_Firewall was missing, so the name fell back to the enum
name wherever application names are translated (list of features,
settings, run command).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A hostname looked up with PTR showed the exception text "An invalid IP
address was specified". Hostnames are skipped with a message now, the
other hosts are looked up. The IP check of the DNS Lookup (PTR for IP
addresses) moves to IPAddressHelper to be shared.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Groups get DNS server (like the profile), used by the profiles of the
  group that don't override it: profile -> group -> selected in DNS
  Lookup.
- Profiles get Type (record type). Without it, a profile is looked up
  with PTR for IP addresses and A for hostnames instead of the record
  type last selected in DNS Lookup. PTR with a hostname is an error in
  the profile (can't be saved).
- DNS server and type are under "Override default settings" in the
  profile, like the other settings that can be set in a group.
- DNS server and type of a profile are resolved in one place
  (Profiles.Application.DNSLookup).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The profiles of a group renamed only by case (e.g. "servers" ->
"Servers") were not updated (case-insensitive comparison), but groups
are looked up case-sensitive: opening such a profile in a feature with
group settings threw "Group not found", editing it could create a second
group with the old name. Profiles are updated on any rename now, and
profiles of existing files get the name of the group they are saved in
when loaded.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…vers

Profiles and groups saved and loaded the ports (port profiles) and DNS
servers with copies of the same code (dialog manager, profile and group
view model, Port Scanner / DNS Lookup helper). New PortProfile.Encode /
Decode and DNSServer.Encode / Decode, with tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The tab was selected by the index of the view in the list, so the order
of GroupViewName and the order of the tabs in the XAML had to match.
Tabs have their GroupViewName as Tag and are selected by it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
IP Scanner, Port Scanner, Ping Monitor and Traceroute created the ping
buffer from the setting without a limit: a value edited in the settings
file threw (negative) or made every ping fail (more than 65500 bytes).
Limited to the input range (1 - 65500) when the buffer is created, with
one constant for the maximum (also used by the settings upgrade).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@BornToBeRoot BornToBeRoot added this to the next-release milestone Oct 28, 2026
Copilot AI balanced review requested due to automatic review settings October 28, 2026 22:08

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.

@mergify

mergify Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

This pull request does not currently match the merge queue conditions, so it cannot be queued from here. The box comes back if it matches again.

@mergify
mergify Bot merged commit dccfb8a into main Oct 28, 2026
7 checks passed
@mergify
mergify Bot deleted the feature/some-improvements branch October 28, 2026 22:49
mergify Bot pushed a commit that referenced this pull request Oct 29, 2026
* Fix: Web Console: Close the temporary WebView2 controller if deleting the browsing data fails (C1)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Chore: Feature review conventions: Context menu DataContext via BindingProxy in XAML (C3)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Chore: SNMP / Server profiles dialog: Remove nested BindingProxy (C6)

The top-level BindingProxy (added for the context menus) has the same key
and the same view model, the nested copies are no longer needed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Chore: Firewall: Outdated comment of ContextMenu_Opened (C7)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Fix: Port Scanner: Profile tooltip shows the ports to scan (F1)

The tooltip of a profile showed its own saved ports: nothing or old ports if
the ports are inherited from the group, and old names of renamed port
profiles. It now shows the ports the scan uses (own ports, otherwise the
ports of the group, port profiles with their current name).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Chore: Changelog: Link the entries of #3667

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Fix: Port Scanner: Scan options compare by value (F2)

The options contained the ping buffer (byte[]), records compare arrays by
reference: two options were never equal and every settings change rebuilt
the options of every Port Scanner tab without results (allocating the buffer
and re-evaluating the bindings). The options hold the buffer size, the
scanner creates the buffer once.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Fix: Profiles: PTR check of DNS Lookup accepts the same addresses as the lookup (F3)

The DNS Lookup looks up every host IPAddress.TryParse accepts with PTR (also
shortened IPv4 forms like "127.1"), the profile dialog only accepted the
full form: a profile with "127.1" and PTR couldn't be saved. The automatic
record type (PTR vs A) keeps the strict check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Chore: Ping Monitor / IP Scanner / Port Scanner: Shared PingInfo from a successful reply

PingProbe (IP Scanner, Port Scanner) and Ping (Ping Monitor) created the
PingInfo of a successful reply the same way (TTL only for IPv4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Chore: IP Scanner / Port Scanner / Ping Monitor / Traceroute: Shared limit of the ping buffer

The same limit (1 to 65500 bytes) was written in four view models.
GlobalStaticConfiguration.LimitICMPBuffer is used instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Chore: IP Scanner / Ping Monitor / Traceroute: Buffer size instead of the buffer in the options

Like the Port Scanner (F2): the options hold the buffer size, the scanner /
ping / traceroute creates the buffer once. IPScannerOptions is a record and
compared arrays by reference.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants