pref: telnet连接工具的信息读取优化
This commit is contained in:
@@ -42,6 +42,10 @@ func (c *ConnTelnet) NewClient() (*ConnTelnet, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 需要确保接收方理解并正确处理发送窗口大小设置命令
|
||||||
|
client.Write([]byte{255, 251, 31}) // 发送窗口大小选项
|
||||||
|
client.Write([]byte{255, 250, 31, 0, 128, 0, 120, 255, 240}) // 发送窗口行和列的大小
|
||||||
|
|
||||||
// 进行登录
|
// 进行登录
|
||||||
time.Sleep(100 * time.Millisecond)
|
time.Sleep(100 * time.Millisecond)
|
||||||
client.Write([]byte(c.User + "\r\n"))
|
client.Write([]byte(c.User + "\r\n"))
|
||||||
@@ -49,8 +53,10 @@ func (c *ConnTelnet) NewClient() (*ConnTelnet, error) {
|
|||||||
client.Write([]byte(c.Password + "\r\n"))
|
client.Write([]byte(c.Password + "\r\n"))
|
||||||
// fmt.Fprintln(client, c.User)
|
// fmt.Fprintln(client, c.User)
|
||||||
// fmt.Fprintln(client, c.Password)
|
// fmt.Fprintln(client, c.Password)
|
||||||
|
|
||||||
c.Client = &client
|
c.Client = &client
|
||||||
|
|
||||||
|
// 排空连接登录的信息
|
||||||
|
c.RunCMD("")
|
||||||
return c, nil
|
return c, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,32 +76,14 @@ func (c *ConnTelnet) RunCMD(cmd string) (string, error) {
|
|||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
tmp := make([]byte, 1024)
|
tmp := make([]byte, 1024)
|
||||||
|
|
||||||
// 排空连接登录的信息
|
|
||||||
for {
|
|
||||||
// 设置读取超时时间为100毫秒
|
|
||||||
conn.SetReadDeadline(time.Now().Add(100 * time.Millisecond))
|
|
||||||
n, err := conn.Read(tmp)
|
|
||||||
if err != nil {
|
|
||||||
// 判断是否是超时错误
|
|
||||||
if netErr, ok := err.(net.Error); ok && netErr.Timeout() {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if n == 0 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
buf.Write(tmp[:n])
|
|
||||||
}
|
|
||||||
buf.Reset()
|
|
||||||
|
|
||||||
// 写入命令
|
// 写入命令
|
||||||
_, err := conn.Write([]byte(cmd))
|
if cmd != "" {
|
||||||
if err != nil {
|
if _, err := conn.Write([]byte(cmd)); err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 读取本次响应命令消息
|
// 读取命令消息
|
||||||
for {
|
for {
|
||||||
// 设置读取超时时间为1000毫秒
|
// 设置读取超时时间为1000毫秒
|
||||||
conn.SetReadDeadline(time.Now().Add(1000 * time.Millisecond))
|
conn.SetReadDeadline(time.Now().Add(1000 * time.Millisecond))
|
||||||
@@ -123,35 +111,8 @@ func (c *ConnTelnet) NewClientSession(cols, rows uint8) (*TelnetClientSession, e
|
|||||||
if c.Client == nil {
|
if c.Client == nil {
|
||||||
return nil, fmt.Errorf("telnet client not connected")
|
return nil, fmt.Errorf("telnet client not connected")
|
||||||
}
|
}
|
||||||
conn := *c.Client
|
|
||||||
|
|
||||||
// 需要确保接收方理解并正确处理发送窗口大小设置命令
|
|
||||||
conn.Write([]byte{255, 251, 31}) // 发送窗口大小选项
|
|
||||||
conn.Write([]byte{255, 250, 31, 0, rows, 0, cols, 255, 240}) // 发送窗口行和列的大小
|
|
||||||
|
|
||||||
var buf bytes.Buffer
|
|
||||||
tmp := make([]byte, 1024)
|
|
||||||
// 排空连接登录的信息
|
|
||||||
for {
|
|
||||||
// 设置读取超时时间为5毫秒
|
|
||||||
conn.SetReadDeadline(time.Now().Add(5 * time.Millisecond))
|
|
||||||
n, err := conn.Read(tmp)
|
|
||||||
if err != nil {
|
|
||||||
// 判断是否是超时错误
|
|
||||||
if netErr, ok := err.(net.Error); ok && netErr.Timeout() {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if n == 0 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
buf.Write(tmp[:n])
|
|
||||||
}
|
|
||||||
buf.Reset()
|
|
||||||
|
|
||||||
return &TelnetClientSession{
|
return &TelnetClientSession{
|
||||||
Client: conn,
|
Client: *c.Client,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user