daShangDao_kfzgw-info/md/proxy.md
2025-12-22 19:09:56 +08:00

5.4 KiB
Raw Permalink Blame History

proxy.dll 使用教程

1.创建DLL工具实例

加载DLL文件

// ProxyDLL 代理DLL结构
type proxyDLL struct {
	dll                        *syscall.DLL
	proxyTypeManager           *syscall.Proc // 获取代理服务器
	getMachineCode             *syscall.Proc // 获取机器码
	rechargeCard               *syscall.Proc // 充值卡密
	getProxies                 *syscall.Proc // 获取代理服务器
	checkTailCardSecretExpired *syscall.Proc // 检查卡密是否过期
	freeCString                *syscall.Proc // 释放C字符串内存
}

// 初始化代理DLL
func InitProxyDLL() (*proxyDLL, error) {
	dllPath := filepath.Join("dll", "proxy1.dll")
	log.Printf("[DEBUG] 调用proxy.dll文件文件路径: %s", dllPath)
	if _, err := os.Stat(dllPath); os.IsNotExist(err) {
		return nil, fmt.Errorf("proxy DLL 不存在: %s", dllPath)
	}
	if dll, err := syscall.LoadDLL(dllPath); err != nil {
		return nil, fmt.Errorf("加载proxy DLL 失败: %s", err)
	} else {
		return &proxyDLL{
			dll:                        dll,
			proxyTypeManager:           dll.MustFindProc("ProxyTypeManager"),
			getMachineCode:             dll.MustFindProc("GetMachineCode"),
			rechargeCard:               dll.MustFindProc("RechargeCard"),
			getProxies:                 dll.MustFindProc("GetProxies"),
			checkTailCardSecretExpired: dll.MustFindProc("CheckTailCardSecretExpired"),
			freeCString:                dll.MustFindProc("FreeCString"),
		}, nil
	}
}

// 函数调用
dll, err := InitProxyDLL()
if err != nil {
    return "", err
}

获取C字符串

// cStr 获取C字符串
func (m *kongfzDLL) cStr(p uintptr) string {
    if p == 0 {
        return ""
    }
    b := []byte{}
    for i := uintptr(0); ; i++ {
        c := *(*byte)(unsafe.Pointer(p + i))
        if c == 0 {
        break   
		}
        b = append(b, c)
    }
    s := string(b)
    if m.freeCString != nil {
        m.freeCString.Call(p)
    }
    return s
}

2.使用dll函数示例

// ProxyTypeManager 获取代理服务器
func (m *proxyDLL) ProxyTypeManager(proxyType, username, password, machineCode string) (string, error) {
	proc, err := m.dll.FindProc("ProxyTypeManager")
	if err != nil {
		return "", fmt.Errorf("找不到函数 ProxyTypeManager: %v", err)
	}
	proxyTypePtr, _ := syscall.BytePtrFromString(proxyType)
	usernamePtr, _ := syscall.BytePtrFromString(username)
	passwordPtr, _ := syscall.BytePtrFromString(password)
	machineCodePtr, _ := syscall.BytePtrFromString(machineCode)
	info, _, err := proc.Call(
		uintptr(unsafe.Pointer(proxyTypePtr)),
		uintptr(unsafe.Pointer(usernamePtr)),
		uintptr(unsafe.Pointer(passwordPtr)),
		uintptr(unsafe.Pointer(machineCodePtr)))
	if err != nil && err.Error() != "The operation completed successfully." {
		return "", fmt.Errorf("调用函数 ProxyTypeManager 失败: %v", err)
	}
	return m.cStr(info), nil
}

接口详情

1.获取代理服务器--ProxyTypeManager

请求信息

dll.ProxyTypeManager(proxyType, username, password, machineCode)

请求参数

参数名 类型 必填 说明
proxyType string 代理类型 小象代理CALF_ELEPHANT_PROXY 内置代理TAIL_PROXY
username string 小象账号
password string 小象密码
machineCode string 内置代理机器码

响应示例

代理服务器字符串示例
http://18434270290:JWt15lWW@183.7.131.66:36806

2.查询机器码--GetMachineCode

请求信息

dll.GetMachineCode(tailCardSecret)

请求参数

参数名 类型 必填 说明
tailCardSecret string 卡密

响应示例

{
    "code": 200,
    "message": "success",
    "data": {
        "machine_code": "07f4d0fbcff99966c2b37b0c1fb7f01c",
        "ip_exp_time": "2025-12-12 10:35:06",
        "ip_thread": 5,
        "ip_card_code": "DL_5_TK_021c06ac87434a66a857a55baac28494"
    }
}

3.充值卡密--RechargeCard

请求信息

dll.RechargeCard(tailCardSecret,machineCode)

请求参数

参数名 类型 必填 说明
tailCardSecret string 卡密
machineCode string 机器码

响应示例

{
  "success": true,
  "message": "充值成功",
  "machine_code": "e88c2c4210a2667866aab824cdfd2a9c"
}

4.获取代理服务器列表--GetProxies

请求信息

dll.GetProxies(machineCode)

请求参数

参数名 类型 必填 说明
machineCode string 机器码

响应示例

{
  "success": true,
  "count": 4,
  "proxies": ["",""]
}

5.检查卡密是否过期--CheckTailCardSecretExpired

请求信息

dll.CheckTailCardSecretExpired(tailCardSecret)

请求参数

参数名 类型 必填 说明
tailCardSecret string 卡密

响应示例

{
  "is_valid": true,
  "count": 4
}

6.释放C字符串内存--FreeCString

请求信息

dll.FreeCString(str)

请求参数

参数名 类型 必填 说明
str string 需要释放的字符串