扫描整个网段的所有,查看主机是否在线

ma_be.sh

#!/bin/bash
#nmap -sP 192.168.30.0/24 |grep 192|awk '{print $5}' >ip_list  #扫描一个网段,将Ip地址或者主机名保存到ip_list文件中
user="watson"
password="watson@123"
root_passwd="*********"
pwd_dir=`pwd`                            #获取当前执行路径
network=$1                            #获取脚本执行参数
#root_passwd="**********"
##################################################################################
# 
#              root用户执行nmap命令,扫描主机
#                   使用nmap -sP 
###################################################################################
function Root_nmap(){
    if [[ $network == '' ]]
        then
                echo "请输入一个网络参数!"&& exit 1
        fi
    /usr/bin/expect <<-EOF
set time 60
spawn   su - root
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*Password:" { send "$root_passwd\r" }
}
expect "*#"  { send "cd  $pwd_dir && bash get_ip.sh $network\r" }
expect "*#"  { send "exit\r" }
interact
expect eof
EOF
}
################################################################################
#
#   对ip_list里面的文件进行处理,查看那些IP可以使用
#
################################################################################
function Believe_hosts(){
        rm -rf $hosts &&          touch $hosts
        rm -rf $hosts_windows &&    touch $hosts_windows
        rm -rf $hosts_password_errors &&touch $hosts_password_errors
    rm -rf $hosts_others&&    touch $hosts_others
    ip_num=`cat $ip_list|wc -l`
    #echo $ip_num&&exit
    for i in `seq 1 $ip_num`
    do
            #读取ip_list里面的ip地址
            ip=`cat $ip_list |sed -n $i'p'|awk '{print $1}'`
            #sshpass -p $password scp believe.sh $user@$ip:/tmp/ >/dev/null
            sshpass -p $password scp saomiao $user@$ip:/tmp/ >/dev/null
        re=$?                    #上一条命令的执行结果
            if [ $re -eq 0 ]            #执行结果为0,表示可以建立信任关系    
        then
#            sshpass -p $password ssh $user@$ip -o StrictHostKeyChecking=no "bash /tmp/believe.sh"
            echo $ip >> $hosts
            elif [ $re -eq 1 ]            #执行结果为1,表示可能为windows机器
            then 
                    echo $ip >>$hosts_windows
            elif [ $re -eq 5 ]            #执行结果为5,表示watson密码错误
        then
                    echo $ip >>$hosts_password_errors
        else
            echo "IP:$ip-----------------错误:$re" >>$hosts_others
            fi
    done
}
function Believe_make(){
    ip_list=dev_host
    belog=belog
    ip_num=`cat $ip_list|wc -l`
    rm -rf $belog &&touch $belog
    for i in `seq 1 $ip_num`
    do
        #读取iplist里面的ip地址和密码
        ip=`cat $ip_list |sed -n $i'p'|awk '{print $1}'`
        sshpass -p $password scp believe.sh $user@$ip:/tmp/ >/dev/null
    #    sshpass -p $password scp saomiao $user@$ip:/tmp/ >/dev/null
    #    echo $ip---------------------执行结果-------------$?
        if [ $? -eq 0 ]
        then 
            sshpass -p $password ssh $user@$ip -o StrictHostKeyChecking=no "bash /tmp/believe.sh"
            echo $ip 成功  >> belog
    #        echo $ip >>hosts
        else
            echo $ip 失败    >>belog
        fi
    done
}
function main(){
        if [ ! -d $network ]
        then
                mkdir $network
        fi
    ip_all="$network/ip_all_$network"                           #文件里面保存网段中所有可以ping的IP地址
        ip_list="$network/ip_list_$network"                          #文件里面保存nmap扫描的原始数据
        hosts="$network/hosts_$network"                        #保存Linux主机地址
    hosts_windows="$network/hosts_windows_$network"                #Windows主机
    hosts_password_errors="$network/hosts_password_errors_$network"        #保存密码错误主机
    hosts_others="$network/hosts_others_$network"                #其他类型主机
    Root_nmap                                #切换root用户,并且扫描主机
    Believe_hosts                                #得到Linux主机地址,生成host+网段文件
#    Believe_make
}
main $1;

get_ip.sh

#!/bin/bash

network=$1
##########################################################################
#        使用nmap命令扫描获取在线IP地址
#        必须root执行
##########################################################################
function Get_IP(){
    rm -rf $ip_all &&         touch $ip_all
    rm -rf $ip_list &&        touch $ip_list
    nmap -sP 192.168.$network.0/24 |grep 192 > $ip_all    #获取所有可以ping的地址
    #对获取得到的信息加工,得到单独的IP地址
    ip_num=`cat $ip_all|wc -l`
    for i in `seq 1 $ip_num`
    do
        lie_ip=`cat $ip_all |sed -n $i'p'`       
        lie_nf=`echo $lie_ip |awk '{print NF}'`
        if [ $lie_nf -eq 5 ]
        then
            ip=`echo $lie_ip|awk '{print $5}'`
            echo $ip >> $ip_list
        elif [ $lie_nf -eq 6 ]
        then
            ip=`echo $lie_ip|awk -F"(" '{print $2}'|awk -F")" '{print $1}'`
            echo $ip >> $ip_list        
        else
            echo "$lie_ip------------------Error!!!!!!!!"
        fi
    done
    chown watson:watson $network -R
}
function main(){
        ip_all="$network/ip_all_$network"                                                       #文件里面保存网段中所有可以ping的IP地址
        ip_list="$network/ip_list_$network"                                             #文件里面保存nmap扫描的原始数据
    Get_IP 
}
main $1;

 

脚本运行:

在ma_be.sh输入整个网段的统一root密码

chmod +x ma_be.sh

./ma_be.sh 19  #扫描19网段

 

 

 

-----------------------------------------------------------------------------分割线-----------------------------------------------------------------------------

获取用户脚本

#!/bin/bash
if [ $# -eq 2 ]
then
    hosts=$1
    hostname=$2
    tmpfile=user1
    filename=user$hostname
    rm -rf $tmpfile && touch $tmpfile
    rm -rf $filename && touch $filename
    ansible -i $hosts $hostname -m shell -a "cat /etc/passwd |grep bash " >$tmpfile
    cat $tmpfile |awk -F: '{print $1}' |awk '{print $1}' >$filename
    rm -rf $tmpfile
else
    echo "脚本必须传入参数两个,第一个为主机文件,第二个为主机群的名称,例如:'bash getsuer.sh hosts dev'"
    exit 1
fi

 

posted on 2017-08-16 19:39  losbyday  阅读(3737)  评论(0编辑  收藏  举报

导航