Solaris 下非root用户不能使用ping命令怎么办???

时间:2022-01-01 06:39:06
如题。
我们的项目中没有使用root用户登录。
现在要在shell程序中使用ping命令去检测网络连通性,该怎么办?

求大师指点!!!

36 个解决方案

#1


setuid吧 linux下的ping命令都是这样的。
#ll /bin/ping
-rwsr-xr-x 1 root root 35832  9月 27  2009 /bin/ping

做法
chmod a+x /path/ping
chmod u+s /path/ping

#2


我在sun环境中,普通用户怎么能用ping呢
是不是你没有设置ping的搜索路径?我的是/usr/sbin/ping

#3


引用 2 楼 justkk 的回复:
我在sun环境中,普通用户怎么能用ping呢
是不是你没有设置ping的搜索路径?我的是/usr/sbin/ping

我的solaris跟你一样 也可以用  但是权限也是-r-sr-xr-x
因为原始套接字只有root才有权限的

#4


改了以后权限是-r-sr-xr-x,还不能用
引用 3 楼 steptodream 的回复:
引用 2 楼 justkk 的回复:

我在sun环境中,普通用户怎么能用ping呢
是不是你没有设置ping的搜索路径?我的是/usr/sbin/ping

我的solaris跟你一样 也可以用  但是权限也是-r-sr-xr-x
因为原始套接字只有root才有权限的

#5


如何不能用??
有什么提示啊?

#6


我的虚拟机突然ping不通外面 但是外面可以ping通里面,也可以从外面ftp,telnet连到虚拟机,这是为什么。。。。
引用 5 楼 justkk 的回复:
如何不能用??
有什么提示啊?

#7


我的虚拟机突然ping不通外面 但是外面可以ping通里面,也可以从外面ftp,telnet连到虚拟机,这是为什么。。。。
---------------------
这不一定是ping命令不好用哦。如果是你没权限用ping的 肯定会提示错误。
你设置防火墙之类的了吗?你的windows有防火墙?
试试 ping 8.8.8.8
试试 traceroute 外面ip

#8


ping 8.8.8.8 不行
traceroute  10.16.1.224   这个30hops max 40 byte packets
什么意思?
引用 7 楼 steptodream 的回复:
我的虚拟机突然ping不通外面 但是外面可以ping通里面,也可以从外面ftp,telnet连到虚拟机,这是为什么。。。。
---------------------
这不一定是ping命令不好用哦。如果是你没权限用ping的 肯定会提示错误。
你设置防火墙之类的了吗?你的windows有防火墙?
试试 ping 8.8.8.8
试试 traceroute 外面ip

#9


traceroute 10.16.1.224 这个30hops max 40 byte packets
----------------------
然后就没反应了吗?看来到10.16.1.224也不通。这个是你的gataway?

#10


也可以从外面ftp,telnet连到虚拟机
--------------
你把外面的这个机器的防火墙设置无效 然后再从虚拟机里ping一下。

#11


哦 然后有  1 10.16.11.13(10.16.11.13) 0.513ms 0.307ms  10.16.1.224(10.16.1.224) 0.376ms
引用 9 楼 steptodream 的回复:
traceroute 10.16.1.224 这个30hops max 40 byte packets
----------------------
然后就没反应了吗?看来到10.16.1.224也不通。这个是你的gataway?

#12


可以ping通外面了 
但是用ping -w  说-w 是illegal option,我们之前版本都是用-w来检查的。 
引用 10 楼 steptodream 的回复:
也可以从外面ftp,telnet连到虚拟机
--------------
你把外面的这个机器的防火墙设置无效 然后再从虚拟机里ping一下。

#13


可以ping通外面了 
但是用ping -w 说-w 是illegal option,我们之前版本都是用-w来检查的。  
-----------------
说明你的solaris的ping命令 没有-w选项。

#14


windows下的ping
-w timeout 设置timeout的秒数

