Go实战--golang中获取公网ip 查看内网ip 检测ip类型 校验ip区间 ip地址string和int转换 根据

本文介绍了如何在Go语言中获取公网IP和内网IP,探讨了公网IP与内网IP的概念,并提供了检测IP类型、字符串与整数IP转换以及通过淘宝接口获取IP信息的方法。此外,还分享了完整的Go代码实现。
摘要由CSDN通过智能技术生成
                       

生命不止,继续 go go go!!!

之前,有介绍过golang提供的标准库:net包

Go语言学习之net包(The way to go)

简要回味net包

func ParseIP

func ParseIP(s string) IP
  
  
  
  • 1

ParseIP parses s as an IP address, returning the result. The string s can be in dotted decimal (“192.0.2.1”) or IPv6 (“2001:db8::68”) form. If s is not a valid textual representation of an IP address, ParseIP returns nil.

func InterfaceAddrs

func InterfaceAddrs() ([]Addr, error)
  
  
  
  • 1

InterfaceAddrs returns a list of the system’s unicast interface addresses.

The returned list does not identify the associated interface; use Interfaces and Interface.Addrs for more detail.

type IPNet
An IPNet represents an IP network.

type IPNet struct {        IP   IP     // network number        Mask IPMask // network mask}
  
  
  
  • 1
  • 2
  • 3
  • 4

type IP

An IP is a single IP address, a slice of bytes. Functions in this package accept either 4-byte (IPv4) or 16-byte (IPv6) slices as input.

Note that in this documentation, referring to an IP address as an IPv4 address or an IPv6 address is a semantic property of the address, not just the length of the byte slice: a 16-byte slice can still be an IPv4 address.

type IP []byte
  
  
  
  • 1

func IPv4

func IPv4(a, b, c, d byte) IP
  
  
  
  • 1

IPv4 returns the IP address (in 16-byte form) of the IPv4 address a.b.c.d.

点到为止,更详细的请看文档:https://golang.org/pkg/net

什么是外网IP和内网IP?

tcp/ip协议中,专门保留了三个IP地址区域作为私有地址,其地址范围如下:
10.0.0.0/8:10.0.0.0~10.255.255.255
172.16.0.0/12:172.16.0.0~172.31.255.255
192.168.0.0/16:192.168.0.0~192.168.255.255

什么是内网IP

一些小型企业或者学校,通常都是申请一个固定的IP地址,然后通过IP共享(IP Sharing),使用整个公司或学校的机器都能够访问互联网。而这些企业或学校的机器使用的IP地址就是内网IP,内网IP是在规划IPv4协议时,考虑到IP地址资源可能不足,就专门为内部网设计私有IP地址(或称之为保留地址),一般常用内网IP地址都是这种形式的:10.X.X.X、172.16.X.X-172.31.X.X、192.168.X.X等。需要注意的是,内网的计算机可向Internet上的其他计算机发送连接请求,但Internet上其他的计算机无法向内网的计算机发送连接请求。我们平时可能在内网机器上搭建过网站或者FTP服务器,而在外网是不能访问该网站和FTP服务器的,原因就在于此。

什么是公网IP

公网IP就是除了保留IP地址以外的IP地址,可以与Internet上的其他计算机随意互相访问。我们通常所说的IP地址,其实就是指的公网IP。互联网上的每台计算机都有一个独立的IP地址,该IP地址唯一确定互联网上的一台计算机。这里的IP地址就是指的公网IP地址。

怎样理解互联网上的每台计算机都有一个唯一的IP地址

其实,互联网上的计算机是通过“公网IP+内网IP”来唯一确定的,就像很多大楼都是201房间一样,房间号可能一样,但是大楼肯定是唯一的。公网IP地址和内网IP地址也是同样,不同企业或学校的机器可能有相同的内网IP地址,但是他们的公网IP地址肯定不同。那么这些企业或学校的计算机是怎样IP地址共享的呢?这就需要使用NAT(Network Address Translation,网络地址转换)功能。当内部计算机要连接互联网时,首先需要通过NAT技术,将内部计算机数据包中有关IP地址的设置都设成NAT主机的公共IP地址,然后再传送到Internet,虽然内部计算机使用的是私有IP地址,但在连接Internet时,就可以通过NAT主机的NAT技术,将内网我IP地址修改为公网IP地址,如此一来,内网计算机就可以向Internet请求数据了。

获取公网ip

百度ip,即可查看公网ip

curl命令查看公网ip

curl ipinfo.io/ip
  
  
  
  • 1

通过http://myexternalip.com/raw获取公网ip

func get_external() string {    resp, err := http.Get("http://myexternalip.com/raw")    if err != nil {        return ""    }    defer resp.Body.Close()    content, _ := ioutil.ReadAll(resp.Body)    //buf := new(bytes.Buffer)    //buf.ReadFrom(resp.Body)    //s := buf.String()    return string(content)}
  
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

获取本地ip

func GetIntranetIp() {    addrs, err := net.InterfaceAddrs()    if err != nil {        fmt.Println(err)        os.Exit(1)    }    for _, address := range addrs {        // 检查ip地址判断是否回环地址        if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {            if ipnet.IP.To4() != nil {                fmt.Println("ip:", ipnet.IP.String())            }        }    }}
  
  
  
  • 1
  • 2
  • 3
  • 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值