mirror of
https://github.com/e1732a364fed/v2ray_simple.git
synced 2025-10-28 19:01:56 +08:00
修订代码,文档,示例 添加 NumErr 结构; 从 handshakeInserver_and_passToOutClient 函数 分离出一个 dialClient 函数。 在socks5包中添加 client.go 文件,以及三个udp相关的客户端请求udp函数 之前的udp associate代码被证明是有很多bug的,现在被我一一修复,并通过了 udp_test.go的测试。
88 lines
1.7 KiB
Go
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!")
|
|
|
|
}
|