fix: 抓包连接方式改用网元信息配置的终端
This commit is contained in:
@@ -5,9 +5,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"be.ems/src/framework/config"
|
|
||||||
"be.ems/src/framework/logger"
|
"be.ems/src/framework/logger"
|
||||||
"be.ems/src/framework/utils/cmd"
|
|
||||||
"be.ems/src/framework/utils/date"
|
"be.ems/src/framework/utils/date"
|
||||||
neService "be.ems/src/modules/network_element/service"
|
neService "be.ems/src/modules/network_element/service"
|
||||||
)
|
)
|
||||||
@@ -28,23 +26,26 @@ type TcpdumpImpl struct {
|
|||||||
|
|
||||||
// DumpStart 触发tcpdump开始抓包 filePcapName, err
|
// DumpStart 触发tcpdump开始抓包 filePcapName, err
|
||||||
func (s *TcpdumpImpl) DumpStart(neType, neId, cmdStr string) (string, error) {
|
func (s *TcpdumpImpl) DumpStart(neType, neId, cmdStr string) (string, error) {
|
||||||
// 检查网元信息
|
// 查询网元获取IP
|
||||||
neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(neType, neId)
|
neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(neType, neId)
|
||||||
if neInfo.NeId != neId {
|
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||||
return "", fmt.Errorf("noData")
|
return "", fmt.Errorf("noData")
|
||||||
}
|
}
|
||||||
|
|
||||||
// SSH命令
|
// 网元主机的SSH客户端
|
||||||
usernameNe := config.Get("ne.user").(string) // 网元统一用户
|
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId)
|
||||||
sshHost := fmt.Sprintf("%s@%s", usernameNe, neInfo.IP)
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
defer sshClient.Close()
|
||||||
|
|
||||||
// 是否拥有sudo权限并拼接
|
// 是否拥有sudo权限并拼接
|
||||||
withSudo := ""
|
withSudo := ""
|
||||||
if _, err := cmd.ExecWithCheck("ssh", sshHost, "sudo -n uname"); err == nil {
|
if _, err := sshClient.RunCMD("sudo -n uname"); err == nil {
|
||||||
withSudo = "sudo "
|
withSudo = "sudo "
|
||||||
}
|
}
|
||||||
|
|
||||||
if msg, err := cmd.ExecWithCheck("ssh", sshHost, fmt.Sprintf("%s tcpdump --version", withSudo)); err != nil {
|
if msg, err := sshClient.RunCMD(fmt.Sprintf("%s tcpdump --version", withSudo)); err != nil {
|
||||||
// stderr: bash: tcpdump:未找到命令 => exit status 127
|
// stderr: bash: tcpdump:未找到命令 => exit status 127
|
||||||
msg = strings.TrimSpace(msg)
|
msg = strings.TrimSpace(msg)
|
||||||
logger.Warnf("DumpStart err: %s => %s", msg, err.Error())
|
logger.Warnf("DumpStart err: %s => %s", msg, err.Error())
|
||||||
@@ -58,7 +59,7 @@ func (s *TcpdumpImpl) DumpStart(neType, neId, cmdStr string) (string, error) {
|
|||||||
sendCmd := fmt.Sprintf("cd /tmp \n %s nohup timeout 30m tcpdump -i any %s -s0 -w %s.pcap > %s.log 2>&1 & \necho $!", withSudo, cmdStr, fileName, fileName)
|
sendCmd := fmt.Sprintf("cd /tmp \n %s nohup timeout 30m tcpdump -i any %s -s0 -w %s.pcap > %s.log 2>&1 & \necho $!", withSudo, cmdStr, fileName, fileName)
|
||||||
// cd /tmp
|
// cd /tmp
|
||||||
// sudo nohup timeout 60m tcpdump -i any -n -s 0 -v -w -s0 -w 20240115140822_UDM_001.pcap > 20240115140822_UDM_001.log 2>&1 & echo $!
|
// sudo nohup timeout 60m tcpdump -i any -n -s 0 -v -w -s0 -w 20240115140822_UDM_001.pcap > 20240115140822_UDM_001.log 2>&1 & echo $!
|
||||||
msg, err := cmd.ExecWithCheck("ssh", sshHost, sendCmd)
|
msg, err := sshClient.RunCMD(sendCmd)
|
||||||
msg = strings.TrimSpace(msg)
|
msg = strings.TrimSpace(msg)
|
||||||
if err != nil || strings.HasPrefix(msg, "stderr:") {
|
if err != nil || strings.HasPrefix(msg, "stderr:") {
|
||||||
logger.Warnf("DumpStart err: %s => %s", msg, err.Error())
|
logger.Warnf("DumpStart err: %s => %s", msg, err.Error())
|
||||||
@@ -73,19 +74,22 @@ func (s *TcpdumpImpl) DumpStart(neType, neId, cmdStr string) (string, error) {
|
|||||||
|
|
||||||
// DumpStop 停止已存在抓包句柄
|
// DumpStop 停止已存在抓包句柄
|
||||||
func (s *TcpdumpImpl) DumpStop(neType, neId, fileName string) (string, error) {
|
func (s *TcpdumpImpl) DumpStop(neType, neId, fileName string) (string, error) {
|
||||||
// 检查网元信息
|
// 查询网元获取IP
|
||||||
neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(neType, neId)
|
neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(neType, neId)
|
||||||
if neInfo.NeId != neId {
|
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||||
return "", fmt.Errorf("noData")
|
return "", fmt.Errorf("noData")
|
||||||
}
|
}
|
||||||
|
|
||||||
// SSH命令
|
// 网元主机的SSH客户端
|
||||||
usernameNe := config.Get("ne.user").(string) // 网元统一用户
|
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId)
|
||||||
sshHost := fmt.Sprintf("%s@%s", usernameNe, neInfo.IP)
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
defer sshClient.Close()
|
||||||
|
|
||||||
// 是否拥有sudo权限并拼接
|
// 是否拥有sudo权限并拼接
|
||||||
withSudo := ""
|
withSudo := ""
|
||||||
if _, err := cmd.ExecWithCheck("ssh", sshHost, "sudo -n uname"); err == nil {
|
if _, err := sshClient.RunCMD("sudo -n uname"); err == nil {
|
||||||
withSudo = "sudo "
|
withSudo = "sudo "
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,7 +108,7 @@ func (s *TcpdumpImpl) DumpStop(neType, neId, fileName string) (string, error) {
|
|||||||
|
|
||||||
// 拼装命令
|
// 拼装命令
|
||||||
sendCmd := fmt.Sprintf("cd /tmp \n %s kill %s %s", withSudo, pid, viewLogFile)
|
sendCmd := fmt.Sprintf("cd /tmp \n %s kill %s %s", withSudo, pid, viewLogFile)
|
||||||
msg, err := cmd.ExecWithCheck("ssh", sshHost, sendCmd)
|
msg, err := sshClient.RunCMD(sendCmd)
|
||||||
delete(s.tcpdumpPIDMap, neTypeID)
|
delete(s.tcpdumpPIDMap, neTypeID)
|
||||||
if err != nil || strings.HasPrefix(msg, "stderr:") {
|
if err != nil || strings.HasPrefix(msg, "stderr:") {
|
||||||
logger.Warnf("DumpStop err: %s => %s", strings.TrimSpace(msg), err.Error())
|
logger.Warnf("DumpStop err: %s => %s", strings.TrimSpace(msg), err.Error())
|
||||||
@@ -115,23 +119,26 @@ func (s *TcpdumpImpl) DumpStop(neType, neId, fileName string) (string, error) {
|
|||||||
|
|
||||||
// DumpUPF UPF标准版抓包
|
// DumpUPF UPF标准版抓包
|
||||||
func (s *TcpdumpImpl) DumpUPF(neType, neId, cmdStr string) (string, string, error) {
|
func (s *TcpdumpImpl) DumpUPF(neType, neId, cmdStr string) (string, string, error) {
|
||||||
// 检查网元信息
|
// 查询网元获取IP
|
||||||
neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(neType, neId)
|
neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(neType, neId)
|
||||||
if neInfo.NeId != neId {
|
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||||
return "", "", fmt.Errorf("noData")
|
return "", "", fmt.Errorf("noData")
|
||||||
}
|
}
|
||||||
|
|
||||||
// SSH命令
|
// 网元主机的SSH客户端
|
||||||
usernameNe := config.Get("ne.user").(string) // 网元统一用户
|
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId)
|
||||||
sshHost := fmt.Sprintf("%s@%s", usernameNe, neInfo.IP)
|
if err != nil {
|
||||||
|
return "", "", err
|
||||||
|
}
|
||||||
|
defer sshClient.Close()
|
||||||
|
|
||||||
// 是否拥有sudo权限并拼接
|
// 是否拥有sudo权限并拼接
|
||||||
withSudo := ""
|
withSudo := ""
|
||||||
if _, err := cmd.ExecWithCheck("ssh", sshHost, "sudo -n uname"); err == nil {
|
if _, err := sshClient.RunCMD("sudo -n uname"); err == nil {
|
||||||
withSudo = "sudo "
|
withSudo = "sudo "
|
||||||
}
|
}
|
||||||
|
|
||||||
if msg, err := cmd.ExecWithCheck("ssh", sshHost, fmt.Sprintf("%s expect -version", withSudo)); err != nil {
|
if msg, err := sshClient.RunCMD(fmt.Sprintf("%s expect -version", withSudo)); err != nil {
|
||||||
// stderr: bash: expect:未找到命令 => exit status 127
|
// stderr: bash: expect:未找到命令 => exit status 127
|
||||||
msg = strings.TrimSpace(msg)
|
msg = strings.TrimSpace(msg)
|
||||||
logger.Warnf("DumpUPF err: %s => %s", msg, err.Error())
|
logger.Warnf("DumpUPF err: %s => %s", msg, err.Error())
|
||||||
@@ -160,7 +167,7 @@ func (s *TcpdumpImpl) DumpUPF(neType, neId, cmdStr string) (string, string, erro
|
|||||||
// sudo chmod +x pcapUPF.sh
|
// sudo chmod +x pcapUPF.sh
|
||||||
// expect ./cap.sh 'pcap dispatch trace off' > 20240115165701_UDM_001.log 2>&1
|
// expect ./cap.sh 'pcap dispatch trace off' > 20240115165701_UDM_001.log 2>&1
|
||||||
// cat 20240115165701_UDM_001.log
|
// cat 20240115165701_UDM_001.log
|
||||||
msg, err := cmd.ExecWithCheck("ssh", sshHost, sendCmd)
|
msg, err := sshClient.RunCMD(sendCmd)
|
||||||
msg = strings.TrimSpace(msg)
|
msg = strings.TrimSpace(msg)
|
||||||
if err != nil || strings.HasPrefix(msg, "stderr:") {
|
if err != nil || strings.HasPrefix(msg, "stderr:") {
|
||||||
logger.Warnf("DumpUPF err: %s => %s", msg, err.Error())
|
logger.Warnf("DumpUPF err: %s => %s", msg, err.Error())
|
||||||
|
|||||||
@@ -13,8 +13,10 @@ import (
|
|||||||
func Setup(router *gin.Engine) {
|
func Setup(router *gin.Engine) {
|
||||||
logger.Infof("开始加载 ====> trace 模块路由")
|
logger.Infof("开始加载 ====> trace 模块路由")
|
||||||
|
|
||||||
|
traceGroup := router.Group("/trace")
|
||||||
|
|
||||||
// 信令抓包
|
// 信令抓包
|
||||||
tcpdumpGroup := router.Group("/tcpdump")
|
tcpdumpGroup := traceGroup.Group("/tcpdump")
|
||||||
{
|
{
|
||||||
tcpdumpGroup.POST("/start",
|
tcpdumpGroup.POST("/start",
|
||||||
middleware.PreAuthorize(nil),
|
middleware.PreAuthorize(nil),
|
||||||
|
|||||||
Reference in New Issue
Block a user