【问题标题】:Host reachability using ping command in C program [duplicate]在 C 程序中使用 ping 命令进行主机可达性 [重复]
【发布时间】:2015-12-07 14:39:50
【问题描述】:

我对 C 环境很陌生。我想编写一个程序,我需要在其中添加一个输入 IP 地址的功能,该功能应该直接告诉我该 IP 地址是否可访问。任何指针? -谢谢

【问题讨论】:

  • 开源之美。 ping source code.
  • 顺便说一句,现在防火墙正在做各种疯狂的过滤,除了尝试建立您需要的准确连接并查看它是否成功之外,没有任何方法是真正可靠的。

标签: c ip ip-address ping


【解决方案1】:

您想使用与实际ping 命令相同的方法,还是更简单的方法?如果您想要更简单的东西,只需尝试使用随机端口号与系统建立 TCP 连接,如果系统不可访问或可访问但没有人在该端口上侦听(或者您得到一个连接,然后您立即关闭)。

如果使用 TCP 连接,您可能会遇到很长(几秒)的超时,因为 TCP 会尝试并重试连接。此外,如果系统可访问,则此类探测可能会被视为入侵尝试,而 ping(ICMP 回显请求)则不会。

另一个需要注意的是,TCP 连接尝试和 ICMP 回显请求都可能在从您的系统到远程系统的任何位置被防火墙阻止。

【讨论】:

    【解决方案2】:

    好吧,我发现了问题所在,这与我的 linux 风格有关。通常它应该在一定时间后检查超时事件,但在我的机器上我需要明确提及它。

    嗯,我想出了问题所在。显然,对于少数版本的 linux,您需要明确提及 -w filer。所以我的解决方案是:

    Well, I figured what was the issue. Apparently for few flavors of linux you need to explicitly mention -w filer. so my solution is :
    
    if ( system("ping -c1 128.205.159.60 -w 2 ") == 0)
        {
            printf ("\n Exists");
        }
        else
        {   printf ("\n Not reachable ");
        }
    

    感谢大家的意见。 :)

    【讨论】:

    • 这是最糟糕的“解决方案”。您不会在没有strong 需要的情况下生成外部工具——它会产生各种问题(取决于工具的存在,以及在您的情况下,正确的$PATH 设置)并且在分叉等方面浪费资源。
    • @FelixPalmen:能否请您提供背后的原因。我是这个领域的新手,所以我可以从中学习。
    • 抱歉,刚刚决定添加一些推理 - 至少,您必须检查 system() 的返回值以获取 -1 以捕获尝试执行 ping 失败的情况。最好只在您的代码中执行 ICMP 回显请求。
    • 哦,好的。我会努力解决的。感谢您分享此信息。我将研究 ICMP 回显请求并尝试处理它的返回码。
    猜你喜欢
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 2011-07-18
    • 2023-03-23
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 2011-06-15
    相关资源
    最近更新 更多