You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

连接DENIC测试RRI注册中心时如何获取EPP问候消息?

解决DENIC RRI注册中心连接后EOF问题(无专用库)

核心问题分析

你遇到EOF是因为EPP协议的交互流程要求客户端先主动发送<hello>请求,多数注册中心不会在TLS握手后主动推送问候消息,服务端会因未收到合法请求而关闭连接,导致读取时返回EOF。

修复步骤及代码调整

1. 补充EPP Hello请求发送

在TLS握手完成后,先发送标准EPP初始化请求,再读取响应:

import (
    "io"
    "log"
    "net"
    "net/http"
    "time"
    "crypto/tls"
)

func main() {
    log.Println("Attempting to connect...")
    conn, err := net.DialTimeout("tcp", "<host>:<port>", time.Second*15)
    if err != nil {
        log.Fatalln("Error connecting:", err)
    }
    defer conn.Close() // 确保连接资源被释放
    log.Println("TCP connection established")

    tlsConfig := &tls.Config{
        ServerName:         "<host>",
        InsecureSkipVerify: true,
        MinVersion:         tls.VersionTLS12, // 显式指定兼容的TLS版本
    }

    log.Println("Starting TLS handshake...")
    newConn := tls.Client(conn, tlsConfig)
    defer newConn.Close()
    err = newConn.SetDeadline(time.Now().Add(time.Second * 30))
    if err != nil {
        log.Fatalln("Error setting deadline:", err)
    }

    err = newConn.Handshake()
    if err != nil {
        log.Fatalf("could not perform TLS handshake, err : %s", err.Error())
    }
    log.Println("TLS handshake completed")

    // 发送EPP Hello请求(必须步骤)
    helloMsg := `<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <hello/>
</epp>`
    _, err = newConn.Write([]byte(helloMsg))
    if err != nil {
        log.Fatalf("Failed to send hello request: %v", err)
    }
    log.Println("Sent EPP hello request")

    // 读取完整响应(处理分块返回的情况)
    var responseBuf []byte
    buf := make([]byte, 4096)
    for {
        n, err := newConn.Read(buf)
        if err != nil {
            if err == io.EOF {
                break
            }
            log.Printf("Read error: %v", err)
            return
        }
        responseBuf = append(responseBuf, buf[:n]...)
    }

    // 打印最终响应
    log.Printf("Server response:\n%s", string(responseBuf))
}

2. 关键配置验证

  • 确认端点正确性:DENIC测试环境的标准EPP端点是epp.test.denic.de:700,替换你代码中的<host>:<port>
  • TLS版本兼容:显式指定TLS 1.2+,避免默认配置不兼容服务端安全要求
  • 资源释放:添加defer语句确保连接关闭,防止资源泄漏

3. 额外排查点

如果仍出现EOF,检查:

  • 本地网络是否能访问测试端点(用telnet <host> <port>或nc -zv <host> <port>测试连通性)
  • 服务端是否有IP白名单限制,确认你的公网IP在测试环境允许列表内

内容的提问来源于stack exchange,提问作者pranoy k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:36:19