掃描整個網段的所有,查看主機是否在線


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM