zoukankan      html  css  js  c++  java
  • Kali学习笔记6:二层发现

    先介绍下ARPING命令:

    arping命令是用于发送ARP请求到一个相邻主机的工具

    arping使用arp数据包,通过PING命令检查设备上的硬件地址。能够测试一个IP地址是否是在网络上已经被使用,并能够获取更多设备信息。功能类似于ping

    直接使用,-c 参数:只发一个数据包

    由于这个IP不存在,只发出去数据包,但是没有应答。

    也可以写一个简单的脚本:

    作用:对局域网内所有设备扫描

    #!/bin/bash
    if [ "$#" -ne 1 ];then 
      echo "Usage - ./arping.sh [interface]"
      echo "Excample - ./arping.sh eth0"
      echo "Example will perform an ARP scan of the local subnet to which eth0 is assigned"
      exit
    fi
    
    interface=$1
    prefix=$(ifconfig $interface | grep "broadcast" | cut -d " " -f 10 | cut -d '.' -f 1-3)
    for addr in $(seq 1 255);do
        arping -c 1 $prefix.$addr -I $interface | grep "reply from" | cut -d" " -f 4
    done

    写好后命名:arping.sh

     (如果无法运行,chmod即可)

    第一次运行出错,因为需要参数:

    可见,这里发现了一个192.168.87.2

    nmap在二层发现中的使用:

    nmap只需要一行即可实现arping的一个脚本:并且速度更快

    #!/bin/bash
    if [ "$#" -ne 1 ];then 
      echo "Usage - ./arping.sh [interface]"
      echo "Excample - ./arping.sh eth0"
      echo "Example will perform an ARP scan of the local subnet to which eth0 is assigned"
      exit
    fi
    
    interface=$1
    prefix=$(ifconfig $interface | grep "broadcast" | cut -d " " -f 10 | cut -d '.' -f 1-3)
    for addr in $(seq 1 255);do
        arping -c 1 $prefix.$addr -I $interface | grep "reply from" | cut -d" " -f 4
    done

    nmap:

    扫描一个指定文件中保存的IP:

    其实nmap这里的扫描和arping不一样,可以抓包发现,nmap还发送DNS数据包,解析主机名

    Netdiscover命令用于二层发现:

    主动发现:

    扫描本地所有网段:

    扫描完成

    可以把需要扫描的IP放在一个文件中扫描:

    被动发现:原理是将网卡设置成混杂模式,等待数据包,收集信息

    现在就是在等待状态,只要有数据包,就会出现显示在这里。

    直接输入scapy,发现丢失文件或者有错误

    这时候,输入这行即可:

    耗时不多,发现下载完成之后就可以正常开启scapy了!

    简单使用方式:就像调用函数的方式:

    示例:这里我要定制一个ARP数据包,输入ARP后查看相关信息:

    这里九行的意思分别是:硬件类型,协议类型,硬件地址长度,协议长度,操作(这里的who-has表示ARP的查询包),后边的是四个地址

    参数的意思分别是:0x1:以太网,0x800:IP协议,长度分别是6,4,整体来看:

    这样来理解这个包:谁是psrc(发送源)?谁的mac地址是hwsrc(发送源)?我要查的是pdst这个地址;hwdst这个mac地址!

    通常我们这样来给变量赋值:

    我们只需要一个简单的命令就可以将这个包发出去:

    仔细看下,这里发送出去了一个包,并且回应了一个包,说明192.168.87.1这个ip地址存在

    我们可以抓包看看:

    不错,这个包确实发送出去了!

    还可以简单设置下,看看回应包的内容

    我们可以使用脚本:

    arp1.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 - ./arp_discpy [interface]"
       print "Example - ./arp_disc.py eth0"
       print "Example will perform an ARP scan of thr local subnet to which eth0 is assigned"
       sys.exit()
    
    interface = str(sys.argv[1])
    
    ip=subprocess.check_output("ifconfig "+interface+" | grep 'inet ' | cut -d 't' -f 2 |cut -d ' ' -f 1",shell=True).strip()
    prefix = ip.split(".")[0] + '.' + ip.split(".")[1] + '.' + ip.split(".")[2] + '.'
    
    for addr in range(0,254):
       answer=sr1(ARP(pdst=prefix+str(addr)),timeout=0.1,verbose=0)      
       if answer ==None:
         pass;
       else:
         print prefix+str(addr)

     然后:

    chmod u+x arp1.py

    ./arp1.py

    我第一次运行时候出错,因为是从win10系统复制过来的脚本

    这里会报错:/usr/bin/python^M: 解释器错误: 没有那个文件或目录

    解决方式:

    vi arp1.py

    :set fileformat=unix

    :wq

    再次

    ./arp1.py

    即可

     

    这里发现两个收到回报的ip

    可以增强下这个脚本:

    指定文件扫描

    arp2.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 - ./arp_discpy [interface]"
       print "Example - ./arp_disc.py eth0"
       print "Example will perform an ARP scan of thr local subnet to which eth0 is assigned"
       sys.exit()
    
    filename = str(sys.argv[1])
    file = open(filename,"r")
    
    for addr in file:
       answer=sr1(ARP(pdst=addr.strip()),timeout=0.1,verbose=0)
       if answer == None:
         pass
       else:
         print addr.strip()

    还需要在当前目录下创建一个文本记录数据:我这里象征性写几个,实际情况不是如此

    adds

    192.168.87.1
    192.168.87.2
    192.168.87.3
    192.168.87.4
    192.168.87.5
    192.168.87.6
    192.168.87.7

    好了,现在运行这个脚本试试:

    最后:二层发现的用途:

    二层发现用于我们已经控制了目标的一台主机,想要探测目标主机子网下的其他主机

  • 相关阅读:
    面试题9:斐波那契数列
    面试题5:从尾到头打印链表
    面试题4:替换空格
    AOP
    (转)父类与子类之间变量和方法的调用
    悲观锁和乐观锁
    Java实现冒泡排序、折半查找
    (转载)Java 自动装箱与拆箱、equals和==的比较
    编程之美:数组分割
    windows下perl的安装和脚本的运行
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/9043615.html
Copyright © 2011-2022 走看看