Files
SunnyNet/test.go
2025-08-18 18:17:01 +08:00

224 lines
8.5 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package main
import "C"
import (
"fmt"
"github.com/qtgolang/SunnyNet/Api"
"github.com/qtgolang/SunnyNet/SunnyNet"
"github.com/qtgolang/SunnyNet/src/encoding/hex"
"github.com/qtgolang/SunnyNet/src/public"
"log"
"os"
)
func wss() {
defer os.Exit(0)
id := Api.CreateWebsocket()
aa := Api.WebsocketDial(id, "https://dsc-yunxin.hwwt8.com/socket.io/1/websocket/8480ab7b-b985-4115-ae86-595f8d7a7982", "", 0, nil, true, "https://:@60.184.194.92:22535", 0, 5000, "")
fmt.Println(aa)
fmt.Println(Api.WebsocketGetErr(id))
fmt.Println("==========================================================")
Api.WebsocketClose(id)
aa = Api.WebsocketDial(id, "https://dsc-yunxin.hwwt8.com/socket.io/1/websocket/8480ab7b-b985-4115-ae86-595f8d7a7982", "", 0, nil, true, "https://:@60.184.194.92:22535", 0, 5000, "")
fmt.Println(aa)
fmt.Println(Api.WebsocketGetErr(id))
}
func Test() {
//wss()
var Sunny = SunnyNet.NewSunny()
/*
//载入自定义证书
cert := SunnyNet.NewCertManager()
ok := cert.LoadP12Certificate("C:\\Users\\Qin\\Desktop\\Cert\\ca6afc5aa40fcbd3.p12", "GXjc75IRAO0T")
fmt.Println("载入P12:", ok)
fmt.Println("证书名称:", cert.GetCommonName())
//给指定域名使用这个证书
Sunny.AddHttpCertificate("api.vlightv.com", cert, SunnyNet.HTTPCertRules_Request)
*/
/*
log := func(Context int, info ...any) {
fmt.Println("x脚本日志", fmt.Sprintf("%v", info))
}
save := func(Context int, code []byte) {
//在这里将code代码 储存到文件,下次启动时,载入恢复
}
Sunny.SetScriptCall(log, save)
//载入上次保存的脚本代码
Sunny.SetScriptCode(string(GoScriptCode.DefaultCode))
*/
/*
//设置全局上游代理
Sunny.SetGlobalProxy("socket://192.168.31.1:4321", 60000)
//指定IP或域名不使用全局的上游代理
Sunny.CompileProxyRegexp("127.0.0.1;[::1];192.168.*;*.baidu.com")
*/
/*
//开启强制走TCP,开启后 https 将不会解密 直接转发数据流量
Sunny.MustTcp(true)
*/
/*
//禁止TCP所有TCP流量将直接断开连接
Sunny.DisableTCP(true)
*/
/*
//设置强制走TCP规则使用这个函数后 就不要使用 Sunny.MustTcp(true) 否则这个函数无效
Sunny.SetMustTcpRegexp("tpstelemetry.tencent.com", true)
*/
/*
//使用驱动抓包 (两个驱动各有特点自行尝试,哪个能用/好用 用哪个)
Sunny.OpenDrive(true) // 使用 NFAPI 驱动
Sunny.OpenDrive(false) // 使用 Proxifier 驱动 不支持32位操作系统不支持UDP数据捕获
Sunny.ProcessAddName("gamemon.des") //添加指定进程名称
Sunny.ProcessDelName("gamemon.des") //删除已添加的指定进程名称
Sunny.ProcessAddPid(1122) //添加指定进程PID
Sunny.ProcessDelPid(1122) //删除已添加的指定进程PID
Sunny.ProcessCancelAll() //删除已添加的所有进程名称/PID
Sunny.ProcessALLName(true, false) //捕获全部进程开始后,添加进程名称-PID无效
*/
/*
DNS使用的3种模式
当你设置了全局上游代理或对请求单独设置了代理的情况下使用DNS模式视情况而定,来选择设置
情况1.你没有使用全局上游代理,也没有对请求单独设置代理,这种情况下没什么好说的无论你设置的是那种模式都只会使用本机的DNS进行解析!
情况2.你使用了全局上游代理或请求单独设置代理,这种情况下你设置以下3种模式会有区别
1.使用 本地解析 模式你要访问的目标地址通过你本地DNS解析出的IP可能会被服务器拒绝连接。这时候你需要尝试 远程解析/远程服务器解析
2.使用 远程解析 模式,你所使用的代理服务器可能存在无法解析的情况。这时你应该尝试 远程服务器解析
2.使用 远程服务器解析 模式,远程服务器解析 会使用你设置的代理连接到远程DNS服务器进行查询并且解析可能会导致首次访问变慢
Sunny.SetDnsServer("local") //本地解析
Sunny.SetDnsServer("remote") //远程解析
Sunny.SetDnsServer("223.5.5.5:853") //远程服务器解析
*/
//
//
//===========================================================================================================================================
//
//
//Sunny.SetMustTcpRegexp("124.221.161.122", true)
//
//Sunny.SetOutRouterIP("192.168.31.154")
//Sunny.SetMustTcpRegexp("shopr-cnlive.mcoc-cdn.cn", false)
//Sunny.SetGlobalProxy("socks://192.168.31.1:4321", 30000)
//设置回调地址
Sunny.SetGoCallback(HttpCallback, TcpCallback, WSCallback, UdpCallback)
Port := 2025
Sunny.SetPort(Port).Start()
//Sunny.MustTcp(true)
//Sunny.SetDnsServer("223.5.5.5:853")
//Sunny.SetGlobalProxy("http://abc9068377_mdse-zone-abc:11223344@b062e1016fa4e9c4.abcproxy.vip:4950", 60000)
//if Sunny.OpenDrive(true) {
// Sunny.ProcessAddName("chatgpt.exe")
//}
//fmt.Println(Sunny.SetIEProxy())
err := Sunny.Error
if err != nil {
panic(err)
}
fmt.Println("Run Port=", Port)
//阻止程序退出
select {}
}
func updateLog() {
//2025-07-16 修复 GET 请求可能导致服务器出现响应501https://c1-nuwa.lefile.cn/t_/cn_zh/version/css/aaa13d3c3f1d2708624c179cbba4e8bb.css
//2025-07-19 修复 WSS 可能异常断开
//2025-07-26 修复 开启强制TCP 无法访问脚本编辑
//2025-07-26 优化 脚本编辑
}
func HttpCallback(Conn SunnyNet.ConnHTTP) {
switch Conn.Type() {
case public.HttpSendRequest: //发起请求
fmt.Println("发起请求", Conn.Proto())
//Conn.SetResponseBody([]byte("123456"))
//直接响应,不让其发送请求
//Conn.StopRequest(200, "Hello Word")
return
case public.HttpResponseOK: //请求完成
bs := Conn.GetResponseBody()
log.Println("请求完成", Conn.GetResponseProto(), Conn.URL(), len(bs), Conn.GetResponseHeader())
return
case public.HttpRequestFail: //请求错误
//fmt.Println(time.Now(), Conn.URL(), Conn.Error())
return
}
}
func WSCallback(Conn SunnyNet.ConnWebSocket) {
return
switch Conn.Type() {
case public.WebsocketConnectionOK: //连接成功
log.Println("PID", Conn.PID(), "Websocket 连接成功:", Conn.URL())
return
case public.WebsocketUserSend: //发送数据
if Conn.MessageType() < 5 {
log.Println("PID", Conn.PID(), "Websocket 发送数据:", Conn.MessageType(), "->", hex.EncodeToString(Conn.Body()))
}
return
case public.WebsocketServerSend: //收到数据
if Conn.MessageType() < 5 {
log.Println("PID", Conn.PID(), "Websocket 收到数据:", Conn.MessageType(), "->", hex.EncodeToString(Conn.Body()))
}
return
case public.WebsocketDisconnect: //连接关闭
log.Println("PID", Conn.PID(), "Websocket 连接关闭", Conn.URL())
return
default:
return
}
}
func TcpCallback(Conn SunnyNet.ConnTCP) {
return
switch Conn.Type() {
case public.SunnyNetMsgTypeTCPAboutToConnect: //即将连接
mode := string(Conn.Body())
log.Println("PID", Conn.PID(), "TCP 即将连接到:", mode, Conn.LocalAddress(), "->", Conn.RemoteAddress())
//修改目标连接地址
//Conn.SetNewAddress("8.8.8.8:8080")
return
case public.SunnyNetMsgTypeTCPConnectOK: //连接成功
log.Println("PID", Conn.PID(), "TCP 连接到:", Conn.LocalAddress(), "->", Conn.RemoteAddress(), "成功")
return
case public.SunnyNetMsgTypeTCPClose: //连接关闭
log.Println("PID", Conn.PID(), "TCP 断开连接:", Conn.LocalAddress(), "->", Conn.RemoteAddress())
return
case public.SunnyNetMsgTypeTCPClientSend: //客户端发送数据
log.Println("PID", Conn.PID(), "TCP 发送数据", Conn.LocalAddress(), Conn.RemoteAddress(), Conn.Type(), Conn.BodyLen(), Conn.Body())
return
case public.SunnyNetMsgTypeTCPClientReceive: //客户端收到数据
log.Println("PID", Conn.PID(), "收到数据", Conn.LocalAddress(), Conn.RemoteAddress(), Conn.Type(), Conn.BodyLen(), Conn.Body())
return
default:
return
}
}
func UdpCallback(Conn SunnyNet.ConnUDP) {
return
switch Conn.Type() {
case public.SunnyNetUDPTypeSend: //客户端向服务器端发送数据
log.Println("PID", Conn.PID(), "发送UDP", Conn.LocalAddress(), Conn.RemoteAddress(), Conn.BodyLen())
//修改发送的数据
//Conn.SetBody([]byte("Hello Word"))
return
case public.SunnyNetUDPTypeReceive: //服务器端向客户端发送数据
log.Println("PID", Conn.PID(), "接收UDP", Conn.LocalAddress(), Conn.RemoteAddress(), Conn.BodyLen())
//修改响应的数据
//Conn.SetBody([]byte("Hello Word"))
return
case public.SunnyNetUDPTypeClosed: //关闭会话
log.Println("PID", Conn.PID(), "关闭UDP", Conn.LocalAddress(), Conn.RemoteAddress())
return
}
}