完全指南:网段探测、协议识别与批量导入连接)
桌面应用网络【免费下载链接】mRemoteNGmRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager.项目地址https://gitcode.com/gh_mirrors/mr/mRemoteNG点击查看免费下载mRemoteNG 内置的Port Scan功能位于菜单 Tools Port Scan当前版本由mRemoteNG.Plugins.PortScan插件承载提供了一种类似 nmap 的轻量端口扫描能力它按指定 IP 范围逐主机探测 mRemoteNG 所支持协议的端口是否开放随后将命中的主机按所选协议批量导入为连接是初始化一批服务器连接配置的高效手段。阅读本文后你将掌握 Port Scan 的完整操作流程、每个输入参数的含义与默认值、扫描结果的解读方式以及批量导入连接背后的实现原理与代码路径。Port Scan 是什么Port Scan 面向我要管理一批新主机但不想逐个手工创建连接的场景。官方文档port_scan.rst将其描述为The Port Scan feature (under Tools Port Scan) is similar to a nmap port scan. It will scan a range of IP addresses and to determine if specific mRemoteNG supported protocols are active. Hosts can then be bulk imported into mRemoteNG.核心价值有两点协议探测扫描一个 IP 地址区间判断哪些主机开放了 mRemoteNG 支持的协议端口SSH、Telnet、HTTP、HTTPS、Rlogin、RDP、VNC 等批量导入把扫描命中的主机直接转换成 mRemoteNG 连接节点无需手工录入。从当前仓库的实现看该功能分两条代码路径现代插件实现mRemoteNG.Plugins.PortScan项目以IToolWindowPlugin形式注册随插件体系分发包含PortScanPlugin.cs、PortScanControl.cs、PortScanService.cs、PortScanHostResult.cs主程序内的经典实现mRemoteNG/Tools/PortScanner.cs与ScanHost.cs配合mRemoteNG/Config/Import/PortScanImporter.cs、mRemoteNG/Config/Serializers/MiscSerializers/PortScanDeserializer.cs完成扫描结果到连接树的序列化导入。下文以当前仓库插件实现为主体展开经典实现作为原理佐证。启动 Port Scan菜单入口与插件注册按文档描述通过菜单栏Tools Port Scan启动。在插件化架构下这个入口由 PortScanPlugin.cs 注册public sealed class PortScanPlugin : IToolWindowPlugin { public string Id mRp.PortScan; public string DisplayName Resources.GetString(PortScan, Port Scan); public Version Version new(1, 0, 0); public Version MinimumHostVersion new(1, 0, 0); public ToolWindowRegistration ToolWindow new() { ContextMenuGroup PluginContextMenuGroup.Import, ContextMenuText Resources.GetString(ImportPortScan, Import from Port Scan...), Icon Resources.GetImage(SearchAndApps_16x) as Image, MenuText Resources.GetString(PortScan, Port Scan), PanelName General, ShowAsDocument true, SortOrder 100, WindowTitle Resources.GetString(PortScan, Port Scan), }; ... }要点插件 ID 为mRp.PortScan版本 1.0.0工具窗口以文档形式ShowAsDocument true显示归属面板General除了 Port Scan 菜单项还在导入相关上下文菜单组PluginContextMenuGroup.Import注册了 Import from Port Scan... 快捷入口工具窗口的实际界面由 PortScanControl.cs 提供CreateControl()返回该控件。界面组成打开后界面自上而下由三块区域组成对应 PortScanControl.cs 中的TableLayoutPanel布局扫描参数输入区First IP / Last IP / First Port / Last Port / Default protocol ports only 复选框 / Timeout秒结果表格区逐行展示每个主机的探测结果导入操作区协议下拉框Protocol to import Import 按钮。扫描参数详解IP 范围First IP 与 Last IP输入扫描区间的起始 IP 与结束 IP两个地址都会被IPAddress.TryParse校验解析失败会提示 Cannot start port scan.见ScanButtonOnClick。需要注意仅支持 IPv4地址展开逻辑在 PortScanService.cs 中若地址族不是InterNetwork会抛出NotSupportedException(Only IPv4 ranges are supported.)顺序无关内部会对起止地址取min/max后按数值顺序展开无论你输入的顺序如何区间大小决定扫描量ExpandAddresses会把起止 IP 转成 uint32 逐一遍历例如192.168.1.1~192.168.1.254就是 254 个主机每个主机还要依次做 Ping 与端口探测区间越大耗时越长文档原话Wait. Possibly a long time.。端口范围First Port 与 Last Port输入框为NumericUpDown取值范围1 ~ 65535插件默认值为22First Port与 5900Last Port即默认覆盖 SSH 到 VNC 的常用端口区间代码对端口列表的构造逻辑BuildPortList取min(first, last)到max(first, last)逐端口枚举如果起始端口为 0则退化为只扫描结束端口start 0时start end。文档提示tipIf you leave this at the default of 0 0, the test will be for the default protocol ports that mRemoteNG supports.如果保持默认的 0 0将只测试 mRemoteNG 支持的默认协议端口。经典版 PortScanner.cs 中的行为与此一致checkDefaultPortsOnly为真时只扫描 7 个默认协议端口。在插件版界面中这一逻辑由Default protocol ports only 复选框显式承担——勾选后忽略端口输入框只探测默认协议端口列表。默认协议端口表无论经典实现PortScanner构造函数中内联的端口数组端口取值来自 ScanHost.cs 中各协议默认端口还是插件实现PortScanService.cs 中的DefaultPorts默认端口完全一致端口协议说明22SSH来自ProtocolSSH1.Defaults.Port23Telnet来自ProtocolTelnet.Defaults.Port80HTTP来自ProtocolHTTP.Defaults.Port443HTTPS来自ProtocolHTTPS.Defaults.Port513Rlogin来自ProtocolRlogin.Defaults.Port3389RDP来自RdpProtocol.Defaults.Port5900VNC来自ProtocolVNC.Defaults.Port当你勾选 Default protocol ports only 时扫描范围就固定为这 7 个端口扫描速度会显著加快。Timeout秒取值范围1 ~ 60 秒默认5 秒在插件实现中界面值会被乘以 1000 转换为毫秒同时用于Ping 超时与TCP 连接超时Task.WhenAny(connectTask, timeoutTask)见 PortScanService.cs经典版 PortScanner.cs 的构造函数默认timeoutInMilliseconds 5000同样默认 5 秒。扫描流程从点击 Scan 到结果就绪完整执行路径如下对应ScanButtonOnClick→PortScanService.ScanAsync校验参数解析起止 IP失败则通过_pluginContext.Messages.Warning提示 Cannot start port scan.重置状态清空结果绑定列表、进度条归零扫描按钮文字变为Stop再次点击即取消扫描展开地址与端口ExpandAddresses生成 IP 列表BuildPortList生成端口列表逐主机探测ScanHostAsync先发送ICMP PingPing.SendPingAsync超时即上文的 Timeout判断主机是否存活Ping 失败 → 该主机所有端口记为关闭协议标记全部为 false经典实现中对应SetAllProtocols(false)与ClosedPorts.AddRange(_ports)Ping 成功 → 先做DNS 反向解析Dns.GetHostEntryAsync拿到主机名再对每个端口做TCP 连接测试TcpClient.ConnectAsync连接成功即为开放端口实时刷新每扫完一台主机通过AddScannedHost回调把结果追加进表格并推进进度条进度条总数为主机数完成通知全部主机扫描完毕后通过消息系统提示 Port scan complete.中途点击 Stop 则抛出OperationCanceledException提示 Port Scan cancelled.。单端口探测的判定核心PortScanService.csprivate static async Taskbool IsPortOpenAsync(IPAddress address, int port, int timeoutInMilliseconds, CancellationToken cancellationToken) { try { using TcpClient client new(); Task connectTask client.ConnectAsync(address, port); Task timeoutTask Task.Delay(timeoutInMilliseconds, cancellationToken); Task completedTask await Task.WhenAny(connectTask, timeoutTask); if (completedTask ! connectTask) return false; // 超时未连上 await connectTask; return client.Connected; // 成功建立 TCP 连接 } catch { return false; } }协议标记的端口判定每个主机会根据端口探测结果打上对应协议标记PortScanService.cs端口置位属性22Ssh23Telnet80Http443Https513Rlogin3389Rdp5900Vnc非默认端口即使开放也只会出现在 Open Ports 列表里不会影响协议标记位。结果表格解读扫描结果由 PortScanHostResult.cs 承载表格列定义在ConfigureGridColumns中列含义取值Hostname / IP主机显示名优先显示 DNS 反解出的主机名解析失败则显示 IPSSH / Telnet / HTTP / HTTPS / Rlogin / RDP / VNC各协议端口是否开放Yes / NoOpen Ports开放的端口列表逗号分隔如22, 3389Closed Ports关闭的端口列表逗号分隔几个值得注意的细节结果表格只读ReadOnly true、支持整行多选MultiSelectFullRowSelect方便一次选中多台主机导入Open Ports 与 Closed Ports 列宽 160px协议列宽 60px经典实现 ScanHost.cs 中同样提供了OpenPortsName、ClosedPortsName、HostIPorName等展示属性还实现了ToString()输出各协议标记的汇总字符串。批量导入扫描结果操作方式扫描完成后按文档步骤操作在结果表格中选中需要导入的主机行可多选在底部Protocol to import下拉框中选择目标协议SSH、Telnet、HTTP、HTTPS、Rlogin、RDP、VNC、ARD点击Import。导入时的核心逻辑ImportButtonOnClick只导入勾选协议对应的端口确实开放的主机SupportsProtocol会把所选协议 ID 映射到主机的协议标记上例如选择 SSH 只导入host.Ssh true的主机注意ARD 协议复用 VNC 标记PluginProtocolIds.Ard host.Vnc生成PluginConnectionRequest列表Hostname取主机显示名优先主机名Name取HostNameWithoutDomain主机名的第一段如server1.domain.com→server1若反解失败则直接用 IP通过_pluginContext.Connections.ImportConnections(requests)把请求交给插件上下文执行导入未选择任何主机或所选主机均不支持该协议时会给出相应警告No scan results are selected for import. / The selected hosts do not expose the chosen protocol.。底层如何变成连接节点主程序侧的导入链路由 PortScanImporter.cs 与 PortScanDeserializer.cs 构成PortScanImporter持有目标ProtocolType调用PortScanDeserializer.Deserialize(hosts)反序列化器为每个符合条件的主机创建ConnectionInfoConnectionInfo newConnectionInfo new() { Name host.HostNameWithoutDomain, // 显示名主机名第一段或 IP Hostname host.HostName, // 主机名含域或 IP Protocol finalProtocol }; newConnectionInfo.SetDefaultPort(); // 自动补齐该协议的默认端口生成的连接节点被添加到当前选中的目标容器连接树文件夹下完成批量导入。其中协议映射在PortScanDeserializer.ImportScannedHost的 switch 中SSH2 ↔host.Ssh、Telnet ↔host.Telnet、HTTP ↔host.Http、HTTPS ↔host.Https、Rlogin ↔host.Rlogin、RDP ↔host.Rdp、VNC/ARD ↔host.Vnc其余协议类型一律跳过protocolValid false。测试验证仓库自带的单元测试 PortScanDeserializerTests.cs 验证了导入行为给定ScanHost(10.20.30.40)HostName server1.domain.com、Ssh true以ProtocolType.SSH2反序列化后断言导入连接的Name等于server1DisplayNameImportedHostname等于server1.domain.comHostNameImportedProtocol等于SSH2ProtocolImported。这三个断言精确对应了批量导入的产物形态主机名精简为显示名、完整主机名作为连接地址、协议按探测结果落定。使用建议与已知限制综合文档与源码实操中需要注意扫描耗时可观扫描是逐主机串行执行的Ping → DNS 反解 → 逐端口 TCP 探测主机数与端口数越多耗时越长文档也明确提示 Wait. Possibly a long time.。若只需确认协议端口建议勾选 Default protocol ports only 并保持合理超时随时可停止扫描期间 Scan 按钮变为 Stop点击即取消插件实现通过CancellationTokenSource取消经典实现通过Ping.SendAsyncCancel取消取消后已扫描的主机结果会保留在表格中仅 IPv4地址展开只支持InterNetworkIPv4地址族IPv6 范围会直接报错依赖网络环境Ping 与 TCP 探测都会受到防火墙策略影响——主机禁 Ping 会被判为不可达从而跳过端口探测并全部标记为关闭扫描机与目标机之间的访问控制ACL会直接影响结果的准确性协议端口映射固定只有探测到默认协议端口22/23/80/443/513/3389/5900才会点亮对应协议标记自定义端口即使开放也只计入 Open Ports 列导入即建连接导入会直接在当前连接树容器下创建连接节点并调用SetDefaultPort()补齐端口之后可按需修改各连接的详细配置。相关资源功能文档port_scan.rst导入导出相关说明import_export.rst插件实现PortScanPlugin.cs、PortScanControl.cs、PortScanService.cs、PortScanHostResult.cs主程序经典实现PortScanner.cs、ScanHost.cs导入链路PortScanImporter.cs、PortScanDeserializer.cs测试用例PortScanDeserializerTests.cs赞分享桌面应用网络【免费下载链接】mRemoteNGmRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager.项目地址https://gitcode.com/gh_mirrors/mr/mRemoteNG点击查看免费下载相关推荐mRemoteNG 连接导入导出完全指南文件、Active Directory 与端口扫描实战mRemoteNG 连接导入导出完全指南文件、Active Directory 与端口扫描实战 导读 本文以 mRemoteNG 官方文档的 Import/E桌面应用网络mRemoteNG批量修改端口快速更新多连接的服务端口号mRemoteNG批量修改端口快速更新多连接的服务端口号 痛点与解决方案概述 你是否还在逐个修改mRemoteNG中数百个服务器连接的端口号当企业进行端口规桌面应用网络osquery网络监控终极指南连接追踪与端口扫描检测osquery网络监控终极指南连接追踪与端口扫描检测 想要实时监控网络连接、检测可疑端口活动吗osquery作为一款强大的端点安全监控工具能够通过SQL查观测代理网络安全创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考