LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 678|回复: 6

检测主机是否开机

[复制链接]
发表于 2004-4-15 11:55:30 | 显示全部楼层 |阅读模式
用ping来判断,可是发现建立socket的时候必须有root权限才行

sd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);

就是这一句需要有root权限,请问要怎么才能在普通用户下实现用ping来判断主机是否开机。
发表于 2004-4-15 13:38:50 | 显示全部楼层
chmod go+rx a.out ??
发表于 2004-4-15 16:45:52 | 显示全部楼层
楼主做什么应用需要判断对方是否开机?一般来说你的client端连不上,那server端就没开机或服务程序有问题

如果对方是生产用的服务器的话,一般都会封ping端口的,开机了你也得不到回答
 楼主| 发表于 2004-4-15 17:04:43 | 显示全部楼层
是为了画网络拓扑图用的,现在是做得我头都大了,支持snmp协议的机器能测出来,可是不支持的,我就无法画图了,没有办法所以使用ping的方法来测一次。

还有就是要得到机器的名字,这也特别的麻烦,我用gethostbyaddr结果一般返回的都是找不到名字。

另外再问一下如何才能检测出网段里的所有switch。

各位有什么好办法能解决这个问题?谢谢谢谢了!
发表于 2004-4-15 17:23:02 | 显示全部楼层
创建原始套接口需要有root权限
这是/bin/ping为suid程序的原因,这当然可能会造成安全问题,比如redhat7上的ping溢出
另:ping是没有端口概念的,ping是icmp,不属于tcp或udp,当然不存在端口一说。
发表于 2004-5-22 02:58:30 | 显示全部楼层

回复: 检测主机是否开机

最初由 非飞 发表
用ping来判断,可是发现建立socket的时候必须有root权限才行

sd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);

就是这一句需要有root权限,请问要怎么才能在普通用户下实现用ping来判断主机是否开机。


普通用户也能ping!! 我的是0555.
发表于 2004-5-23 01:28:25 | 显示全部楼层
“还有就是要得到机器的名字,这也特别的麻烦,我用gethostbyaddr结果一般返回的都是找不到名字。”
gethostbyaddr查的是DNS,如果DNS上没有的话就查不到了,这时候只有它自己知道自己叫什么。

你说的“检测主机是否开机”和“画网络拓扑图”应该是两个问题
你也可以试试nmap,直接扫描网段看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表