Skip to content

Instantly share code, notes, and snippets.

@Ran-Xing
Created October 15, 2022 02:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Ran-Xing/6e09d57a0f676dd310ae8e703ff5e319 to your computer and use it in GitHub Desktop.
Save Ran-Xing/6e09d57a0f676dd310ae8e703ff5e319 to your computer and use it in GitHub Desktop.
Full platform network test
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
)
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