思维导图
反代检查目录输出查询到日志
package logging import ( "log" "net/http" "os" "os/exec" "time" ) //创建存储信息的文件并返回文件指针 func createFile(dir string) *os.File{ file,err := os.OpenFile(dir + "/urlPath.log",os.O_CREATE|os.O_WRONLY|os.O_APPEND,0644) if err != nil { log.Println(err) } return file } //判断文件夹是否存在,如果文件存在系统不会认为是错误所以err会为nil。可以直接判断是不是目录 func Exist(dir string) { fileInfo, err := os.Stat(dir) if err == nil { //如果为true那么就是目录什么都不用做返回停止这个函数就可以了 if fileInfo.IsDir(){ //直接退出函数啥都不做 return }else{ cmdOutPut(dir) } } //err不为空如果isnotexist判断是true那么就是文件夹不存在 if os.IsNotExist(err) { cmdOutPut(dir) } } func cmdOutPut(dir string) { cmd := exec.Command("mkdir",dir) _,err := cmd.CombinedOutput() if err != nil{ log.Println(err) } } //调用函数 func LogRecord(r *http.Request,dir string) { Exist(dir) //因为文件用了要关闭,不关存在资源泄露问题,轻的如果是独占那么就会涉及文件移动不可以之类的 file := createFile(dir) //函数结束前关闭文件,解决上面说的问题 defer file.Close() //存储信息到文件中,因为writestring要的是字符串所以input就要是字符串 file.WriteString(time.Now().Format(time.RFC3339) + " " + r.URL.Path + "\n") }
package main import ( "crypto/tls" "gogin/proxy/logging" "log" "net" "net/http" "net/http/httputil" "net/url" "time" ) func main() { //就是跳过证书验证,那个单词拆开翻译一下就理解了 var tlsConfig *tls.Config = &tls.Config{ InsecureSkipVerify: true, } //代理实现的默认参数 var transport http.RoundTripper = &http.Transport{ DialContext: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 30 * time.Second, }).DialContext, ForceAttemptHTTP2: true, MaxIdleConns: 100, IdleConnTimeout: 90 * time.Second, TLSHandshakeTimeout: 10 * time.Second, ExpectContinueTimeout: 1 * time.Second, TLSClientConfig: tlsConfig, } http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { url, err := url.Parse("代理的地址") if err != nil { log.Println(err) } //记录访问api有助理解 logging.LogRecord(request, "log") proxy := httputil.NewSingleHostReverseProxy(url) //用上面的参数把默认的代替掉主要就是为了跳过证书验证哪个部分 proxy.Transport = transport //就是路由处理器的实现接口,可以把func看成路由也就是handler proxy.ServeHTTP(writer, request) }) //监听机器的所有ip和端口 http.ListenAndServe("监控的ip:port", nil) }
本文作者手写,转发请注明出处。非常感谢。
针对,生活我不是想赢。我只是不想输!