package netTools //main // import ( "fmt" "net" "strconv" "strings" "time" ) func smain() { lis, err := net.Listen("tcp", ":1789") if err != nil { fmt.Println(err) } defer lis.Close() for { con, _ := lis.Accept() go handler(con) } } func handler(con net.Conn) { defer con.Close() buf := make([]byte, 20) n, _ := con.Read(buf) fmt.Println(string(buf[:n])) con.Write(buf) con.Write(buf) } //func main() { // buf, err := Telnet([]string{"w_Hello World", "r_50", "r_30"}, "127.0.0.1:1789", 20) // fmt.Println(err) // fmt.Println(string(buf)) //} func PortIsOpen(ip string, timeout int) bool { con, err := net.DialTimeout("tcp", ip, time.Duration(timeout)) if err != nil { return false } con.Close() return true } func Telnet(action []string, ip string, timeout int) (buf []byte, err error) { con, err := net.DialTimeout("tcp", ip, time.Duration(timeout)*time.Second) if err != nil { return } defer con.Close() con.SetReadDeadline(time.Now().Add(time.Second * 5)) for _, v := range action { l := strings.SplitN(v, "_", 2) if len(l) < 2 { return } switch l[0] { case "r": var n int n, err = strconv.Atoi(l[1]) if err != nil { return } p := make([]byte, n) n, err = con.Read(p) if err != nil { return } buf = append(buf, p[:n]...) fmt.Println(buf) case "w": _, err = con.Write([]byte(l[1])) } } return }
有疑问加站长微信联系(非本文作者)