zoukankan      html  css  js  c++  java
  • 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脚本

  • 相关阅读:
    Linux组件封装(三) Thread的封装
    Linux组件封装(二) 条件变量Condition的封装
    Linux组件封装(一) 互斥锁MutexLock
    迭代器适配器(二) general inserter的简单实现
    迭代适配器(一) back_insert和front_insert的简单实现
    priority_queue的简单实现
    svm简易例子——matlab版本
    讲座 on the connection between vision and language
    svm相关理解
    为什么深度学习有效?(why deep learning works)
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/9301914.html
Copyright © 2011-2022 走看看