我的linux下
-w waittime 设置ping的时间 时间到了 ping结束

似乎意思不一样

solaris下 如果你要设置timeout时间的话 直接这样ping ip/host timout

#15


那要怎么测试连通性?
刚才试了一下只用ping 10.16.1.XXX
然后运行的时候竟然要我输入密码。。。
引用 13 楼 steptodream 的回复:
可以ping通外面了 
但是用ping -w 说-w 是illegal option,我们之前版本都是用-w来检查的。  
-----------------
说明你的solaris的ping命令 没有-w选项。

#16


windows的那个说错了 应该是毫秒。

那要怎么测试连通性?
刚才试了一下只用ping 10.16.1.XXX
然后运行的时候竟然要我输入密码。。。
--------------------
让你输入root密码?

#17


不是很清楚 
  echo "here is ping"
  $PING $FTPSERVERIP >/dev/null
  echo "end of ping"
运行的时候是这样:
here is ping
end of ping
Password: 

不清楚是要输入什么密码。。。
引用 16 楼 steptodream 的回复:
windows的那个说错了 应该是毫秒。

那要怎么测试连通性?
刚才试了一下只用ping 10.16.1.XXX
然后运行的时候竟然要我输入密码。。。
--------------------
让你输入root密码?

#18


不是很清楚 
  echo "here is ping"
  $PING $FTPSERVERIP >/dev/null
  echo "end of ping"
运行的时候是这样:
here is ping
end of ping
Password:  
-----------------------------
代码已经执行到后面了 出现Password: 跟ping已经没关了(不信你先把>/dev/null去掉 就能看到ping的输出)  不知道你后面的代码是什么

#19


那个在代码里就这么写?
ping 10.16.1.224/host timout

host timout是什么意思呢 ?
引用 14 楼 steptodream 的回复:
windows下的ping
-w timeout 设置timeout的秒数

我的linux下
-w waittime 设置ping的时间 时间到了 ping结束

似乎意思不一样

solaris下 如果你要设置timeout时间的话 直接这样ping ip/host timout

#20


那个在代码里就这么写?
ping 10.16.1.224/host timout
-----------------------------
你理解错我的意思了
ping ip/host timout 的意思是ping ip或者host timeout
ping ip 比如ping 8.8.8.8
ping host 比如www.yahoo.co.jp
timeout是超时间隔

#21


因为ping既可以针对ip 也可以针对主机名 所以我写成ping ip/host

#22


不是很清楚 
  echo "here is ping"
  $PING $FTPSERVERIP >/dev/null
  echo "end of ping"
运行的时候是这样:
here is ping
end of ping
Password:  
-----------------------
我猜测一下 你是不是在判断ftp服务器时否能ping通 如果能ping通你就登录ftp把
1.那你$PING $FTPSERVERIP >/dev/null 这样 后面根本没有判断是否ping通了啊
2.出现Password:   估计你的ftp部分代码没加自动登录自动交互的参数-n和-i  所以是在让你输入密码了

#23


哦 这个知道
我能继续问别的问题不啊?

那个输入密码的提示是ftp那里产生的
result=`ftp -n $IP $PORT<< EOF 
user $USERNAME $USERPWD
by
EOF`
这里为什么会提示输入密码呢?以前的就没有。。。。
引用 21 楼 steptodream 的回复:
因为ping既可以针对ip 也可以针对主机名 所以我写成ping ip/host

#24


1.$PING $FTPSERVERIP >/dev/null  这个后面怎么判断啊?
2.result=`ftp -n $IP $PORT<< EOF  
user $USERNAME $USERPWD
by
EOF`
有-n的参数啊
引用 22 楼 steptodream 的回复:
不是很清楚 
  echo "here is ping"
  $PING $FTPSERVERIP >/dev/null
  echo "end of ping"
运行的时候是这样:
here is ping
end of ping
Password:  
-----------------------
我猜测一下 你是不是在判断ftp服务器时否能ping通 如果能ping通你……

