fix: telnet连接不一定支持调整窗口大小先移除
This commit is contained in:
@@ -50,11 +50,6 @@ func (c *ConnTelnet) NewClient() (*ConnTelnet, error) {
|
|||||||
// fmt.Fprintln(client, c.User)
|
// fmt.Fprintln(client, c.User)
|
||||||
// fmt.Fprintln(client, c.Password)
|
// fmt.Fprintln(client, c.Password)
|
||||||
|
|
||||||
// 调整窗口大小 (120 列 x 128 行)
|
|
||||||
// 需要确保接收方理解并正确处理发送窗口大小设置命令
|
|
||||||
client.Write([]byte{255, 251, 31})
|
|
||||||
client.Write([]byte{255, 250, 31, byte(120 >> 8), byte(120 & 0xFF), byte(128 >> 8), byte(128 & 0xFF), 255, 240})
|
|
||||||
|
|
||||||
c.Client = &client
|
c.Client = &client
|
||||||
|
|
||||||
// 排空连接登录的信息
|
// 排空连接登录的信息
|
||||||
@@ -116,6 +111,6 @@ func (c *ConnTelnet) NewClientSession(cols, rows int) (*TelnetClientSession, err
|
|||||||
s := &TelnetClientSession{
|
s := &TelnetClientSession{
|
||||||
Client: *c.Client,
|
Client: *c.Client,
|
||||||
}
|
}
|
||||||
s.WindowChange(cols, rows)
|
// s.WindowChange(cols, rows)
|
||||||
return s, nil
|
return s, nil
|
||||||
}
|
}
|
||||||
@@ -47,11 +47,11 @@ func (s *TelnetClientSession) Read() []byte {
|
|||||||
buf := make([]byte, 1024)
|
buf := make([]byte, 1024)
|
||||||
// 设置读取超时时间为100毫秒
|
// 设置读取超时时间为100毫秒
|
||||||
s.Client.SetReadDeadline(time.Now().Add(100 * time.Millisecond))
|
s.Client.SetReadDeadline(time.Now().Add(100 * time.Millisecond))
|
||||||
_, err := s.Client.Read(buf)
|
n, err := s.Client.Read(buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []byte{}
|
return []byte{}
|
||||||
}
|
}
|
||||||
return buf
|
return buf[:n]
|
||||||
}
|
}
|
||||||
|
|
||||||
// CombinedOutput 发送命令带结果返回
|
// CombinedOutput 发送命令带结果返回
|
||||||
@@ -8,10 +8,10 @@ import (
|
|||||||
|
|
||||||
"be.ems/src/framework/constants/uploadsubpath"
|
"be.ems/src/framework/constants/uploadsubpath"
|
||||||
"be.ems/src/framework/i18n"
|
"be.ems/src/framework/i18n"
|
||||||
|
"be.ems/src/framework/telnet"
|
||||||
"be.ems/src/framework/utils/ctx"
|
"be.ems/src/framework/utils/ctx"
|
||||||
"be.ems/src/framework/utils/file"
|
"be.ems/src/framework/utils/file"
|
||||||
"be.ems/src/framework/utils/parse"
|
"be.ems/src/framework/utils/parse"
|
||||||
"be.ems/src/framework/utils/telnet"
|
|
||||||
"be.ems/src/framework/vo/result"
|
"be.ems/src/framework/vo/result"
|
||||||
"be.ems/src/modules/network_data/model"
|
"be.ems/src/modules/network_data/model"
|
||||||
neDataService "be.ems/src/modules/network_data/service"
|
neDataService "be.ems/src/modules/network_data/service"
|
||||||
|
|||||||
@@ -9,10 +9,10 @@ import (
|
|||||||
|
|
||||||
"be.ems/src/framework/constants/uploadsubpath"
|
"be.ems/src/framework/constants/uploadsubpath"
|
||||||
"be.ems/src/framework/i18n"
|
"be.ems/src/framework/i18n"
|
||||||
|
"be.ems/src/framework/telnet"
|
||||||
"be.ems/src/framework/utils/ctx"
|
"be.ems/src/framework/utils/ctx"
|
||||||
"be.ems/src/framework/utils/file"
|
"be.ems/src/framework/utils/file"
|
||||||
"be.ems/src/framework/utils/parse"
|
"be.ems/src/framework/utils/parse"
|
||||||
"be.ems/src/framework/utils/telnet"
|
|
||||||
"be.ems/src/framework/vo/result"
|
"be.ems/src/framework/vo/result"
|
||||||
"be.ems/src/modules/network_data/model"
|
"be.ems/src/modules/network_data/model"
|
||||||
neDataService "be.ems/src/modules/network_data/service"
|
neDataService "be.ems/src/modules/network_data/service"
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"be.ems/src/framework/i18n"
|
"be.ems/src/framework/i18n"
|
||||||
|
"be.ems/src/framework/telnet"
|
||||||
"be.ems/src/framework/utils/ctx"
|
"be.ems/src/framework/utils/ctx"
|
||||||
"be.ems/src/framework/utils/parse"
|
"be.ems/src/framework/utils/parse"
|
||||||
"be.ems/src/framework/utils/ssh"
|
"be.ems/src/framework/utils/ssh"
|
||||||
"be.ems/src/framework/utils/telnet"
|
|
||||||
"be.ems/src/framework/vo/result"
|
"be.ems/src/framework/vo/result"
|
||||||
"be.ems/src/modules/network_element/model"
|
"be.ems/src/modules/network_element/model"
|
||||||
neService "be.ems/src/modules/network_element/service"
|
neService "be.ems/src/modules/network_element/service"
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"be.ems/src/framework/telnet"
|
||||||
"be.ems/src/framework/utils/ssh"
|
"be.ems/src/framework/utils/ssh"
|
||||||
"be.ems/src/framework/utils/telnet"
|
|
||||||
"be.ems/src/modules/network_element/model"
|
"be.ems/src/modules/network_element/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ import (
|
|||||||
"be.ems/src/framework/constants/cachekey"
|
"be.ems/src/framework/constants/cachekey"
|
||||||
"be.ems/src/framework/logger"
|
"be.ems/src/framework/logger"
|
||||||
"be.ems/src/framework/redis"
|
"be.ems/src/framework/redis"
|
||||||
|
"be.ems/src/framework/telnet"
|
||||||
"be.ems/src/framework/utils/parse"
|
"be.ems/src/framework/utils/parse"
|
||||||
"be.ems/src/framework/utils/ssh"
|
"be.ems/src/framework/utils/ssh"
|
||||||
"be.ems/src/framework/utils/telnet"
|
|
||||||
neFetchlink "be.ems/src/modules/network_element/fetch_link"
|
neFetchlink "be.ems/src/modules/network_element/fetch_link"
|
||||||
"be.ems/src/modules/network_element/model"
|
"be.ems/src/modules/network_element/model"
|
||||||
"be.ems/src/modules/network_element/repository"
|
"be.ems/src/modules/network_element/repository"
|
||||||
|
|||||||
@@ -10,10 +10,10 @@ import (
|
|||||||
|
|
||||||
"be.ems/src/framework/i18n"
|
"be.ems/src/framework/i18n"
|
||||||
"be.ems/src/framework/logger"
|
"be.ems/src/framework/logger"
|
||||||
|
"be.ems/src/framework/telnet"
|
||||||
"be.ems/src/framework/utils/ctx"
|
"be.ems/src/framework/utils/ctx"
|
||||||
"be.ems/src/framework/utils/parse"
|
"be.ems/src/framework/utils/parse"
|
||||||
"be.ems/src/framework/utils/ssh"
|
"be.ems/src/framework/utils/ssh"
|
||||||
"be.ems/src/framework/utils/telnet"
|
|
||||||
"be.ems/src/framework/vo/result"
|
"be.ems/src/framework/vo/result"
|
||||||
"be.ems/src/modules/ws/service"
|
"be.ems/src/modules/ws/service"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
@@ -286,10 +286,6 @@ func (s *WSController) Telnet(c *gin.Context) {
|
|||||||
go s.wsService.ClientWriteListen(wsClient)
|
go s.wsService.ClientWriteListen(wsClient)
|
||||||
go s.wsService.ClientReadListen(wsClient, service.ReceiveTelnet)
|
go s.wsService.ClientReadListen(wsClient, service.ReceiveTelnet)
|
||||||
|
|
||||||
// 等待1秒,排空首次消息
|
|
||||||
time.Sleep(1 * time.Second)
|
|
||||||
_ = clientSession.Read()
|
|
||||||
|
|
||||||
// 实时读取Telnet消息直接输出
|
// 实时读取Telnet消息直接输出
|
||||||
msTicker := time.NewTicker(100 * time.Millisecond)
|
msTicker := time.NewTicker(100 * time.Millisecond)
|
||||||
defer msTicker.Stop()
|
defer msTicker.Stop()
|
||||||
@@ -298,7 +294,7 @@ func (s *WSController) Telnet(c *gin.Context) {
|
|||||||
case ms := <-msTicker.C:
|
case ms := <-msTicker.C:
|
||||||
outputByte := clientSession.Read()
|
outputByte := clientSession.Read()
|
||||||
if len(outputByte) > 0 {
|
if len(outputByte) > 0 {
|
||||||
outputStr := strings.TrimRight(string(outputByte), "\x00")
|
outputStr := string(outputByte)
|
||||||
msgByte, _ := json.Marshal(result.Ok(map[string]any{
|
msgByte, _ := json.Marshal(result.Ok(map[string]any{
|
||||||
"requestId": fmt.Sprintf("telnet_%s_%d", neHost.HostID, ms.UnixMilli()),
|
"requestId": fmt.Sprintf("telnet_%s_%d", neHost.HostID, ms.UnixMilli()),
|
||||||
"data": outputStr,
|
"data": outputStr,
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"be.ems/src/framework/logger"
|
"be.ems/src/framework/logger"
|
||||||
|
"be.ems/src/framework/telnet"
|
||||||
"be.ems/src/framework/utils/ssh"
|
"be.ems/src/framework/utils/ssh"
|
||||||
"be.ems/src/framework/utils/telnet"
|
|
||||||
"be.ems/src/framework/vo/result"
|
"be.ems/src/framework/vo/result"
|
||||||
"be.ems/src/modules/ws/model"
|
"be.ems/src/modules/ws/model"
|
||||||
"be.ems/src/modules/ws/processor"
|
"be.ems/src/modules/ws/processor"
|
||||||
@@ -234,9 +234,8 @@ func (s *WSReceiveImpl) Telnet(client *model.WSClient, reqMsg model.WSRequest) {
|
|||||||
}
|
}
|
||||||
err = json.Unmarshal(msgByte, &data)
|
err = json.Unmarshal(msgByte, &data)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
telnetClientSession := client.ChildConn.(*telnet.TelnetClientSession)
|
// telnetClientSession := client.ChildConn.(*telnet.TelnetClientSession)
|
||||||
err = telnetClientSession.WindowChange(data.Rows, data.Cols)
|
// _ = telnetClientSession.WindowChange(data.Rows, data.Cols)
|
||||||
_ = telnetClientSession.Read()
|
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
err = fmt.Errorf("message type %s not supported", reqMsg.Type)
|
err = fmt.Errorf("message type %s not supported", reqMsg.Type)
|
||||||
|
|||||||
Reference in New Issue
Block a user