Files
v2ray_simple/commands.go
hahahrfool f2adcdcd45 防止udp转发时被裸奔;修缮socks udp associate
修订代码,文档,示例

添加 NumErr 结构; 从 handshakeInserver_and_passToOutClient 函数 分离出一个 dialClient 函数。

在socks5包中添加 client.go 文件,以及三个udp相关的客户端请求udp函数

之前的udp associate代码被证明是有很多bug的,现在被我一一修复,并通过了 udp_test.go的测试。
2022-03-29 19:00:14 +08:00

88 lines
1.7 KiB
Go

package main
import (
"flag"
"io"
"log"
"net/http"
"os"
"github.com/hahahrfool/v2ray_simple/netLayer"
"github.com/hahahrfool/v2ray_simple/proxy"
"github.com/hahahrfool/v2ray_simple/utils"
)
const (
mmdbDownloadLink = "https://cdn.jsdelivr.net/gh/Loyalsoldier/geoip@release/Country.mmdb"
)
var (
cmdPrintSupportedProtocols bool
cmdGenerateUUID bool
)
func init() {
flag.BoolVar(&cmdPrintSupportedProtocols, "sp", false, "print supported protocols")
flag.BoolVar(&cmdGenerateUUID, "gu", false, "generate a random valid uuid string")
}
//在开始正式代理前, 先运行一些需要运行的命令与函数
func runPreCommands() {
mayPrintSupportedProtocols()
tryDownloadMMDB()
generateAndPrintUUID()
}
func generateAndPrintUUID() {
if !cmdGenerateUUID {
return
}
log.Println("Your new randomly generated uuid is : ", utils.GenerateUUIDStr())
}
func mayPrintSupportedProtocols() {
if !cmdPrintSupportedProtocols {
return
}
proxy.PrintAllServerNames()
proxy.PrintAllClientNames()
}
func tryDownloadMMDB() {
if utils.FileExist(utils.GetFilePath(netLayer.GeoipFileName)) {
return
}
log.Println("No GeoLite2-Country.mmdb found,start downloading from " + mmdbDownloadLink)
resp, err := http.Get(mmdbDownloadLink)
if err != nil {
log.Println("Download mmdb failed", err)
return
}
defer resp.Body.Close()
out, err := os.Create(netLayer.GeoipFileName)
if err != nil {
log.Println("Download mmdb but Can't CreateFile,", err)
return
}
defer out.Close()
if resp.StatusCode != http.StatusOK {
log.Println("Download mmdb bad status:", resp.Status)
return
}
_, err = io.Copy(out, resp.Body)
if err != nil {
log.Println("Write downloaded mmdb to file err:", err)
return
}
log.Println("Download mmdb success!")
}