• Kali学习笔记7:三层发现


    三层发现:发送ICMP/IP数据包探测

    第一种方式:

    就是很简单的Ping命令:

    不过linux的ping命令和windows的ping命令不一样,它会默认不停止地发数据包

    我们可以通过-c参数来设置

    第二种方式:

    traceroute命令:

    这里会显示所有路由跳过的IP,***说明被防火墙阻挡了(通常防火墙默认阻挡ICMP数据包)。

    实现原理是基于TTL值的改变

    我们发现基本无法获得有用的信息,所以这种方式不推荐

      

    Linux的ping命令还有参数-R可以设置:可以实现路由追踪

    接下来我们可以写一个脚本来做三层发现:

    #!/bin/bash
    if [ "$#" -ne 1 ];then
      echo "Usage - ./ping [interface]"
      echo "Excample - ./ping 192.168.1.0"
      exit
    fi
     
    prefix=$(echo $1 | cut -d '.' -f 1-3)
     
    for addr in $(seq 1 254);do
       ping -c 1 $prefix.$addr | grep "bytes from" | cut -d " " -f 4 | cut -d ":" -f 1 &
    done

    如果是从windows系统复制过来的脚本

    注意:

    vi ping

    :set fileformat=unix

    赋予执行权限:

    chmod u+x ping

    执行脚本即可:

     

    效果不错,找到了我局域网中存活的ip

    接下来利用强大的Scapy工具:

    这种方式通常没有任何效果,原因:

    防火墙阻挡ICMP数据包,这里基本不会有所发现

    脚本:

    pinger1.py:

    #!/usr/bin/python
     
    import logging
    import subprocess
    logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
    from scapy.all import*
     
    if len( sys.argv ) !=2:                            
       print "Usage - ./pingger.py [/24 network address]"
       print "Example - ./pinger.py 172.16.36.0"
       print "Example will perform an ICMP scan of the 192.168.1.0/24 range"
       sys.exit()
     
    address = str(sys.argv[1])
     
    prefix = address.split(".")[0] + '.' + address.split(".")[1] + '.' + address.split(".")[2] + '.'
     
    for addr in range(1,254):
       answer=sr1(IP(dst=prefix+str(addr))/ICMP(),timeout=0.1,verbose=0)
       if answer ==None:
         pass;
       else:
         print prefix+str(addr)

    扫描已存在文件中的ip:

    pinger2.py:

    #!/usr/bin/python
     
    import logging
    import subprocess
    logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
    from scapy.all import*
     
    if len( sys.argv ) !=2:                             
       print "Usage - ./pingger.py [/24 network address]"
       print "Example - ./pinger.py 172.16.36.0"
       print "Example will perform an ICMP scan of the 192.168.1.0/24 range"
       sys.exit()
     
    filename = str(sys.argv[1])
    file=open(filename,"r")
     
    for addr in file:
       answer=sr1(IP(dst=addr.strip())/ICMP(),timeout=0.1,verbose=0)
       if answer ==None:
         pass;
       else:
         print addr.strip()

    第三种方式:Nmap(推荐,这个工具很强大)

    nmap中-sn参数可以探测目标ip是否活着:

    第四种方式:fping命令(ping命令的加强版)

    可以对地址段Ping

    后边输出的是一堆unreachable的报告,原因是防火墙阻挡ICMP数据包:

    第五种方式:hping命令

    hping命令很强大,这里只用其中一部分功能:

     我分别给存在的ip和不存在的ip发送:结果不同

    当然,也可以写成hping脚本

  • 相关阅读:
    Problem B. Harvest of Apples
    字典树的学习
    PACM Team
    2038: [2009国家集训队]小Z的袜子(hose)
    Naive Operations
    C程序设计语言练习 第三章
    数据结构C++实现-第一章 绪论
    排序
    操作系统设计与实现-第一章:序言
    进制转换
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/9301914.html
Copyright © 2020-2023  润新知