#25


你的命令写错啦
正确的是bye 你写出by了!

#26


不过又想了一下 是不是你的
$USERNAME和$USERPW为空?

#27


引用 25 楼 steptodream 的回复:
你的命令写错啦
正确的是bye 你写出by了!

这个是我说错了  by也是可以的

#28


之前都用的是by啊 得是Solaris和sude这个地方不一样。。。我改改试试
引用 25 楼 steptodream 的回复:
你的命令写错啦
正确的是bye 你写出by了!

#29


引用 28 楼 stefway 的回复:
之前都用的是by啊 得是Solaris和sude这个地方不一样。。。我改改试试
引用 25 楼 steptodream 的回复:

你的命令写错啦
正确的是bye 你写出by了!

这个我说错了  然你输入密码 可能是因为你的$USERNAME $USERPWD为空了

#30


该回复于2010-09-21 14:22:52被版主删除

#31


哦 发现了 之前解密的密码没解密出来 密码是空的  谢谢了 我在看看
引用 29 楼 steptodream 的回复:
引用 28 楼 stefway 的回复:

之前都用的是by啊 得是Solaris和sude这个地方不一样。。。我改改试试
引用 25 楼 steptodream 的回复:

你的命令写错啦
正确的是bye 你写出by了!

这个我说错了  然你输入密码 可能是因为你的$USERNAME $USERPWD为空了

#32


能帮我再看看下面这段代码哪里出错了吗? 
我怀疑Solaris下awk用法的问题
$FTPDIR和$filedir都是有值的,这个我前面输出过。
ftp -n $IP $PORT << EOF | $AWK '{print $0"/'$filedir'"}' >> ${FILELIST}
user $USERNAME $USERPWD
cd $FTPDIR/$filedir
ls -l
by
EOF
这里面就没有得到指定文件下的文件信息。${FILELIST}执行完是空的
引用 29 楼 steptodream 的回复:
引用 28 楼 stefway 的回复:

之前都用的是by啊 得是Solaris和sude这个地方不一样。。。我改改试试
引用 25 楼 steptodream 的回复:

你的命令写错啦
正确的是bye 你写出by了!

这个我说错了  然你输入密码 可能是因为你的$USERNAME $USERPWD为空了

#33


你这个脚本 在我这里加一句 就正常执行了 我这个passiv默认是off的 需要输入passiv就可以了
另外你要确认你的每个变量都不为空
ftp -n $IP $PORT << EOF | $AWK '{print $0"/'$filedir'"}' >> ${FILELIST}
user $USERNAME $USERPWD
passiv
cd $FTPDIR/$filedir
ls -l
by
EOF

#34


又有一行包这个错误。。。
`do^M' unexpected
什么意思啊?


那段代码是这样

for filedir in $FILEDIRS
do
if [ "$PORT" = "" ];then     -----出错行
 PORT=21
fi
ftp -n $IP $PORT << EOF | $AWK '{print $0"/'$filedir'"}' >> ${FILELIST}
user $USERNAME $USERPWD
cd $FTPDIR/$filedir
ls -l
by
EOF
done
引用 33 楼 steptodream 的回复:
你这个脚本 在我这里加一句 就正常执行了 我这个passiv默认是off的 需要输入passiv就可以了
另外你要确认你的每个变量都不为空
ftp -n $IP $PORT << EOF | $AWK '{print $0"/'$filedir'"}' >> ${FILELIST}
user $USERNAME $USERPWD
passiv
cd $FTPDIR/$filedir
……

#35


哦的神啊 ..
让主席休息一下..
那是因为你的脚本是dos格式的
使用dos2unix转换一下试试

#36


又有一行包这个错误。。。
`do^M' unexpected
什么意思啊?


那段代码是这样

for filedir in $FILEDIRS
do
if [ "$PORT" = "" ];then -----出错行
------------------
你是不是在windows下写的脚本? 应该是在do后面多了^M  dos下的换行在linux/Unix下经常变成^M
你执行一下
dos2unix 你的脚本

要是不行 你就删掉do那行 在手工添上

#1


setuid吧 linux下的ping命令都是这样的。
#ll /bin/ping
-rwsr-xr-x 1 root root 35832  9月 27  2009 /bin/ping

做法
chmod a+x /path/ping
chmod u+s /path/ping

#2


我在sun环境中,普通用户怎么能用ping呢
是不是你没有设置ping的搜索路径?我的是/usr/sbin/ping

#3


引用 2 楼 justkk 的回复:
我在sun环境中,普通用户怎么能用ping呢
是不是你没有设置ping的搜索路径?我的是/usr/sbin/ping

我的solaris跟你一样 也可以用  但是权限也是-r-sr-xr-x
因为原始套接字只有root才有权限的

#4


改了以后权限是-r-sr-xr-x,还不能用
引用 3 楼 steptodream 的回复:
引用 2 楼 justkk 的回复:

我在sun环境中,普通用户怎么能用ping呢
是不是你没有设置ping的搜索路径?我的是/usr/sbin/ping

我的solaris跟你一样 也可以用  但是权限也是-r-sr-xr-x
因为原始套接字只有root才有权限的

#5


如何不能用??
有什么提示啊?

#6


我的虚拟机突然ping不通外面 但是外面可以ping通里面,也可以从外面ftp,telnet连到虚拟机,这是为什么。。。。
引用 5 楼 justkk 的回复:
如何不能用??
有什么提示啊?

#7


我的虚拟机突然ping不通外面 但是外面可以ping通里面,也可以从外面ftp,telnet连到虚拟机,这是为什么。。。。
---------------------
这不一定是ping命令不好用哦。如果是你没权限用ping的 肯定会提示错误。
你设置防火墙之类的了吗?你的windows有防火墙?
试试 ping 8.8.8.8
试试 traceroute 外面ip

#8


ping 8.8.8.8 不行
traceroute  10.16.1.224   这个30hops max 40 byte packets
什么意思?
引用 7 楼 steptodream 的回复:
我的虚拟机突然ping不通外面 但是外面可以ping通里面,也可以从外面ftp,telnet连到虚拟机,这是为什么。。。。
---------------------
这不一定是ping命令不好用哦。如果是你没权限用ping的 肯定会提示错误。
你设置防火墙之类的了吗?你的windows有防火墙?
试试 ping 8.8.8.8
试试 traceroute 外面ip

#9


traceroute 10.16.1.224 这个30hops max 40 byte packets
----------------------
然后就没反应了吗?看来到10.16.1.224也不通。这个是你的gataway?

#10


也可以从外面ftp,telnet连到虚拟机
--------------
你把外面的这个机器的防火墙设置无效 然后再从虚拟机里ping一下。

#11


哦 然后有  1 10.16.11.13(10.16.11.13) 0.513ms 0.307ms  10.16.1.224(10.16.1.224) 0.376ms
引用 9 楼 steptodream 的回复:
traceroute 10.16.1.224 这个30hops max 40 byte packets
----------------------
然后就没反应了吗?看来到10.16.1.224也不通。这个是你的gataway?

#12


可以ping通外面了 
但是用ping -w  说-w 是illegal option,我们之前版本都是用-w来检查的。 
引用 10 楼 steptodream 的回复:
也可以从外面ftp,telnet连到虚拟机
--------------
你把外面的这个机器的防火墙设置无效 然后再从虚拟机里ping一下。

#13


可以ping通外面了 
但是用ping -w 说-w 是illegal option,我们之前版本都是用-w来检查的。  
-----------------
说明你的solaris的ping命令 没有-w选项。

#14


windows下的ping
-w timeout 设置timeout的秒数

我的linux下
-w waittime 设置ping的时间 时间到了 ping结束

似乎意思不一样

solaris下 如果你要设置timeout时间的话 直接这样ping ip/host timout

