替代ping的方法

17

我想知道亚马逊EC2实例是否开启,但默认情况下亚马逊EC2会阻止ping请求。有一种方法可以通过更改实例的安全策略来实现此目的。除此之外,最接近“查看服务器是否响应”且轻量级的替代方案是什么?

curl 是一个好选择吗?


如果您从谷歌搜索进入此处,请尝试使用Bash套接字打开端口。https://dev59.com/q2445IYBdhLWcg3wssTH#4743398 - nelaaro
3个回答

18

我认为curl就是你想要的。像所有行为良好的Unix程序一样,如果出现任何问题,它将返回一个错误代码:

[cnicutar@ariel ~]$ curl www.no-such-website.com
[cnicutar@ariel ~]$ echo $?
6

另外你可能想使用--connect-timeout来确保它不会永远等待。


谢谢,我会使用它。顺便问一下,“6”作为错误代码是什么意思? - David542
@David542 这是针对 curl 的。每个程序都可以选择返回什么,而且很少有标准化的规定。如果你真的感兴趣,可以查找一个名为 sysexits.h 的头文件。不过手册页面确实解释了退出代码。 - cnicutar
6 无法解析主机。给定的远程主机未被解析。 - dschulz
@dschulz那么就是这样了。所有非0的都是错误,这正是OP想要的。 - cnicutar
你是对的@cnicutar。我只是太好奇了6,然后去尝试man curl然后/EXIT CODES :-) - dschulz
@dschulz 我早先也查找了,但没能立刻找到,然后耍赖说:“我肯定它在那儿”。 - cnicutar

5

CURL无法快速检查服务器是否正常工作,以及Web服务器守护程序是否关闭。一种替代方法是使用像hping3这样的工具发送TCP ACK。如果收到RST,则表示服务器正常运行。

hping3 -c 1 -V -p 80 -s 5050 -A example.fqdn

你可以先尝试CURL测试,如果失败了再尝试第二种方法来确认是服务器宕机还是仅仅是网页服务器挂了。
使用这种方法的问题在于中间代理可能会过滤掉类似这样的TCP数据包。

肯定会起作用。如果Web服务器守护程序关闭,该框将回复TCP RST或根本不回复(这将被超时捕获)。无论如何,如果在指定的时间内没有响应,curl都会知道。 - cnicutar
好的,没错。使用hping3获取RST比等待指数级别的SYN重传退避超时要快得多。对于各种测试(不存在的主机、关闭的主机、关闭的端口等),将curl与hping测试进行比较。通常来说,后者更快。 - jman

5

如果您可以通过ssh连接到它,那么它就是正常的。一个使用nc进行检查的简单方法是: nc -zv 111.222.333.444 22 (将111.222.333.444替换为您实例的IP地址)


谢谢,netcat和ping有什么区别?此外,上述命令在当前格式下无法工作。 - David542
这个命令运行正常,我在发布之前已经测试过了。你遇到了什么错误? - Lars Hansson
@LarsHansson,我需要在本地执行nc mysql,但是我需要根据你的示例将端口替换为3306吗? - pm1359

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接