Created
October 15, 2022 02:17
-
-
Save Ran-Xing/6e09d57a0f676dd310ae8e703ff5e319 to your computer and use it in GitHub Desktop.
Full platform network test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module testnetwork | |
go 1.18 | |
require github.com/fatih/color v1.13.0 | |
require ( | |
github.com/mattn/go-colorable v0.1.9 // indirect | |
github.com/mattn/go-isatty v0.0.14 // indirect | |
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect | |
) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"bufio" | |
"flag" | |
"fmt" | |
"github.com/fatih/color" | |
"io" | |
"net" | |
"net/http" | |
"os" | |
"time" | |
) | |
var ( | |
info = color.New(color.FgCyan).Add(color.Bold) | |
warn = color.New(color.FgRed).Add(color.Bold) | |
succ = color.New(color.FgGreen).Add(color.Bold) | |
) | |
func init() { | |
print("\n") | |
r := flag.Bool("r", false, "show code") | |
flag.Parse() | |
if *r { | |
code := "cGFja2FnZSBtYWluCgppbXBvcnQgKAoJImJ1ZmlvIgoJImZsYWciCgkiZm10IgoJImdpdGh1Yi5jb20vZmF0aWgvY29sb3IiCgkiaW8iCgkibmV0IgoJIm5ldC9odHRwIgoJIm9zIgoJInRpbWUiCikKCnZhciAoCglpbmZvID0gY29sb3IuTmV3KGNvbG9yLkZnQ3lhbikuQWRkKGNvbG9yLkJvbGQpCgl3YXJuID0gY29sb3IuTmV3KGNvbG9yLkZnUmVkKS5BZGQoY29sb3IuQm9sZCkKCXN1Y2MgPSBjb2xvci5OZXcoY29sb3IuRmdHcmVlbikuQWRkKGNvbG9yLkJvbGQpCikKCmZ1bmMgaW5pdCgpIHsKCXByaW50KCJcbiIpCglyIDo9IGZsYWcuQm9vbCgiciIsIGZhbHNlLCAic2hvdyBjb2RlIikKCWZsYWcuUGFyc2UoKQoJaWYgKnIgewoJCWNvZGUgOj0gIiIKCQkvLyBDR09fRU5BQkxFRD0wIGdvIGJ1aWxkIC1hIC1sZGZsYWdzICItZXh0bGRmbGFncyAtc3RhdGljIiBtYWluLmdvCgkJLy8gQkFTRTY0IHRlc3ROZXRXb3JrIC1yIHwgYmFzZTY0IC1kID4gbWFpbi5nbwoJCWlmIF8sIGVyciA6PSBmbXQuRnByaW50KG9zLlN0ZG91dCwgY29kZSk7IGVyciAhPSBuaWwgewoJCQlyZXR1cm4KCQl9CgkJcHJpbnQoIlxuXG4iKQoJCW9zLkV4aXQoMCkKCX0KfQoKZnVuYyBnZXRMb2NhbElQKCkgewoJaW5mby5QcmludGYoIiUtMTJ2IiwgIiDmnKzlnLAgSVAiKQoJcHJpbnQoIjogIikKCWFkZHJzLCBlcnIgOj0gbmV0LkludGVyZmFjZUFkZHJzKCkKCWlmIGVyciAhPSBuaWwgewoJCXdhcm4uUHJpbnRmKCLjgI4gICIpCgkJcHJpbnQoIuWksei0pTogIiwgZXJyLkVycm9yKCkpCgkJd2Fybi5QcmludGYoIiAg44CPXG4iKQoJCXJldHVybgoJfQoJaXBzIDo9ICIiCglmb3IgXywgYWRkcmVzcyA6PSByYW5nZSBhZGRycyB7CgkJaWYgaXBuZXQsIG9rIDo9IGFkZHJlc3MuKCpuZXQuSVBOZXQpOyBvayAmJiAhaXBuZXQuSVAuSXNMb29wYmFjaygpIHsKCQkJaWYgaXBuZXQuSVAuVG80KCkgIT0gbmlsIHsKCQkJCWlwcyArPSBpcG5ldC5JUC5TdHJpbmcoKSArICIgICIKCQkJfQoJCX0KCX0KCWlmIGlwcyA9PSAiIiB7CgkJd2Fybi5QcmludGYoIuOAjiAgIikKCQlwcmludCgi5aSx6LSlOiDmib7kuI3liLDmnKzlnLBJUCIpCgkJd2Fybi5QcmludGYoIiAg44CPXG4iKQoJCXJldHVybgoJfQoJc3VjYy5QcmludGYoIuOAjiAgIikKCXByaW50KGlwcykKCXN1Y2MuUHJpbnRmKCLjgI9cbiIpCn0KCmZ1bmMgZ29vZ2xlVGVzdCgpIHsKCWluZm8uUHJpbnRmKCIlLTEydiIsICIgR29vZ2xlIOa1i+ivlSIpCglwcmludCgiOiAiKQoJY2xpZW50IDo9IGh0dHAuQ2xpZW50e1RpbWVvdXQ6IDIgKiB0aW1lLlNlY29uZH0KCXJlc3AsIGVyciA6PSBjbGllbnQuR2V0KCJodHRwczovL3d3dy5nb29nbGUuY29tIikKCWlmIGVyciAhPSBuaWwgewoJCXdhcm4uUHJpbnRmKCLjgI4gICIpCgkJcHJpbnQoIuWksei0pTog6K+35rGC6L+e5o6l5aSx6LSlIikKCQl3YXJuLlByaW50ZigiICDjgI9cbiIpCgkJcmV0dXJuCgl9CglkZWZlciBmdW5jKHJlc3AgKmh0dHAuUmVzcG9uc2UpIHsKCQlpZiBlcnIgOj0gcmVzcC5Cb2R5LkNsb3NlKCk7IGVyciAhPSBuaWwgewoJCQl3YXJuLlByaW50Zigi44COICAiKQoJCQlwcmludCgi5aSx6LSlOiDlhbPpl63mlbDmja7ljIXlpLHotKUiKQoJCQl3YXJuLlByaW50ZigiICDjgI9cbiIpCgkJfQoJfShyZXNwKQoJXywgZXJyID0gaW8uUmVhZEFsbChyZXNwLkJvZHkpCglpZiBlcnIgIT0gbmlsIHsKCQl3YXJuLlByaW50Zigi44COICAiKQoJCXByaW50KCLlpLHotKU6IOivu+WPluaVsOaNruWMheWksei0pSIpCgkJd2Fybi5QcmludGYoIiAg44CPXG4iKQoJCXJldHVybgoJfQoJc3VjYy5QcmludGYoIuOAjiAgIikKCXByaW50KCLmiJDlip8iKQoJc3VjYy5QcmludGYoIiAg44CPXG4iKQp9CgpmdW5jIGdldE5ldElQKCkgewoJaW5mby5QcmludGYoIiUtMTJ2IiwgIiDlhaznvZEgSVAiKQoJcHJpbnQoIjogIikKCWNsaWVudCA6PSAmaHR0cC5DbGllbnR7fQoJcmVxLCBlcnIgOj0gaHR0cC5OZXdSZXF1ZXN0KCJHRVQiLCAiaHR0cDovL2NpcC5jYyIsIG5pbCkKCXJlcS5IZWFkZXIuQWRkKCJVc2VyLUFnZW50IiwgImN1cmwiKQoJcmVxLkhlYWRlci5BZGQoIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L3BsYWluIikKCXJlc3AsIGVyciA6PSBjbGllbnQuRG8ocmVxKQoJaWYgZXJyICE9IG5pbCB7CgkJd2Fybi5QcmludGYoIuOAjiAgIikKCQlwcmludCgi5aSx6LSlOiDor7fmsYLov57mjqXlpLHotKUiKQoJCXdhcm4uUHJpbnRmKCIgIOOAj1xuIikKCQlyZXR1cm4KCX0KCWRlZmVyIGZ1bmMoKSB7CgkJaWYgZXJyIDo9IHJlc3AuQm9keS5DbG9zZSgpOyBlcnIgIT0gbmlsIHsKCQkJd2Fybi5QcmludGYoIuOAjiAgIikKCQkJcHJpbnQoIuWksei0pTog6K+75Y+W5pWw5o2u5YyF5aSx6LSlIikKCQkJd2Fybi5QcmludGYoIiAg44CPXG4iKQoJCX0KCX0oKQoKCWJyIDo9IGJ1ZmlvLk5ld1JlYWRlcihyZXNwLkJvZHkpCglzdWNjLlByaW50Zigi44COICBcbiIpCglkZWZlciBmdW5jKCkgewoJCXN1Y2MuUHJpbnRmKCIgIOOAjyIpCgl9KCkKCWZvciB7CgkJYSwgXywgYyA6PSBici5SZWFkTGluZSgpCgkJaWYgYyA9PSBpby5FT0YgewoJCQlicmVhawoJCX0KCQlpZiBsZW4oYSkgPT0gMCB7CgkJCWNvbnRpbnVlCgkJfQoJCXByaW50bG4oIlx0Iiwgc3RyaW5nKGEpKQoJfQp9CgpmdW5jIG1haW4oKSB7CglnZXRMb2NhbElQKCkKCWdvb2dsZVRlc3QoKQoJZ2V0TmV0SVAoKQoJaW5mby5QcmludGYoIlxuXG4g5oyJ5Zue6L2mIOKPjiDnu5PmnZ8uLi4iKQoJYiA6PSBtYWtlKFtdYnl0ZSwgMSkKCW9zLlN0ZGluLlJlYWQoYikKfQo=" | |
// CGO_ENABLED=0 go build -a -ldflags "-extldflags -static" main.go | |
// BASE64 testNetWork -r | base64 -d > main.go | |
if _, err := fmt.Fprint(os.Stdout, code); err != nil { | |
return | |
} | |
print("\n\n") | |
os.Exit(0) | |
} | |
} | |
func getLocalIP() { | |
info.Printf("%-12v", " 本地 IP") | |
print(": ") | |
addrs, err := net.InterfaceAddrs() | |
if err != nil { | |
warn.Printf("『 ") | |
print("失败: ", err.Error()) | |
warn.Printf(" 』\n") | |
return | |
} | |
ips := "" | |
for _, address := range addrs { | |
if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { | |
if ipnet.IP.To4() != nil { | |
ips += ipnet.IP.String() + " " | |
} | |
} | |
} | |
if ips == "" { | |
warn.Printf("『 ") | |
print("失败: 找不到本地IP") | |
warn.Printf(" 』\n") | |
return | |
} | |
succ.Printf("『 ") | |
print(ips) | |
succ.Printf("』\n") | |
} | |
func googleTest() { | |
info.Printf("%-12v", " Google 测试") | |
print(": ") | |
client := http.Client{Timeout: 2 * time.Second} | |
resp, err := client.Get("https://www.google.com") | |
if err != nil { | |
warn.Printf("『 ") | |
print("失败: 请求连接失败") | |
warn.Printf(" 』\n") | |
return | |
} | |
defer func(resp *http.Response) { | |
if err := resp.Body.Close(); err != nil { | |
warn.Printf("『 ") | |
print("失败: 关闭数据包失败") | |
warn.Printf(" 』\n") | |
} | |
}(resp) | |
_, err = io.ReadAll(resp.Body) | |
if err != nil { | |
warn.Printf("『 ") | |
print("失败: 读取数据包失败") | |
warn.Printf(" 』\n") | |
return | |
} | |
succ.Printf("『 ") | |
print("成功") | |
succ.Printf(" 』\n") | |
} | |
func getNetIP() { | |
info.Printf("%-12v", " 公网 IP") | |
print(": ") | |
client := &http.Client{} | |
req, err := http.NewRequest("GET", "http://cip.cc", nil) | |
req.Header.Add("User-Agent", "curl") | |
req.Header.Add("Content-Type", "text/plain") | |
resp, err := client.Do(req) | |
if err != nil { | |
warn.Printf("『 ") | |
print("失败: 请求连接失败") | |
warn.Printf(" 』\n") | |
return | |
} | |
defer func() { | |
if err := resp.Body.Close(); err != nil { | |
warn.Printf("『 ") | |
print("失败: 读取数据包失败") | |
warn.Printf(" 』\n") | |
} | |
}() | |
br := bufio.NewReader(resp.Body) | |
succ.Printf("『 \n") | |
defer func() { | |
succ.Printf(" 』") | |
}() | |
for { | |
a, _, c := br.ReadLine() | |
if c == io.EOF { | |
break | |
} | |
if len(a) == 0 { | |
continue | |
} | |
println("\t", string(a)) | |
} | |
} | |
func main() { | |
getLocalIP() | |
googleTest() | |
getNetIP() | |
info.Printf("\n\n 按回车 ⏎ 结束...") | |
b := make([]byte, 1) | |
os.Stdin.Read(b) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment