当前位置:首页 > CN2资讯 > 正文内容

Golang net.http IPv4/IPv6 服务http ipv6

1天前CN2资讯


Golang 的网络服务,如果不指定IPv4 或 IPv6,如果VPS 同时支持 IPv4 和 IPv6,net.Listen() 只会监听 IPv6 地址。但这不影响客户端使用 IPv4 地址来访问。如下使用 netstat -lnt 来查看端口监听情况:

# netstat -lnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 :::25 :::* LISTEN
tcp6 0 0 :::443 :::* LISTEN
tcp6 0 0 :::111 :::* LISTEN
tcp6 0 0

如何在启动网络服务时选择 IPv6?
在高层可以使用 http.ListenAndServe 来选择,如:

http.ListenAndServe(":8083", nil) // tcp
http.ListenAndServe("[2604:180:3:dd3::276e]:8083", nil) // 具体指定 tcp6

如果觉得具体指定 IPv6地址太麻烦,可以重构 ListenAndServe 函数,会用到 net.Listen 函数, 可以在该函数里指定 network ,可选 tcp、tcp4、tcp6。network 可选参数:

"tcp",
"tcp4" (IPv4-only),
"tcp6" (IPv6-only),
"udp",
"udp4" (IPv4-only),
"udp6" (IPv6-only),
"ip",
"ip4" (IPv4-only),
"ip6" (IPv6-only),
"unix",
"unixgram",
"unixpacket",

常用:

tcp 自动适配,优先IPv6
tcp4 仅使用IPv4
tcp6 仅使用IPv6

重构的 ListenAndServe 函数示例:

package main

import (
"fmt"
"net"
"net/http"
)

type helloHandler struct{}

func (h *helloHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, world!"))
}

func main() {
var err error
http.Handle("/", &helloHandler{})
//err = http.ListenAndServe(":8083", nil) // IPv4 或 IPv6
//err = http.ListenAndServe("[2604:180:3:dd3::276e]:8083", nil) // 具体指定,仅 IPv6
err = ListenAndServe(":8083", nil) // 重构的 ListenAndServe 函数
if err != nil {
fmt.Println(err)
}

}

//
type tcpKeepAliveListener struct {
*net.TCPListener
}

func ListenAndServe(addr string, handler http.Handler) error {
srv := &http.Server{Addr: addr, Handler: handler}
addr = srv.Addr
if addr == "" {
addr = ":http"
}
ln, err := net.Listen("tcp6", addr) // 仅指定 IPv6
if err != nil {
return err
}
return srv.Serve(tcpKeepAliveListener{ln.(*net.TCPListener)})
}

客户端可以用下面的命令行检测 IPv6 服务:

curl "http://[2604:180:3:dd3::276e]:8083"
curl -g -6 'http://[2604:180:3:dd3::276e]:8083/'
telnet -6 2604:180:3:dd3::276e 8083


    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/18971.html

    分享给朋友:

    “Golang net.http IPv4/IPv6 服务http ipv6” 的相关文章

    Debian 修改 DNS 的详细步骤与常见问题解决方案

    在讨论 Debian 中的 DNS 修改前,我想先和大家分享一些关于 DNS 的基本信息。DNS(Domain Name System)是互联网的“电话簿”,它将我们可读的网站地址(如 www.example.com)转换为计算机能够理解的 IP 地址。这一过程对于我们浏览网页、发送邮件等操作至关重...

    RFCHOST评论:高性能VPS与流媒体解锁的完美选择

    RFCHOST概述 RFCHOST是一家自2015年成立的公司,隶属于上海花卷科技。作为一家新兴的网络服务企业,RFCHOST专注于提供国际线路深层挖掘与构造网络通信服务的一体化解决方案。我一直关注着这个快速发展的品牌,尤其是它在香港和洛杉矶VPS业务上的持续投入与创新。 随着全球数字化进程的加速,...

    VPS IP被封怎么办?常见原因与解决方案分析

    在使用VPS的过程中,有时候会遇到VPS IP被封的情况,这对很多用户来说,会带来一些困扰。虽然情况不同,但通常来说,下列几个原因是比较常见的,了解这些原因能够帮助我们更好地避免封禁。 首先,敏感操作常常是导致IP被封的重要原因之一。比如,如果你进行了一些网络爬虫、频繁请求某个网站内容,或者试图访问...

    获取CloudCone优惠码,享受超值VPS主机折扣

    CloudCone 优惠码概述 在探索CloudCone之前,我想先聊聊关于优惠码的事情。CloudCone优惠码是指通过一些特定的方式获得的、可以享受价格折扣的代码。这些代码常常可以在购买VPS主机或其他服务时使用,帮助我节省一些开支。比如,有时候我能在优惠活动中找到让人心动的折扣,几乎是对我钱包...

    支付宝与PayPal充值攻略:如何选择适合的支付方式

    支付宝和PayPal是当今全球最受欢迎的支付平台之一,它们各自具有独特的特点和广泛的用户群体。支付宝成立于2004年,由阿里巴巴集团推出,最初是为了支持电子商务交易,逐渐发展成一个多功能的支付应用。用户不仅可以通过它进行在线支付,还可以进行转账、充值、理财等多种活动。随着移动支付的兴起,支付宝也积极...

    ConoHa云服务:高效VPS与灵活应用场景的理想选择

    ConoHa概述 在当今的云计算时代,ConoHa作为一个知名的云服务提供商,备受用户关注。ConoHa是由日本GMO互联网公司运营的一款云服务平台,采用高性能的基础设施,为用户提供灵活的VPS(虚拟专用服务器)、云服务器和其他相关服务。最吸引我的是,ConoHa不仅提供强大的技术支持,其用户体验设...