#15


那要怎么测试连通性?
刚才试了一下只用ping 10.16.1.XXX
然后运行的时候竟然要我输入密码。。。
引用 13 楼 steptodream 的回复:
可以ping通外面了 
但是用ping -w 说-w 是illegal option,我们之前版本都是用-w来检查的。  
-----------------
说明你的solaris的ping命令 没有-w选项。

#16


windows的那个说错了 应该是毫秒。

那要怎么测试连通性?
刚才试了一下只用ping 10.16.1.XXX
然后运行的时候竟然要我输入密码。。。
--------------------
让你输入root密码?

#17


不是很清楚 
  echo "here is ping"
  $PING $FTPSERVERIP >/dev/null
  echo "end of ping"
运行的时候是这样:
here is ping
end of ping
Password: 

不清楚是要输入什么密码。。。
引用 16 楼 steptodream 的回复:
windows的那个说错了 应该是毫秒。

那要怎么测试连通性?
刚才试了一下只用ping 10.16.1.XXX
然后运行的时候竟然要我输入密码。。。
--------------------
让你输入root密码?

#18


不是很清楚 
  echo "here is ping"
  $PING $FTPSERVERIP >/dev/null
  echo "end of ping"
运行的时候是这样:
here is ping
end of ping
Password:  
-----------------------------
代码已经执行到后面了 出现Password: 跟ping已经没关了(不信你先把>/dev/null去掉 就能看到ping的输出)  不知道你后面的代码是什么

#19


那个在代码里就这么写?
ping 10.16.1.224/host timout

host timout是什么意思呢 ?
引用 14 楼 steptodream 的回复:
windows下的ping
-w timeout 设置timeout的秒数

我的linux下
-w waittime 设置ping的时间 时间到了 ping结束

似乎意思不一样

solaris下 如果你要设置timeout时间的话 直接这样ping ip/host timout

#20


那个在代码里就这么写?
ping 10.16.1.224/host timout
-----------------------------
你理解错我的意思了
ping ip/host timout 的意思是ping ip或者host timeout
ping ip 比如ping 8.8.8.8
ping host 比如www.yahoo.co.jp
timeout是超时间隔

#21


因为ping既可以针对ip 也可以针对主机名 所以我写成ping ip/host

#22


不是很清楚 
  echo "here is ping"
  $PING $FTPSERVERIP >/dev/null
  echo "end of ping"
运行的时候是这样:
here is ping
end of ping
Password:  
-----------------------
我猜测一下 你是不是在判断ftp服务器时否能ping通 如果能ping通你就登录ftp把
1.那你$PING $FTPSERVERIP >/dev/null 这样 后面根本没有判断是否ping通了啊
2.出现Password:   估计你的ftp部分代码没加自动登录自动交互的参数-n和-i  所以是在让你输入密码了

#23


哦 这个知道
我能继续问别的问题不啊?

那个输入密码的提示是ftp那里产生的
result=`ftp -n $IP $PORT<< EOF 
user $USERNAME $USERPWD
by
EOF`
这里为什么会提示输入密码呢?以前的就没有。。。。
引用 21 楼 steptodream 的回复:
因为ping既可以针对ip 也可以针对主机名 所以我写成ping ip/host

#24


1.$PING $FTPSERVERIP >/dev/null  这个后面怎么判断啊?
2.result=`ftp -n $IP $PORT<< EOF  
user $USERNAME $USERPWD
by
EOF`
有-n的参数啊
引用 22 楼 steptodream 的回复:
不是很清楚 
  echo "here is ping"
  $PING $FTPSERVERIP >/dev/null
  echo "end of ping"
运行的时候是这样:
here is ping
end of ping
Password:  
-----------------------
我猜测一下 你是不是在判断ftp服务器时否能ping通 如果能ping通你……

#25


你的命令写错啦
正确的是bye 你写出by了!

#26


不过又想了一下 是不是你的
$USERNAME和$USERPW为空?

