【问题标题】:How to check if a given ip address is reachable in C program如何在C程序中检查给定的IP地址是否可达
【发布时间】:2011-11-30 15:00:25
【问题描述】:

我需要一个 C 程序来检查用户给定的 ip 地址(ipv4 和 ipv6)是否可访问。我不知道端口号。所以我无法连接和检查。该功能或多或少类似于 ping。除了我不想使用 ping 因为涉及的开销。

【问题讨论】:

  • 什么开销???
  • 与系统调用一起创建的独立进程
  • ...但是在您启动程序的任何时候都会发生这种情况。没有区别。我回答的问题与您提出的问题不同(我回答了我认为您要问的问题),但是对于您的措辞方式,请使用 ping。

标签: c sockets networking ip ping


【解决方案1】:

您需要创建一个原始套接字,然后构造一个 ICMP 数据包并将其发送到您的目的地。

http://courses.cs.vt.edu/~cs4254/fall04/slides/raw_6.pdf

【讨论】:

  • 我不应该知道我要连接的端口吗?
  • 您阅读链接了吗?你了解什么是原始套接字吗?
  • 是的。抱歉,马上实施
  • 请注意,您想要做的事情——在没有考虑特定服务的情况下检查给定的 IP 地址是否“可用”——不是任何程度的可靠性都可以做的事情。系统提供服务但不响应 ping 或任何其他连接尝试是很常见的。换句话说,仅仅因为您没有收到对 ICMP 回显请求的回复并不能告诉您任何有关远程服务器可用性的信息,除非您事先知道它应该响应 ICMP 回显请求。
  • 是的......这是一个wiiiiide领域! ;-) 在这里nmap.org 查找具有智能解决方案的站点 - 进一步阅读在这里nmap.org/book/toc.html
【解决方案2】:

拥有可访问的主机并不意味着您将能够从中获得服务。最好的办法是尝试连接到正确的端口号。你到底想达到什么目的?

此外,虽然 ICMP 是一种聪明的方法,但如果主机有防火墙禁用 ICMP,它可能无法正常工作。在这种情况下,您将不会得到任何响应。

【讨论】:

  • 没错。要查看资源是否可用,请尝试使用该资源。不要尝试提前猜测,您只是引入了时间窗口,而不必执行相同的路径。跨度>
猜你喜欢
  • 1970-01-01
  • 2020-01-28
  • 2021-06-20
  • 2017-05-28
  • 1970-01-01
  • 2017-10-30
  • 2013-08-22
  • 2010-12-02
  • 2012-01-25
相关资源
最近更新 更多