Add atping: a tcp ping tool
This commit is contained in:
		
							parent
							
								
									89bddc74bb
								
							
						
					
					
						commit
						858c9cb4e8
					
				| 
						 | 
					@ -0,0 +1,8 @@
 | 
				
			||||||
 | 
					atping: automated tcping
 | 
				
			||||||
 | 
					Usage of atping:
 | 
				
			||||||
 | 
					  -6	require IPv6
 | 
				
			||||||
 | 
					  -p port
 | 
				
			||||||
 | 
					    	port to connect to instead of 80
 | 
				
			||||||
 | 
					  -t timeout
 | 
				
			||||||
 | 
					    	connect deadline (default 3s)
 | 
				
			||||||
 | 
					  -v	verbose mode: print server and protocol when connecting
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,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)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue