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 |
是 |
需要释放的字符串 |