我正在制作一个小项目,我需要不断检查网络上的计算机状态,确定它们是在网络上还是在网络上还是在特定时间,并且我想使用C语言执行此操作(没有第三个派对工具)。我是全新的,在网上搜索,发现我可以ping
目的地检查它是否还活着,所以我的问题是
1)我可以从ping
获得任何返回值,以便我可以根据目标计算机的返回值在主机端触发值吗?
2)ping
是一个很好的方法吗?
如果你们有任何其他建议,那么分享它。
答案 0 :(得分:1)
1)否。
2)可能没有。
听起来你想要的是某种“Heartbeat”协议(最近被OpenSSL漏洞“Heartbleed”臭名昭着)。 http://en.wikipedia.org/wiki/Heartbeat_%28computing%29
Heartbeat协议本质上是一种协议,可以为您提供有关远程计算机的某些“状态”。这实际上告诉您有关计算机的信息取决于协议的实现方式。如果您是自己编写的,那么完全取决于您返回的内容。
ping
CLI函数是ICMP Echo Request
数据包的简单包装器。它会告诉您计算机是否能够使用ICMP Echo Reply
数据包进行回复,这就是它可以告诉您的全部内容。 (有关ICMP
http://en.wikipedia.org/wiki/Internet_Control_Message_Protocol)
ping
无法为您提供任何更具描述性的返回值,因此可能不是您想要使用的。
如果您想从远程节点获取一些实际数据,您可能希望实现一个非常小的程序,该程序将侦听远程节点上的某个端口。这个程序可以实现Heartbeat协议,并返回你想要的任何值。
例如,您可以创建一个小程序来监听TCP
端口5555
上的传入连接,如果它收到连接,它会发回系统上某个文件的内容,或当前时间,或任何事情。
但是要小心,运行程序监听计算机上的端口本身就是危险要做的事情,如果你不小心,你将打开远程系统进行恶意攻击
答案 1 :(得分:0)
Ping只是说机器还活着。它不提供在PC上运行的应用程序或服务的状态。在Windows中,有WMI可用于监控系统状态,服务和状态。应用。与此类似,linux有openLMI来监控系统事件。