• 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.测试,扫描特定网段中哪些主机开放了特定的端口

  • 相关阅读:
    FMDB使用的一点心得:数据库创建、制表、查询等以及image转换成二进制nsdata保存到数据库中
    Java基本数据类型
    hashtable C++实现
    Libgdx中TextButton的一些思考
    [伯努利数] poj 1707 Sum of powers
    POJ 3020:Antenna Placement(无向二分图的最小路径覆盖)
    flume 读取kafka 数据
    [R] 之 帮助函数
    [python] 之 类编码细节
    [python] 之 装饰器
  • 原文地址:https://www.cnblogs.com/yuzly/p/10555886.html
Copyright © 2020-2023  润新知