golang例子 - 获取主机名和IP地址的教程

1,867 阅读3分钟

Golang net软件包

主机名是分配给机器网络中的一台机器的标签。Golang标准包net 提供了与TCP/IP、UDP和DNS相关的网络相关功能。

下面是与Go语言中的主机名和IP地址有关的各种例子。

如何获得系统环境的主机名?

了解Go程序运行环境的hostname ,总是很好的。标准包内置的os ,提供了hostname ,该功能提供了环境的hostname 。你可以在这里查看更多信息
以下是函数hostname的语法

func Hostname() (name string, error error)  

它返回

  • name - hostname,如果不存在错误,则返回nil。例如,如果你在一个名为 "system1 "的系统上运行,os.Hostname() ,函数的输出结果为 "system1"。

下面是一个查找系统主机名的例子

package main  
  
import (  
 "fmt"  
 "os"  
)  
  
func main() {  
 hostname, error := os.Hostname()  
 if error != nil {  
  panic(error)  
 }  
 fmt.Println("hostname returned from Environment : ", hostname)  
 fmt.Println("error : ", error)  
  
}  

输出是

hostname returned from Environment :  DESKTOP-47884kl  
error :    

如何检查一个字符串是否包含IP地址或主机名或域名?

这个程序是为了检查一个给定的字符串是IP address 还是hostname

net包提供了ParseIP()函数用于检查格式为IPV4 (192.134.1.12)和IPV6 (1111:ca7::57)的IP地址。

下面是ParseIP() 函数的语法

func ParseIP(s string) IP  

如果给定的字符串不是有效的IP地址表示,它返回nil。

下面是一个检查给定字符串的主机名或IP地址的程序

package main  
  
import (  
 "fmt"  
 "net"  
)  
  
func checkStringForIpOrHostname(host string) {  
 addr := net.ParseIP(host)  
 if addr == nil {  
  fmt.Println("Given String is a Domain Name")  
  
 } else {  
  fmt.Println("Given String is a Ip Address")  
 }  
}  
func main() {  
 checkStringForIpOrHostname("google.com")  
 checkStringForIpOrHostname("192.168.1.0")  
  
}  

输出:

Given String is a Domain Name  
Given String is a Ip Address 

如何从一个给定的URL中获得域名?

通常,我们需要从给定的URL中检查域名。

例如,如果URL是mydomain.com/category/mypage.html,域名应该返回mydomain.com。

URL 提供了一个函数parse() 检查URL并返回URL实例。HostnameURL 实例返回主机名。

这里是parse函数的语法

func Parse(rawurl string) (*URL, error) 

它接收rawurl作为输入字符串,返回URL实例和错误对象。

package main  
  
import (  
 "fmt"  
 "net/url"  
)  
  
func main() {  
 urlInstance, error := url.Parse("https://mydomain.com/category/mypage.html")  
 if error != nil {  
  fmt.Println(error)  
 }  
 fmt.Println(urlInstance.Hostname())  
}  

输出是

mydomain.com  

如何获得本地机器的完全合格的域名--FQDN?

没有直接的库来获取一个机器的FQDN 。有一个基于操作系统和网络包的自定义包装库github.com/Showmax/go-…。首先使用下面的命令安装这个库

 go get github.com/Showmax/go-fqdn 

如果fqdn存在,下面的程序将返回完全合格的域名,否则返回未知。

package main  
  
import (  
 "fmt"  
  
 fqdn "github.com/Showmax/go-fqdn"  
)  
  
func main() {  
 fmt.Println(fqdn.Get())  
}  

输出是

DESKTOP-968A6TP  

如何获得一个系统的本地IP地址?

net 软件包提供了Dial 功能,可以连接到指定网络的目标地址。UDP是一个不需要像TCP那样的物理连接的协议,目标不会连接它。

package main  
  
import (  
 "fmt"  
 "net"  
)  
  
func main() {  
 conn, error := net.Dial("udp", "8.8.8.8:80")  
 if error != nil {  
  fmt.Println(error)  
  
 }  
  
 defer conn.Close()  
 ipAddress := conn.LocalAddr().(*net.UDPAddr)  
 fmt.Println(ipAddress)  
}  

输出是

192.168.1.102:49703  

总结

在本教程中,你学到了如何在Go语言中获得域名、限定域名和系统的IP地址。