Blogs
    58 posts
NPS 代理实现:TCP 隧道与 HTTP 代理
引言 在上一篇文章中,我们深入探讨了 nps/server/proxy/base.go 中定义的通用代理基础和流量控制机制。本篇文章将聚焦于 NPS 最常用也是最基础的两种代理模式:TCP 隧道和 HTTP 代理。我们将通过分析 nps/server/proxy/tcp.go 文件,揭示这两种模式的具体实现细节。 tcp.go:TCP 隧道与 HTTP 代理的实现 tcp.go 文件主要定义了 TunnelModeServer 结构体,它是实现 TCP 隧道和 HTTP 代理的核心。此外,该文件还包含了 WebServer 结构体,用于启动 NPS 的 Web 管理界面。 TunnelModeServer:通用隧道模式服务器 TunnelModeServer 结构体继承了 BaseServer,并增加了两个特定于隧道模式的字段: type TunnelModeServer struct { BaseServer process process listener net.Listener } BaseServer:继承了 base.go 中定义的通用功能,如流量统计、安全检查等。 process process:这是一个函数类型 type process func(c *conn.Conn, s *TunnelModeServer) error,它定义了如何处理传入的客户端连接。不同的代理模式会传入不同的 process 函数。 listener net.Listener:用于监听传入连接的网络监听器。 NewTunnelModeServer() 函数用于创建并初始化一个 TunnelModeServer 实例。 ......
NPS 代理实现:通用基础与流量控制
引言 在 NPS 服务端核心解析中,我们了解了 server.go 如何作为服务端的“大脑”,协调各项任务。本篇文章将深入 NPS 的代理实现细节,从 nps/server/proxy/base.go 文件入手,剖析所有代理服务共用的基础结构、接口定义以及流量控制、安全检查等通用逻辑。理解这些通用组件,有助于我们更好地把握 NPS 多样化代理模式的实现原理。 base.go:代理服务的基石 base.go 文件定义了 NPS 中所有代理服务的基础抽象和通用功能。它确保了不同代理模式(如 TCP、UDP、SOCKS5、HTTP 等)能够遵循统一的接口规范,并共享一些核心的辅助功能。 ......
NPS 服务端核心解析:架构与流量管理
引言 在 NPS 项目概述中,我们对这款强大的内网穿透工具进行了宏观的介绍。本篇文章将深入 NPS 的服务端(Server)核心,从 nps/server/server.go 文件入手,详细剖析其架构设计、任务管理、流量处理以及系统监控等关键功能。理解 server.go 的运作机制,是掌握 NPS 核心原理的基石。 server.go:服务端的"大脑" server.go 文件是 NPS 服务端的启动入口和主要协调者。它负责初始化各项服务、管理客户端连接、调度隧道任务以及收集系统运行状态。 核心组件概览 在 server.go 中,我们可以看到几个关键的全局变量和结构: Bridge *bridge.Bridge:这是服务端与客户端之间通信的核心桥梁。它负责维护客户端连接、处理客户端发送的指令以及转发数据。 RunList sync.Map:一个并发安全的 Map,用于存储当前正在运行的所有隧道(proxy.Service 实例)。通过 sync.Map,NPS 能够高效地管理和访问多个并发的隧道服务。 once sync.Once:用于确保某些初始化操作(如 flowSession)只执行一次。 NPS 服务端核心组件架构可以用下图表示: ......