import DEvent from '../../class/event'; import DPipeline from '../hook/modules/pipeline'; /** * 代理配置接口 */ export interface IProxy { ipaddress: string; port: number; type?: 5; userId?: string; password?: string; } /** * 带规则的代理配置接口 */ export interface IRuleProxy extends IProxy { rules?: string[]; } /** * 目标地址接口 */ export interface IDestination { addr: string; port: number; } /** * SOCKS5事件类型 */ export declare const Socks5Event: { readonly Error: "error"; }; /** * SOCKS5事件类型 */ export type Socks5EventType = (typeof Socks5Event)[keyof typeof Socks5Event]; /** * 日志接口 */ export interface ILogger { log: (...args: any[]) => void; info: (...args: any[]) => void; warn: (...args: any[]) => void; error: (...args: any[]) => void; } export declare class Socks5 { private upstreamProxy; private server; private clientSockets; private systemProxy; private useSystemProxy; __debug: boolean; __uuid: string; __port: number; __event: DEvent; __pipeline: DPipeline; __logger: ILogger; __totalReceived: number; __totalSent: number; __rules: string[]; constructor(upstreamProxy: IRuleProxy | IRuleProxy[], debug?: boolean, logger?: ILogger); get id(): string; get port(): number; get url(): string; get totalReceived(): number; get totalSent(): number; get rules(): string[]; validateProxyConfig(proxyConfig: IProxy): "" | "无效的上游代理 IP 地址" | "无效的上游代理端口" | "无效的上游代理用户名" | "无效的上游代理密码"; private filterProxyConfigs; start(startPort?: number): Promise; private setupServer; restart(): boolean; setUpstreamProxy(upstreamProxy: IRuleProxy | IRuleProxy[]): boolean; setSystemProxy(use: boolean, config?: IProxy): void; /** * 查找可用端口 * @param startPort 起始端口 * @param maxRetries 最大重试次数 * @returns 可用端口或0(表示失败) */ private findAvailablePort; /** * 处理SOCKS5客户端连接 * @param clientSocket 客户端socket连接 */ private handleSocksConnection; /** * 设置客户端socket事件处理 * @param clientSocket 客户端socket连接 */ private setupClientSocketEvents; /** * 根据代理配置建立连接 * @param clientSocket 客户端socket连接 * @param destination 目标地址 * @param proxyConfig 代理配置 * @param addrport 地址端口字符串 */ private establishConnection; /** * 回复客户端请求响应数据 * VER是SOCKS版本,这里应该是0x05; * REP应答字段: * 0x00表示成功 * 0x01普通SOCKS服务器连接失败 * 0x02现有规则不允许连接 * 0x03网络不可达 * 0x04主机不可达 * 0x05连接被拒 * 0x06 TTL超时 * 0x07不支持的命令 * 0x08不支持的地址类型 * 0x09 - 0xFF未定义 */ /** * 握手 * @param clientSocket * @returns */ private performHandshake; /** * 解析请求 * @param clientSocket * @returns */ private parseClientRequest; private connectToUpstreamProxy; private connectToSystemProxy; private connectToProxy; private connectToLocal; private setupDataForwarding; /** * 查找适合目标地址的代理配置 * @param addr 目标地址 * @returns 匹配的代理配置或undefined */ findProxyConfig(addr: string): IRuleProxy | undefined; /** * 检查域名是否符合规则 * @param addr 目标地址 * @param rules 规则列表 * @returns 是否符合规则 */ private isAllowedDomain; close(): void; on(name: Socks5EventType, listener: (...args: any[]) => void): void; off(name: Socks5EventType, listener: (...args: any[]) => void): void; resetStatistics(): void; private _emit; private _updateRules; }