【问题标题】:Alternative to ping [closed]ping的替代方案[关闭]
【发布时间】:2013-04-04 06:52:17
【问题描述】:

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

curl 是个好选择吗?

【问题讨论】:

标签: linux unix amazon-ec2 ping network-tools


【解决方案1】:

如果你可以ssh 就可以了。使用nc 进行检查的一种简单方法是: nc -zv 111.222.333.444 22 (将 111.222.333.444 替换为您的实例的 ip 地址)

【讨论】:

  • 谢谢,netcat和ping有什么区别?此外,上述命令在当前格式下也不起作用。
  • 该命令运行良好,我在发布之前对其进行了测试。你得到什么错误?
  • @LarsHansson 来自 docker 容器,我必须在本地执行 nc mysql,是否需要将示例中的端口替换为 3306?
【解决方案2】:

如果服务器已启动且 Web 服务器守护程序已关闭,CURL 将无法快速检查。一种替代方法是使用hping3 之类的工具发送 TCP ACK。如果您获得 RST,则服务器已启动。

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

您可以先尝试 CURL 测试,如果失败,请尝试第二种方法来确认服务器已关闭,而不仅仅是 Web 服务器守护程序。

这种方法的问题是这样的杂散 TCP 数据包可能会被中间代理过滤。

【讨论】:

  • 当然可以。如果 Web 服务器守护程序关闭,该框将回复 TCP RST 或根本没有回复(这将被超时捕获)。无论如何,如果在指定时间内没有回复curl就会知道。
  • 好的,没错。使用 hping3 获得 RST 比等待指数 SYN 重传回退到超时要快得多。比较 curl 与 hping 测试的各种测试(不存在的主机、关闭的主机、关闭的端口等)。它通常更快。
【解决方案3】:

我认为curl 正是您想要的。像所有表现良好的 unix 程序一样,如果出现任何问题,它会返回错误代码:

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

您也可能想使用--connect-timeout 来确保它不会永远等待。

【讨论】:

  • 谢谢,我会用的。出于好奇,6 作为错误代码是什么意思?
  • @David542 这是curl-特定的。每个程序都选择返回什么,并且几乎没有标准化。如果你真的很感兴趣,你可以寻找一个名为sysexits.h 的标题。然而,手册页确实解释了退出代码。
  • 来自 curl 手册页:6 Couldn't resolve host. The given remote host was not resolved.
  • @dschulz 就是这样。不为 0 的所有内容都是错误,这可能是 OP 所追求的。
  • 你是对的@cnicutar。我也对 6 很好奇,然后去尝试 man curl 然后 /EXIT CODES :-)
猜你喜欢
  • 2012-10-08
  • 2010-10-11
  • 2017-03-23
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多