zoukankan      html  css  js  c++  java
  • 扫描整个网段的所有,查看主机是否在线

    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
    "; exp_continue }
    "*Password:" { send "$root_passwd
    " }
    }
    expect "*#"  { send "cd  $pwd_dir && bash get_ip.sh $network
    " }
    expect "*#"  { send "exit
    " }
    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
  • 相关阅读:
    extern “C”的作用详解
    const和typedef的常见用法详解
    虚函数、纯虚函数、虚函数与析构函数
    C++中四种类型转换方式
    面经中高频知识点归纳(一)
    leetcode Database4
    32位机和64位机下面各类型sizeof的大小
    Spring框架针对dao层的jdbcTemplate操作crud之query查询数据操作
    字符串变量的定义与引用
    使用字符数组及相关函数,求3个国家名中字母顺序排在最前面的国家。
  • 原文地址:https://www.cnblogs.com/losbyday/p/7375359.html
Copyright © 2011-2022 走看看