Sunny网络中间件 和 Fiddler 类似。 是可跨平台的网络分析组件
可用于HTTP/HTTPS/WS/WSS/TCP/UDP网络分析 为二次开发量身制作
支持 获取/修改 HTTP/HTTPS/WS/WSS/TCP/TLS-TCP/UDP 发送及返回数据
支持 对 HTTP/HTTPS/WS/WSS 指定连接使用指定代理
支持 对 HTTP/HTTPS/WS/WSS/TCP/TLS-TCP 链接重定向
支持 gzip, deflate, br 解码
支持 WS/WSS/TCP/TLS-TCP/UDP 主动发送数据
-
GoLang使用示例代码
package main
import (
"fmt"
"github.com/qtgolang/SunnyNet/SunnyNet"
"github.com/qtgolang/SunnyNet/public"
"time"
)
var Sunny = SunnyNet.NewSunny()
func main() {
//绑定回调函数
Sunny.SetGoCallback(HttpCallback, TcpCallback, WSCallback, UdpCallback)
//绑定端口号并启动
Sunny.SetPort(2023).Start()
//避免程序退出
time.Sleep(24 * time.Hour)
}
func HttpCallback(Conn *SunnyNet.HttpConn) {
if Conn.Type == public.HttpSendRequest {
//发起请求
//这里可以对请求数据修改
if Conn.Request.Body != nil {
Body, _ := io.ReadAll(Conn.Request.Body)
_ = Conn.Request.Body.Close()
//这里可以对Body修改
Body = []byte("Hello Sunny Request")
Conn.Request.Body = io.NopCloser(bytes.NewBuffer(Body))
//直接响应,不让其发送请求
//Conn.StopRequest(200, "Hello Word")
}
fmt.Println(Conn.Request.URL.String())
} else if Conn.Type == public.HttpResponseOK {
//请求完成
if Conn.Response.Body != nil {
Body, _ := io.ReadAll(Conn.Response.Body)
_ = Conn.Response.Body.Close()
//这里可以对Body修改
Body = []byte("Hello Sunny Response")
Conn.Response.Body = io.NopCloser(bytes.NewBuffer(Body))
}
} else if Conn.Type == public.HttpRequestFail {
//请求错误
}
}
func WSCallback(Conn *SunnyNet.WsConn) {
//捕获到数据可以修改,修改空数据,取消发送/接收
fmt.Println(Conn.Url)
}
func TcpCallback(Conn *SunnyNet.TcpConn) {
//捕获到数据可以修改,修改空数据,取消发送/接收
fmt.Println(Conn.Pid, Conn.LocalAddr, Conn.RemoteAddr, Conn.Type, Conn.GetBodyLen())
}
func UdpCallback(Conn *SunnyNet.UDPConn) {
//在 Windows 捕获UDP需要加载驱动,并且设置进程名
//其他情况需要设置Socket5代理,才能捕获到UDP
//捕获到数据可以修改,修改空数据,取消发送/接收
if public.SunnyNetUDPTypeReceive == Conn.Type {
fmt.Println("接收UDP", Conn.LocalAddress, Conn.RemoteAddress, len(Conn.Data))
}
if public.SunnyNetUDPTypeSend == Conn.Type {
fmt.Println("发送UDP", Conn.LocalAddress, Conn.RemoteAddress, len(Conn.Data))
}
if public.SunnyNetUDPTypeClosed == Conn.Type {
fmt.Println("关闭UDP", Conn.LocalAddress, Conn.RemoteAddress)
}
}