返回列表 发帖

[技术讨论] Shell脚本怎样检查局域网中哪些端口被占用?

#!/bin/bash
#检查局域网中哪些端口被占用
for n in {2..255}; do
#此处的“{}”中的数值为需要测试的IP尾号段,起止IP尾号用“..”隔开,并分配变量给“n”   ------->这么写对吗?
         host=192.168.0.$n
         ping -c2 $host &>/dev/null
         if [ $? = 0 ]; then
                      echo "$host 已被占用"
         else
                      echo "$host"
         fi
doneCOPY

TOP

回复 2# find


    这个不对吧,我在终端里运行的时候,显示:ping: unknown host 192.168.0.{2..255}

TOP

回复 3# hacker85


你是怎样执行这个脚本的?
./testsh
. ./test.sh
sh test.sh

TOP

回复 4# find


    sh ./IP

TOP

明天来看你的回复,谢谢先。

TOP

回复 6# hacker85


那种方法是不靠谱的,试试:
chmod u+x test.sh
./test.shCOPY

TOP

回复 7# find


    呵,还是不行,结果如下:
6@6:~/下载$ chmod u+x IP
6@6:~/下载$ sh ./IP
192.168.1.{2..255} 已被占用
6@6:~/下载$ ping: unknown host 192.168.1.{2..255}

TOP

回复 8# hacker85


运行的时候不要使用:
sh ./IP
而是使用:
./IP

TOP

本帖最后由 hacker85 于 2012-3-18 11:11 编辑

回复 9# find


    为什么呢?!不是一个道理吗?
====================分割线==========
不加sh确实可以运行。
====================分割线==========
不过这个代码的效率不是太高。
当一台想用ssh连接一台设备的时候,这个设备虽然开机,但是它
本身却没有进行网络通讯,则ssh就不会连接成功,这样的设备如
ipad,当它待机的时候,虽然ip还是分配给了它,可是这个时候
用别的设备去连接的时候,会发现无法连接,我想这是IOS系统的
一个安全措施吧。但是它给我们这个代码带来了一个消息,就是虽
然ip被分配出去了,也就是说自己知道它被占用了,可以程序结果
不会显示已占用。

TOP

回复 10# hacker85


./test.sh会调用你脚本里面指定的/bin/bash去解释执行这个脚本
sh test.sh调用的是sh

TOP

返回列表