/** * 局域网检测工具 * * 通过比较 IP 地址判断两个节点是否在同一局域网 */ /** * 获取本机内网 IP 地址 */ export declare function getLocalIPs(): { ipv4: string[]; ipv6: string[]; }; /** * 判断 IP 是否是内网地址 */ export declare function isPrivateIP(ip: string): boolean; /** * 从 IP 地址获取网段(简单实现,假设 /24) */ export declare function getNetworkPrefix(ip: string, prefixLength?: number): string; /** * 判断两个 IP 是否在同一网段 */ export declare function isSameNetwork(ip1: string, ip2: string, prefixLength?: number): boolean; /** * 局域网节点信息 */ export interface LocalNodeInfo { nodeId: string; privateIPs: string[]; publicIP?: string; } /** * 局域网检测器 * * Cloud 端使用,判断 Client 是否与 Local 在同一局域网 */ export declare class LocalNetworkDetector { /** 存储已注册的 Local 节点信息 */ private readonly nodes; /** * 注册 Local 节点信息(从心跳获取) */ registerNode(nodeId: string, privateIPs: string[], publicIP?: string): void; /** * 移除节点 */ removeNode(nodeId: string): void; /** * 检测 Client 是否与指定 Local 在同一局域网 * * 检测逻辑: * 1. 比较公网 IP:如果相同,可能在同一 NAT 后 * 2. 比较内网 IP 网段:如果有重叠,很可能在同一局域网 */ detectSameNetwork(targetNodeId: string, clientPrivateIPs: string[], clientPublicIP?: string): { isSameNetwork: boolean; reason: string; localIPs?: string[]; }; /** * 获取节点信息 */ getNode(nodeId: string): LocalNodeInfo | undefined; }