Kali学习笔记6:二层发现

时间:2021-07-03 04:03:32

先介绍下ARPING命令:

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

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

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

Kali学习笔记6:二层发现

由于这个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即可)

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

Kali学习笔记6:二层发现

可见,这里发现了一个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:

Kali学习笔记6:二层发现

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

Kali学习笔记6:二层发现

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

Netdiscover命令用于二层发现:

主动发现:

Kali学习笔记6:二层发现

扫描本地所有网段:

Kali学习笔记6:二层发现

扫描完成

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

Kali学习笔记6:二层发现

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

Kali学习笔记6:二层发现

Kali学习笔记6:二层发现

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

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

这时候,输入这行即可:

Kali学习笔记6:二层发现

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

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

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

Kali学习笔记6:二层发现

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

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

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

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

Kali学习笔记6:二层发现

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

Kali学习笔记6:二层发现

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

我们可以抓包看看:

Kali学习笔记6:二层发现

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

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

Kali学习笔记6:二层发现

我们可以使用脚本:

arp1.py

#!/usr/bin/python

import logging
import subprocess
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import* if len( sys.argv ) !=:
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[]) ip=subprocess.check_output("ifconfig "+interface+" | grep 'inet ' | cut -d 't' -f 2 |cut -d ' ' -f 1",shell=True).strip()
prefix = ip.split(".")[] + '.' + ip.split(".")[] + '.' + ip.split(".")[] + '.' for addr in range(,):
answer=sr1(ARP(pdst=prefix+str(addr)),timeout=0.1,verbose=)
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

即可

Kali学习笔记6:二层发现

这里发现两个收到回报的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

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

Kali学习笔记6:二层发现

最后:二层发现的用途:

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