zoukankan      html  css  js  c++  java
  • Linux shell编写端口扫描脚本

    Linux shell编写端口扫描脚本

    需求:

    扫描特定主机

    扫描特定主机的特定端口

    扫描特定网段

    扫描特定网段中哪些主机开放了特定的端口

    源码如下:

    #/bin/bash
    #该脚本用于对特定目标主机进行常见端口扫描(加载端口字典)或者指定端口扫描,判断目标主机开放来哪些端口
    #用telnet方式
    #作者:雨中落叶
    #博客:https://www.cnblogs.com/yuzly/
    IP=$1
    #获得IP的前三位
    threeIP=$(echo $IP |awk -F. '{print $1"."$2"."$3"."}') 
    #获得IP的第四位
    endIP=$(echo $IP | awk -F. '{print $4}')
    if [ $1 ]
    then
      if [ $2 ]
        then
        #IP的第四位为0表明是一个网段,对整个网段进行特定端口的扫描,发现哪个主机开放特定端口
        if [ $endIP -eq 0 ]
        then
          for ((i=128;i<=140;i++))
          do
            (sleep 1;)|telnet $threeIP$i $2 2>&1 |grep "Connected to $threeIP$i">/dev/null 
            if [ $? -eq 0 ]
            then
              echo "主机$threeIP$i开放$2端口!"
            else
              echo "主机$threeIP$i的$2端口关闭!"         
            fi
          done
        else
          #IP的第四位不为0,说明是单个IP,对单个IP进行特定端口扫描
          (sleep 1;)|telnet $1 $2 2>&1 |grep "Connected to $1">/dev/null
           if [ $? -eq 0 ]
           then
             echo "主机$1开放$2端口!"
           else
             echo "主机$1的$2端口关闭!"      
           fi
        fi  
      else
          #脚本只有一个IP参数,根据IP的第四位是否为0来判断是否为网段,因为没有端口参数,扫描默认端口
        if [ $endIP -eq 0 ]
        then
          for ((i=128;i<=130;i++))
          do
            for port in $(cat defaultport.txt)
            do
              (sleep 1;)|telnet $threeIP$i $port 2>&1 |grep "Connected to $threeIP$i">/dev/null
              if [ $? -eq 0 ]
              then
                echo "主机$threeIP$i开放$port端口!"
              else
                echo "主机$threeIP$i的$port端口关闭!"          
              fi
            done
          done
        else
          #脚本只有IP一个参数,没有端口参数,加载端口字典扫描默认端口
          for i in $(cat defaultport.txt)
          do
            #与目标主机的特定端口只通信1秒,根据返回的数据来判断目标是否开放特定端口
            (sleep 1;)|telnet $1 $i 2>&1 |grep "Connected to $1">/dev/null
            if [ $? -eq 0 ]
            then
              echo "主机$1开放$i端口!"
            else
              echo "主机$1的$i端口关闭!"        
            fi
          done
        fi
      fi       
    else
      echo "******************************************* 
      该脚本的用法示例:  
      $0 192.168.1.1(扫描默认端口)
      $0 192.168.1.1 portx(扫描指定IP指定端口portx)
      $0 192.168.1.0(扫描指定网段,扫描默认端口)
      $0 192.168.1.0 portx(扫描指定网段指定端口portx) 
    ******************************************** "  
    fi

    1.测试,扫描特定主机(没有给出端口,扫描默认端口文件) 

    2. 测试,扫描特定主机的特定端口

    3. 测试,扫描特定网段(没给端口参数,扫描默认端口文件)  #实验为例减少测试时间只扫描了很小的网段 

    4.测试,扫描特定网段中哪些主机开放了特定的端口

  • 相关阅读:
    XML解析
    资源管理
    Android中的动态字符串的处理
    消息提示的三种方式
    程序调控和监视(Logcat,Debug)
    选择改变事件OnCheckedChange
    递归和非递归分别实现求n的阶乘
    递归和非递归分别实现strlen
    编写一个函数 reverse_string(char * string)实现:将参数字符串中的字符反向排列 。(递归实现)
    写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
  • 原文地址:https://www.cnblogs.com/yuzly/p/10555886.html
Copyright © 2011-2022 走看看