gpt4 book ai didi

go - 如何从 Telnet session 读取数据

转载 作者:行者123 更新时间:2023-12-02 12:57:19 24 4
gpt4 key购买 nike

我正在尝试创建一个工具来通过 Telnet 连接到网络设备并使用 go-telnet 发送一些命令(与某些附加要求类似) 。

到目前为止,我设法创建连接并发送如下命令:

func main() {
var loginBuffer = [6]byte{'r', 'o', 'o', 't', '\r', '\n'}
var login = loginBuffer[:]

conn, err := telnet.DialTo("10.10.10.2:23")
if nil != err {
fmt.Println(err)
}
defer conn.Close()

conn.Write(login)
}

使用 Wireshark 我可以看到设备响应,但无法读取任何响应数据。我猜我使用 Read() 的方式是错误的,不确定。

希望有一个工作示例或解释如何在这种情况下捕获和处理响应数据。

最佳答案

感谢大家抽出时间回答我的问题。我设法找出问题所在:

  1. 每次我创建读取缓冲区时,它都太大(1024 字节),因此程序正在等待它填满。现在我正在使用循环读取 1 字节缓冲区。

  2. 看来,我还需要一些标准来让函数停止读取并继续发送命令。

这是工作代码:

// Thin function reads from Telnet session. "expect" is a string I use as signal to stop reading
func ReaderTelnet(conn *telnet.Conn, expect string) (out string) {
var buffer [1]byte
recvData := buffer[:]
var n int
var err error

for {
n, err = conn.Read(recvData)
fmt.Println("Bytes: ", n, "Data: ", recvData, string(recvData))
if n <= 0 || err != nil || strings.Contains(out, expect) {
break
} else {
out += string(recvData)
}
}
return out
}

//convert a command to bytes, and send to Telnet connection followed by '\r\n'
func SenderTelnet(conn *telnet.Conn, command string) {
var commandBuffer []byte
for _, char := range command {
commandBuffer = append(commandBuffer, byte(char))
}

var crlfBuffer [2]byte = [2]byte{'\r', '\n'}
crlf := crlfBuffer[:]

fmt.Println(commandBuffer)

conn.Write(commandBuffer)
conn.Write(crlf)
}

func main() {
conn, err := telnet.DialTo("10.10.10.2:23")
if nil != err {
fmt.Println(err)
}

fmt.Print(ReaderTelnet(conn, "Login"))
SenderTelnet(conn, "root")
fmt.Print(ReaderTelnet(conn, "Password"))
SenderTelnet(conn, "root")
fmt.Print(ReaderTelnet(conn, ">"))
}

关于go - 如何从 Telnet session 读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59117025/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com