feat: ipv6 connect

This commit is contained in:
Fu Diwei 2025-06-12 13:39:01 +08:00
parent 563adbec2a
commit fb62f1e105
3 changed files with 13 additions and 10 deletions

View File

@ -8,6 +8,7 @@ import (
"net" "net"
"os" "os"
"path/filepath" "path/filepath"
"strconv"
"strings" "strings"
"github.com/pkg/sftp" "github.com/pkg/sftp"
@ -139,9 +140,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE
var jumpConn net.Conn var jumpConn net.Conn
// 第一个连接是主机发起,后续通过跳板机发起 // 第一个连接是主机发起,后续通过跳板机发起
if jumpClient == nil { if jumpClient == nil {
jumpConn, err = net.Dial("tcp", fmt.Sprintf("%s:%d", jumpServerConf.SshHost, jumpServerConf.SshPort)) jumpConn, err = net.Dial("tcp", net.JoinHostPort(jumpServerConf.SshHost, strconv.Itoa(int(jumpServerConf.SshPort))))
} else { } else {
jumpConn, err = jumpClient.DialContext(ctx, "tcp", fmt.Sprintf("%s:%d", jumpServerConf.SshHost, jumpServerConf.SshPort)) jumpConn, err = jumpClient.DialContext(ctx, "tcp", net.JoinHostPort(jumpServerConf.SshHost, strconv.Itoa(int(jumpServerConf.SshPort))))
} }
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to connect to jump server [%d]: %w", i+1, err) return nil, fmt.Errorf("failed to connect to jump server [%d]: %w", i+1, err)
@ -168,13 +169,13 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE
} }
// 通过跳板机发起 TCP 连接到目标服务器 // 通过跳板机发起 TCP 连接到目标服务器
targetConn, err = jumpClient.DialContext(ctx, "tcp", fmt.Sprintf("%s:%d", d.config.SshHost, d.config.SshPort)) targetConn, err = jumpClient.DialContext(ctx, "tcp", net.JoinHostPort(d.config.SshHost, strconv.Itoa(int(d.config.SshPort))))
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to connect to target server: %w", err) return nil, fmt.Errorf("failed to connect to target server: %w", err)
} }
} else { } else {
// 直接发起 TCP 连接到目标服务器 // 直接发起 TCP 连接到目标服务器
targetConn, err = net.Dial("tcp", fmt.Sprintf("%s:%d", d.config.SshHost, d.config.SshPort)) targetConn, err = net.Dial("tcp", net.JoinHostPort(d.config.SshHost, strconv.Itoa(int(d.config.SshPort))))
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to connect to target server: %w", err) return nil, fmt.Errorf("failed to connect to target server: %w", err)
} }
@ -340,7 +341,8 @@ func createSshClient(conn net.Conn, host string, port int32, authMethod string,
return nil, fmt.Errorf("unsupported auth method '%s'", authMethod) return nil, fmt.Errorf("unsupported auth method '%s'", authMethod)
} }
sshConn, chans, reqs, err := ssh.NewClientConn(conn, fmt.Sprintf("%s:%d", host, port), &ssh.ClientConfig{ addr := net.JoinHostPort(host, strconv.Itoa(int(port)))
sshConn, chans, reqs, err := ssh.NewClientConn(conn, addr, &ssh.ClientConfig{
User: username, User: username,
Auth: authentications, Auth: authentications,
HostKeyCallback: ssh.InsecureIgnoreHostKey(), HostKeyCallback: ssh.InsecureIgnoreHostKey(),

View File

@ -3,9 +3,10 @@ package email
import ( import (
"context" "context"
"crypto/tls" "crypto/tls"
"fmt"
"log/slog" "log/slog"
"net"
"net/smtp" "net/smtp"
"strconv"
"github.com/domodwyer/mailyak/v3" "github.com/domodwyer/mailyak/v3"
@ -68,12 +69,12 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s
var smtpAddr string var smtpAddr string
if n.config.SmtpPort == 0 { if n.config.SmtpPort == 0 {
if n.config.SmtpTls { if n.config.SmtpTls {
smtpAddr = fmt.Sprintf("%s:465", n.config.SmtpHost) smtpAddr = net.JoinHostPort(n.config.SmtpHost, "465")
} else { } else {
smtpAddr = fmt.Sprintf("%s:25", n.config.SmtpHost) smtpAddr = net.JoinHostPort(n.config.SmtpHost, "25")
} }
} else { } else {
smtpAddr = fmt.Sprintf("%s:%d", n.config.SmtpHost, n.config.SmtpPort) smtpAddr = net.JoinHostPort(n.config.SmtpHost, strconv.Itoa(int(n.config.SmtpPort)))
} }
var yak *mailyak.MailYak var yak *mailyak.MailYak

View File

@ -35,7 +35,7 @@ func (n *monitorNode) Process(ctx context.Context) error {
nodeCfg := n.node.GetConfigForMonitor() nodeCfg := n.node.GetConfigForMonitor()
n.logger.Info("ready to monitor certificate ...", slog.Any("config", nodeCfg)) n.logger.Info("ready to monitor certificate ...", slog.Any("config", nodeCfg))
targetAddr := net.JoinHostPort(nodeCfg.Host, fmt.Sprintf("%d", nodeCfg.Port)) targetAddr := net.JoinHostPort(nodeCfg.Host, strconv.Itoa(int(nodeCfg.Port)))
if nodeCfg.Port == 0 { if nodeCfg.Port == 0 {
targetAddr = net.JoinHostPort(nodeCfg.Host, "443") targetAddr = net.JoinHostPort(nodeCfg.Host, "443")
} }