-
Notifications
You must be signed in to change notification settings - Fork 10
/
main.go
75 lines (63 loc) · 1.25 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package main
import (
"flag"
"fmt"
"net"
"os"
"time"
)
const (
defaultServer = "google.com"
defaultPort = "80"
)
var verbose bool
func connect(addr string, dport string, six bool, timeout time.Duration) error {
_, _, err := net.SplitHostPort(addr)
if err != nil {
addr = net.JoinHostPort(addr, dport)
}
proto := "tcp"
if six {
proto += "6"
}
if verbose {
fmt.Printf("connecting to %s/%s... ", addr, proto)
os.Stdout.Sync()
}
conn, err := net.DialTimeout(proto, addr, timeout)
if err != nil {
if verbose {
fmt.Println("failed.")
}
return err
}
if verbose {
fmt.Println("OK")
}
conn.Close()
return nil
}
func main() {
var (
port string
timeout time.Duration
six bool
)
flag.BoolVar(&six, "6", false, "require IPv6")
flag.StringVar(&port, "p", defaultPort, "`port` to connect to instead of "+defaultPort)
flag.DurationVar(&timeout, "t", 3*time.Second, "`timeout`")
flag.BoolVar(&verbose, "v", false, "verbose mode: print server and protocol when connecting")
flag.Parse()
var servers []string
if flag.NArg() == 0 {
servers = []string{defaultServer}
} else {
servers = flag.Args()
}
for _, server := range servers {
err := connect(server, port, six, timeout)
if err != nil {
os.Exit(1)
}
}
}