大量更新
This commit is contained in:
49
1-代理Xray/cloudflare-机场/yongge_cf_core.md
Normal file
49
1-代理Xray/cloudflare-机场/yongge_cf_core.md
Normal file
@@ -0,0 +1,49 @@
|
||||
核心运行逻辑、关键方法及函数的调用流程
|
||||
核心运行逻辑
|
||||
上述代码实现了一个 VLESS over WebSocket 代理服务器,主要功能是将客户端通过 WebSocket 发送的 VLESS 协议数据解析并转发到目标服务器,同时将目标服务器的响应数据回传给客户端。以下是其核心运行逻辑的步骤:
|
||||
|
||||
WebSocket 连接建立:
|
||||
客户端发起 WebSocket 连接请求时,vlessOverWSHandler 函数被触发。
|
||||
创建一个 WebSocketPair,包含客户端和服务器端的 WebSocket 对象,服务器端调用 accept() 接受连接。
|
||||
从请求头中提取 sec-websocket-protocol 字段,用于处理可能的 Early Data(0-RTT 数据)。
|
||||
数据流转换:
|
||||
使用 makeReadableWebSocketStream 函数将服务器端 WebSocket 的数据转换为 ReadableStream,监听 WebSocket 的 message 事件,将接收到的数据推入流中。
|
||||
当 WebSocket 关闭或出错时,流也会相应关闭或报错。
|
||||
VLESS 协议解析与处理:
|
||||
在 ReadableStream 的 write 方法中,处理客户端发送的数据块 (chunk)。
|
||||
调用 processVlessHeader 解析 VLESS 协议头部,提取目标地址、端口、协议类型(TCP 或 UDP)等信息。
|
||||
根据解析结果:
|
||||
如果是 UDP 请求且端口为 53(DNS),调用 handleUDPOutBound 处理 DNS 查询。
|
||||
如果是 TCP 请求,调用 handleTCPOutBound 建立到目标服务器的连接并转发数据。
|
||||
TCP 数据转发:
|
||||
handleTCPOutBound 使用 connect 函数建立到目标服务器的 TCP 连接。
|
||||
将客户端数据写入 TCP 连接,同时通过 remoteSocketToWS 将目标服务器的响应数据回传给 WebSocket 客户端。
|
||||
UDP(DNS)数据转发:
|
||||
对于 DNS 请求,handleUDPOutBound 将查询发送到指定的 DNS-over-HTTPS (DoH) 服务器,并将响应通过 WebSocket 回传给客户端。
|
||||
关键方法及函数
|
||||
以下是代码中关键的函数及其作用:
|
||||
|
||||
vlessOverWSHandler:入口函数,负责建立 WebSocket 连接并初始化数据流。
|
||||
makeReadableWebSocketStream:将 WebSocket 数据转换为 ReadableStream,支持 Early Data 处理。
|
||||
processVlessHeader:解析 VLESS 协议头部,验证用户 UUID 并提取目标地址和端口。
|
||||
handleTCPOutBound:处理 TCP 请求,建立到目标服务器的连接并转发数据。
|
||||
remoteSocketToWS:将目标服务器的响应数据回传给 WebSocket 客户端。
|
||||
handleUDPOutBound:处理 UDP(DNS)请求,向 DoH 服务器发送查询并返回结果。
|
||||
checkUuidInApiResponse:通过 API 验证用户 UUID 的有效性。
|
||||
调用流程
|
||||
客户端发起 WebSocket 请求,触发 vlessOverWSHandler。
|
||||
创建并接受 WebSocket 连接,获取 Early Data(如果存在)。
|
||||
调用 makeReadableWebSocketStream 创建 ReadableStream,监听 WebSocket 数据。
|
||||
在 ReadableStream 的 write 方法中:
|
||||
调用 processVlessHeader 解析数据。
|
||||
如果是 DNS 请求(UDP 端口 53),调用 handleUDPOutBound。
|
||||
如果是 TCP 请求,调用 handleTCPOutBound。
|
||||
handleTCPOutBound:
|
||||
使用 connectAndWrite 建立 TCP 连接并写入客户端数据。
|
||||
调用 remoteSocketToWS 将响应数据回传。
|
||||
remoteSocketToWS:
|
||||
监听 TCP 连接的响应数据。
|
||||
通过 WebSocket 发送给客户端。
|
||||
handleUDPOutBound(DNS 请求):
|
||||
发送 DNS 查询到 DoH 服务器。
|
||||
将响应通过 WebSocket 返回。
|
||||
Reference in New Issue
Block a user