使用golang实现telnet远程登录

pssmart · · 2324 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
	"strings"
)

func main() {
	conn, err := net.Dial("tcp", "10.71.20.161:23")
	if err != nil {
		fmt.Sprint(os.Stderr, "Error: %s", err.Error())
		return
	}

	var buf [4096]byte

	//	for {
	n, err := conn.Read(buf[0:])
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
		return
	}
	fmt.Println(string(buf[0:n]))
	fmt.Println((buf[0:n]))

	buf[1] = 252
	buf[4] = 252
	buf[7] = 252
	buf[10] = 252
	fmt.Println((buf[0:n]))
	n, err = conn.Write(buf[0:n])
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error())
		return
	}

	n, err = conn.Read(buf[0:])
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
		return
	}
	fmt.Println(string(buf[0:n]))
	fmt.Println((buf[0:n]))

	buf[1] = 252
	buf[4] = 251
	buf[7] = 252
	buf[10] = 254
	buf[13] = 252
	fmt.Println((buf[0:n]))
	n, err = conn.Write(buf[0:n])
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error())
		return
	}

	n, err = conn.Read(buf[0:])
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
		return
	}
	fmt.Println(string(buf[0:n]))
	fmt.Println((buf[0:n]))

	buf[1] = 252
	buf[4] = 252
	fmt.Println((buf[0:n]))
	n, err = conn.Write(buf[0:n])
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error())
		return
	}

	n, err = conn.Read(buf[0:])
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
		return
	}
	fmt.Println(string(buf[0:n]))
	fmt.Println((buf[0:n]))

	/*
		buf[0] = 255
		buf[1] = 252
		buf[2] = 1
		buf[3] = 255
		buf[4] = 253
		buf[5] = 1
		buf[6] = 255
		buf[7] = 252
		buf[8] = 1
		buf[9] = 255
		buf[10] = 253
		buf[11] = 1
		fmt.Println((buf[0:12]))
		n, err = conn.Write(buf[0:12])
		if err != nil {
			fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error())
			return
		}

		n, err = conn.Read(buf[0:])
		if err != nil {
			fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
			return
		}
	*/

	n, err = conn.Write([]byte("admin\n"))
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error())
		return
	}

	n, err = conn.Read(buf[0:])
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
		return
	}

	fmt.Println(string(buf[0:n]))

	n, err = conn.Write([]byte("\n"))
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error())
		return
	}

	n, err = conn.Read(buf[0:])
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
		return
	}
	fmt.Println(string(buf[0:n]))

	for {
		n, err = conn.Read(buf[0:])
		if err != nil {
			fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
			return
		}
		fmt.Println(string(buf[0:n]))
		if strings.HasSuffix(string(buf[0:n]), "> ") {
			break
		}
	}

	n, err = conn.Write([]byte("enable\n"))
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
		return
	}

	n, err = conn.Read(buf[0:])
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
		return
	}
	fmt.Println(string(buf[0:n]))

	n, err = conn.Write([]byte("terminal length 0\n"))
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
		return
	}

	n, err = conn.Read(buf[0:])
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
		return
	}
	fmt.Println(string(buf[0:n]))

	n, err = conn.Write([]byte("show port\n"))
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
		return
	}

	for {
		n, err = conn.Read(buf[0:])
		if err != nil {
			fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
			return
		}
		fmt.Println(string(buf[0:n]))
		if strings.HasSuffix(string(buf[0:n]), "# ") {
			break
		}
	}

	n, err = conn.Write([]byte("show interface\n\n"))
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
		return
	}

	for {
		n, err = conn.Read(buf[0:])
		if err != nil {
			fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
			return
		}
		fmt.Println(string(buf[0:n]))
		if strings.HasSuffix(string(buf[0:n]), "# ") {
			break
		}
	}

	n, err = conn.Write([]byte("show running-config\n"))
	if err != nil {
		fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
		return
	}

	reader := bufio.NewReader(conn)
	if reader == nil {
		fmt.Fprintf(os.Stderr, "Create reader failed.")
	}

	for {
		n, err := reader.Read(buf[0:])
		if err != nil {
			fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
			return
		}
		fmt.Println(string(buf[0:n]))
		if strings.HasSuffix(string(buf[0:n]), "# ") {
			break
		}
	}
	/*
		for {
				n, err = conn.Read(buf[0:])
				if err != nil {
					fmt.Fprintf(os.Stderr, "Error: %s", err.Error())
					return
				}
				fmt.Println(string(buf[0:n]))
				fmt.Println(n)
				if strings.HasSuffix(string(buf[0:n]), "# ") {
					break
				}

		}
	*/

	//	}

}

本文来自:CSDN博客

感谢作者:pssmart

查看原文:使用golang实现telnet远程登录

入群交流(和以上内容无关):Go中文网 QQ 交流群:798786647 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

2324 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传