#27


引用 25 楼 steptodream 的回复:
你的命令写错啦
正确的是bye 你写出by了!

这个是我说错了  by也是可以的

#28


之前都用的是by啊 得是Solaris和sude这个地方不一样。。。我改改试试
引用 25 楼 steptodream 的回复:
你的命令写错啦
正确的是bye 你写出by了!

#29


引用 28 楼 stefway 的回复:
之前都用的是by啊 得是Solaris和sude这个地方不一样。。。我改改试试
引用 25 楼 steptodream 的回复:

你的命令写错啦
正确的是bye 你写出by了!

这个我说错了  然你输入密码 可能是因为你的$USERNAME $USERPWD为空了

#30


该回复于2010-09-21 14:22:52被版主删除

#31


哦 发现了 之前解密的密码没解密出来 密码是空的  谢谢了 我在看看
引用 29 楼 steptodream 的回复:
引用 28 楼 stefway 的回复:

之前都用的是by啊 得是Solaris和sude这个地方不一样。。。我改改试试
引用 25 楼 steptodream 的回复:

你的命令写错啦
正确的是bye 你写出by了!

这个我说错了  然你输入密码 可能是因为你的$USERNAME $USERPWD为空了

#32


能帮我再看看下面这段代码哪里出错了吗? 
我怀疑Solaris下awk用法的问题
$FTPDIR和$filedir都是有值的,这个我前面输出过。
ftp -n $IP $PORT << EOF | $AWK '{print $0"/'$filedir'"}' >> ${FILELIST}
user $USERNAME $USERPWD
cd $FTPDIR/$filedir
ls -l
by
EOF
这里面就没有得到指定文件下的文件信息。${FILELIST}执行完是空的
引用 29 楼 steptodream 的回复:
引用 28 楼 stefway 的回复:

之前都用的是by啊 得是Solaris和sude这个地方不一样。。。我改改试试
引用 25 楼 steptodream 的回复:

你的命令写错啦
正确的是bye 你写出by了!

这个我说错了  然你输入密码 可能是因为你的$USERNAME $USERPWD为空了

#33


你这个脚本 在我这里加一句 就正常执行了 我这个passiv默认是off的 需要输入passiv就可以了
另外你要确认你的每个变量都不为空
ftp -n $IP $PORT << EOF | $AWK '{print $0"/'$filedir'"}' >> ${FILELIST}
user $USERNAME $USERPWD
passiv
cd $FTPDIR/$filedir
ls -l
by
EOF

#34


又有一行包这个错误。。。
`do^M' unexpected
什么意思啊?


那段代码是这样

for filedir in $FILEDIRS
do
if [ "$PORT" = "" ];then     -----出错行
 PORT=21
fi
ftp -n $IP $PORT << EOF | $AWK '{print $0"/'$filedir'"}' >> ${FILELIST}
user $USERNAME $USERPWD
cd $FTPDIR/$filedir
ls -l
by
EOF
done
引用 33 楼 steptodream 的回复:
你这个脚本 在我这里加一句 就正常执行了 我这个passiv默认是off的 需要输入passiv就可以了
另外你要确认你的每个变量都不为空
ftp -n $IP $PORT << EOF | $AWK '{print $0"/'$filedir'"}' >> ${FILELIST}
user $USERNAME $USERPWD
passiv
cd $FTPDIR/$filedir
……

#35


哦的神啊 ..
让主席休息一下..
那是因为你的脚本是dos格式的
使用dos2unix转换一下试试

#36


又有一行包这个错误。。。
`do^M' unexpected
什么意思啊?


那段代码是这样

for filedir in $FILEDIRS
do
if [ "$PORT" = "" ];then -----出错行
------------------
你是不是在windows下写的脚本? 应该是在do后面多了^M  dos下的换行在linux/Unix下经常变成^M
你执行一下
dos2unix 你的脚本

要是不行 你就删掉do那行 在手工添上