如何从golang应用程序ping IP地址?最终目标是检查服务器是否在线。go在标准库中有办法实现网络ping吗?
iq0todco1#
正如@desaipath提到的,在标准库中没有办法做到这一点。但是,您不需要自己编写代码-它已经完成了:https://github.com/tatsushid/go-fastping
deyfvvtc2#
我需要和你一样的东西,我已经为我的Raspberry Pi做了一个解决方案(使用exec.Command)来检查服务器是否在线。下面是实验代码
exec.Command
out, _ := exec.Command("ping", "192.168.0.111", "-c 5", "-i 3", "-w 10").Output() if strings.Contains(string(out), "Destination Host Unreachable") { fmt.Println("TANGO DOWN") } else { fmt.Println("IT'S ALIVEEE") }
rseugnpd3#
虽然不是真实的的ICMP ping,但这是使用TCP协议探测我的服务器的用途:
host := "example.com" port := "80" timeout := time.Duration(1 * time.Second) _, err := net.DialTimeout("tcp", host+":"+port, timeout) if err != nil { fmt.Printf("%s %s %s\n", host, "not responding", err.Error()) } else { fmt.Printf("%s %s %s\n", host, "responding on port:", port) }
fhg3lkii4#
@jpillora的answer建议使用go-fastping,但该库自2016年1月8日以来一直没有更新。这可能不是一个问题,因为ping的逻辑非常简单,但如果你想要一个更新的软件包,那么就有go-ping。
go-fastping
go-ping
ss2ws0br5#
没有
Go没有任何内置的方法来ping标准库中的服务器。你需要自己写代码。您可以查看icmp section of golang library。并使用此控制消息列表,正确构造icmp消息。但是,请记住,一些服务器管理员出于安全原因关闭了他们服务器上的ping服务。所以,如果你的目标是最终检查服务器是否在线,这不是100%可靠的方法.
q1qsirdb6#
package main import ( "fmt" "os/exec" ) func main() { Command := fmt.Sprintf("ping -c 1 10.2.201.174 > /dev/null && echo true || echo false") output, err := exec.Command("/bin/sh", "-c", Command).Output() fmt.Print(string(output)) fmt.Print(err) }
y1aodyip7#
不幸的是,由于缺乏维护人员和访问权限,go-ping库在2023年1月22日之后不再维护。有一个新的活跃维护的分支:pro-bing
7条答案
按热度按时间iq0todco1#
正如@desaipath提到的,在标准库中没有办法做到这一点。但是,您不需要自己编写代码-它已经完成了:
https://github.com/tatsushid/go-fastping
deyfvvtc2#
我需要和你一样的东西,我已经为我的Raspberry Pi做了一个解决方案(使用
exec.Command
)来检查服务器是否在线。下面是实验代码rseugnpd3#
虽然不是真实的的ICMP ping,但这是使用TCP协议探测我的服务器的用途:
fhg3lkii4#
@jpillora的answer建议使用
go-fastping
,但该库自2016年1月8日以来一直没有更新。这可能不是一个问题,因为ping的逻辑非常简单,但如果你想要一个更新的软件包,那么就有go-ping
。ss2ws0br5#
没有
Go没有任何内置的方法来ping标准库中的服务器。你需要自己写代码。
您可以查看icmp section of golang library。并使用此控制消息列表,正确构造icmp消息。
但是,请记住,一些服务器管理员出于安全原因关闭了他们服务器上的ping服务。所以,如果你的目标是最终检查服务器是否在线,这不是100%可靠的方法.
q1qsirdb6#
y1aodyip7#
不幸的是,由于缺乏维护人员和访问权限,go-ping库在2023年1月22日之后不再维护。有一个新的活跃维护的分支:pro-bing