Blogs
    163 posts
NPS 代理实现:P2P 协议与 UDP 打洞
引言 在 NPS 系列文章中,我们已经探讨了 NPS 的整体架构、服务端核心以及 TCP 隧道、HTTP 代理和 SOCKS5 代理的实现。本篇文章将深入 NPS 的另一个高级代理模式——P2P 代理。我们将通过分析 nps/server/proxy/p2p.go 文件,揭示 NPS 如何利用 UDP 打洞技术,实现客户端之间的直接连接,从而在某些场景下提供更高效、更低延迟的内网穿透服务。 P2P 代理的优势与挑战 传统的内网穿透通常依赖于服务器进行数据中转,这会引入额外的延迟和带宽消耗。P2P(Peer-to-Peer)代理的目标是让内网中的两个客户端能够直接建立连接,绕过服务器中转,从而实现更高效的数据传输。 ......
NPS 代理实现:SOCKS5 协议深度解析
引言 在 NPS 系列文章的前几篇中,我们已经对 NPS 的整体架构、服务端核心以及 TCP 隧道和 HTTP 代理的实现有了初步了解。本篇文章将深入 NPS 的另一个重要代理模式——SOCKS5 代理。我们将通过分析 nps/server/proxy/socks5.go 文件,详细剖析 SOCKS5 协议在 NPS 中的实现细节,包括认证机制、请求处理以及 UDP 转发。 SOCKS5 协议简介 SOCKS5 是一种网络代理协议,它允许客户端通过代理服务器间接访问其他服务器。与 HTTP 代理不同,SOCKS5 是一种更底层的协议,它不关心应用层协议(如 HTTP、FTP),而是直接转发 TCP 或 UDP 数据包。这使得 SOCKS5 代理更加通用,可以用于各种网络应用。 ......
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 实例。 ......