OCT 1. 修改SCG长度为2字节

This commit is contained in:
黄昕 2023-12-20 11:13:26 +08:00
parent c2b96cc333
commit b7f98fcdd6
2 changed files with 37 additions and 34 deletions

View File

@ -14,7 +14,7 @@
#include <spdlog/fmt/bin_to_hex.h>
#include <array>
#define SCG_UDP_HEAD_SIZE (11)
#define SCG_UDP_HEAD_SIZE (13)
#endif
@ -49,7 +49,7 @@ static DWORD UDPProxvRemoteThread(LPVOID lpParameter) {
while (pPeerSock && !pProxy->exitNow) {
sockaddr_in remoteWgAddr {};
#if DEBUG_PROXY_PACKAGE
TCHAR ipAddr[MAX_IP_LEN];
TCHAR ipAddr[MAX_IP_LEN];
#endif
int addrSize = sizeof(SOCKADDR);
char recvBuf[1500];
@ -79,7 +79,7 @@ static DWORD UDPProxvRemoteThread(LPVOID lpParameter) {
0,
reinterpret_cast<SOCKADDR *>(pPeerSock),
sizeof(SOCKADDR));
#if DEBUG_PROXY_PACKAGE
memset(ipAddr, 0, MAX_IP_LEN);
InetNtop(AF_INET, &pPeerSock->sin_addr.s_addr, ipAddr, MAX_IP_LEN);
@ -105,16 +105,16 @@ static DWORD UDPProxvRemoteThread(LPVOID lpParameter) {
}
static DWORD UDPProxyRecvThread(LPVOID lpParameter) {
bool isRemoteInit = false;
sockaddr_in localWgAddr {};
sockaddr_in scgAddr {};
unsigned char recvBuf[1500 + SCG_UDP_HEAD_SIZE];
bool isRemoteInit = false;
sockaddr_in localWgAddr {};
sockaddr_in scgAddr {};
unsigned char recvBuf[1500 + SCG_UDP_HEAD_SIZE];
#if DEBUG_PROXY_PACKAGE
std::array<UINT8, 1511> arr;
#endif
const PSCG_PROXY_INFO pProxy = &GetGlobalCfgInfo()->scgProxy;
const auto svrId = static_cast<UINT8>(GetGlobalCfgInfo()->userCfg.cliConfig.scgTunnelAppId);
char *pRecBuf = reinterpret_cast<char *>(&recvBuf[SCG_UDP_HEAD_SIZE]);
const PSCG_PROXY_INFO pProxy = &GetGlobalCfgInfo()->scgProxy;
const auto svrId = static_cast<UINT8>(GetGlobalCfgInfo()->userCfg.cliConfig.scgTunnelAppId);
char *pRecBuf = reinterpret_cast<char *>(&recvBuf[SCG_UDP_HEAD_SIZE]);
scgAddr.sin_family = AF_INET;
scgAddr.sin_port = htons(pProxy->scgGwPort);
@ -122,24 +122,26 @@ static DWORD UDPProxyRecvThread(LPVOID lpParameter) {
// 构建 SCG UDP 包头
recvBuf[0] = 0x01; // VERSION
recvBuf[1] = 0x09; // Length
recvBuf[2] = 0xF0; // ++++++ INFO[0] TYPE
recvBuf[3] = 0x04; // INFO[0] LENGTH
recvBuf[4] = 0; // INFO[0] VMID[0]
recvBuf[5] = 0; // INFO[0] VMID[1]
recvBuf[6] = 0; // INFO[0] VMID[2]
recvBuf[7] = 0; // INFO[0] VMID[3]
recvBuf[8] = 0xF1; // INFO[1] TYPE
recvBuf[9] = 0x01; // INFO[1] LENGTH
recvBuf[10] = svrId; // ------ INFO[1] SCG Service ID
recvBuf[1] = 0x0A; // Length 0
recvBuf[2] = 0x09; // Length 1
recvBuf[3] = 0xF0; // ++++++ INFO[0] TYPE
recvBuf[4] = 0x04; // INFO[0] LENGTH
recvBuf[5] = 0; // INFO[0] VMID[0]
recvBuf[6] = 0; // INFO[0] VMID[1]
recvBuf[7] = 0; // INFO[0] VMID[2]
recvBuf[8] = 0; // INFO[0] VMID[3]
recvBuf[9] = 0xF1; // INFO[1] TYPE
recvBuf[10] = 0x00; // INFO[1] LENGTH 0
recvBuf[11] = 0x01; // INFO[1] LENGTH 1
recvBuf[12] = svrId; // ------ INFO[1] SCG Service ID
pProxy->exitNow = false;
while (!pProxy->exitNow) {
#if DEBUG_PROXY_PACKAGE
TCHAR ipAddr[MAX_IP_LEN];
#endif
int addrSize = sizeof(SOCKADDR);
int iRecvBytes;
int addrSize = sizeof(SOCKADDR);
int iRecvBytes;
// 代理服务 Out
iRecvBytes = recvfrom(pProxy->udpProxySock,
@ -194,13 +196,13 @@ static DWORD UDPProxyRecvThread(LPVOID lpParameter) {
pProxy->hProxySCGThread = handle;
}
recvBuf[4] = vmid[0]; // INFO[0] VMID[0]
recvBuf[5] = vmid[1]; // INFO[0] VMID[1]
recvBuf[6] = vmid[2]; // INFO[0] VMID[2]
recvBuf[7] = vmid[3]; // INFO[0] VMID[3]
recvBuf[5] = vmid[0]; // INFO[0] VMID[0]
recvBuf[6] = vmid[1]; // INFO[0] VMID[1]
recvBuf[7] = vmid[2]; // INFO[0] VMID[2]
recvBuf[8] = vmid[3]; // INFO[0] VMID[3]
// 增加SCG包头数据长度
iRecvBytes += 11;
iRecvBytes += SCG_UDP_HEAD_SIZE;
#if DEBUG_PROXY_PACKAGE
if (GetGlobalCfgInfo()->logLevel == spdlog::level::trace) {
const auto start = std::begin(recvBuf);

View File

@ -47,7 +47,8 @@ int InitControlServer(const TCHAR *pUserSvrUrl) {
const unsigned int id = htonl(GetGlobalCfgInfo()->curConnVmId);
const auto svrId = static_cast<UINT8>(GetGlobalCfgInfo()->userCfg.cliConfig.scgCtrlAppId);
unsigned char scgProxy[] = {0x01, // VERSION
0x09, // Length
0x00, // Length 0
0x0A, // Length 1
0xF0, // ++++++ INFO[0] TYPE
0x04, // INFO[0] LENGTH
0, // INFO[0] VMID[0]
@ -55,15 +56,15 @@ int InitControlServer(const TCHAR *pUserSvrUrl) {
0, // INFO[0] VMID[2]
0, // INFO[0] VMID[3]
0xF1, // INFO[1] TYPE
0x01, // INFO[1] LENGTH
0x00, // INFO[1] LENGTH 0
0x01, // INFO[1] LENGTH 1
svrId}; // ------ INFO[1] SCG Service ID
p = scgProxy;
memcpy(vmid, &id, 4);
scgProxy[4] = vmid[0];
scgProxy[5] = vmid[1];
scgProxy[6] = vmid[2];
scgProxy[7] = vmid[3];
scgProxy[5] = vmid[0];
scgProxy[6] = vmid[1];
scgProxy[7] = vmid[2];
scgProxy[8] = vmid[3];
if (GetGlobalCfgInfo()->logLevel == spdlog::level::trace) {
std::array<unsigned char, sizeof(scgProxy)> arr;