| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package netmgrd
- import (
- "context"
- "net"
- "net/http"
- "os/exec"
- "strings"
- "time"
- )
- const (
- ///////////////////////////////////////
- // 白名单联网检测地址
- TEST_URL1 = "www.aliyun.com"
- TEST_URL2 = "http://www.aliyun.com"
- TEST_HOST = "223.5.5.5" // 阿里云DNS主机
- ///////////////////////////////////////
- TEST_TIMEOUT = 5 * time.Second
- )
- func test1() bool {
- _, err := net.LookupHost(TEST_URL1)
- return err == nil
- }
- func test2() bool {
- ctx, cancel := context.WithTimeout(context.Background(), TEST_TIMEOUT)
- defer cancel()
- cmd := exec.CommandContext(ctx, "ping", "-c", "3", TEST_HOST)
- out, err := cmd.CombinedOutput()
- if err != nil {
- return false
- }
- return strings.Contains(strings.ToLower(string(out)), "ttl=")
- }
- func test3() bool {
- conn, err := net.DialTimeout("tcp", TEST_HOST+":53", TEST_TIMEOUT)
- if err != nil {
- return false
- }
- conn.Close()
- return true
- }
- func test4() bool {
- client := http.Client{
- Timeout: TEST_TIMEOUT,
- CheckRedirect: func(req *http.Request, via []*http.Request) error {
- return http.ErrUseLastResponse
- },
- }
- resp, err := client.Head(TEST_URL2)
- if err != nil {
- return false
- }
- resp.Body.Close()
- return true
- }
- func CheckNetwork() (dnsOK, pingOK, tcpOK, httpOK bool) {
- bOK1 := test1()
- bOK3 := test3()
- bOK4 := test4()
- bOK2 := test2() || bOK3 || bOK4
- return bOK1, bOK2, bOK3, bOK4
- }
|