使用Scapy进行网络扫描
使用Scapy进行网络扫描
在本节中,我们将创建一个简单的扫描器,扫描本地网络中的主机,并找到它们的 MAC 地址。 为了创建扫描器,我们首先需要了解地址解析协议 (ARP) 是什么以及如何使用它来创建网络扫描器。
地址解析协议 ARP 最简单的形式是一种转换工具,可以帮助我们将 IP 地址转换为 MAC 地址。 每当设备需要与同一本地网络中的设备通信时,它都需要设备的 MAC 地址。 IP 地址不用于本地通信。
假设设备 A 想要与本地网络中的设备 B 通信。 为了找到设备 B 的 MAC 地址,计算机 A 将首先查看由它维护的称为 ARP 缓存的内部列表,以查看计算机 B 的 IP 地址是否映射到其表中的物理 MAC 地址。 这也称为 ARP 表。 您可以通过键入 arp -a 命令来检查 PC 上的 ARP 表。
(base) D:\>arp -a接口: 172.26.131.123 --- 0x10Internet 地址 物理地址 类型172.26.131.1 d4-61-xx-6b-xx-01 动态
您可以看到它列出了 IP 地址和与之关联的相应 MAC 地址。
如果本地不存在被请求设备对应的 MAC 地址,设备 A 将向整个网络发出广播请求,询问哪个设备具有相应的 IP。 在我们的例子中,它将是设备 B。那些不是设备 B 的设备将忽略此请求,而设备 B 将使用设备 B 的相应 MAC 地址给出答复。这样,设备 A 将知道 MAC 地址 设备 B。一旦两个设备相互了解,它们之间的通信就可以进行。 一旦设备 A 获得设备 B 的 MAC 地址,它将更新其 ARP 表。
现在我们了解了 ARP 的工作原理,我们可以开始使用 Scapy 创建我们自己的 ARP 扫描器,以找出这些设备的 MAC 地址。 你可能想知道为什么我们需要一个 ARP 扫描器。 好吧,知道设备的 MAC 地址可以帮助我们执行中间人攻击。;
使用 Scapy 的 ARP 扫描器
#-*- coding:utf-8 -*-
from scapy.all import Ether, ARP, srpbroadcast = "FF:FF:FF:FF:FF:FF"
ether_layer = Ether(dst = broadcast)
ip_range = "172.26.131.1/24"
arp_layer = ARP(pdst = ip_range)
packet = ether_layer / arp_layer
ans, unans = srp(packet, iface = "以太网", timeout=2)
for snd, rcv in ans:ip = rcv[ARP].psrcmac = rcv[Ether].srcprint("IP = ", ip, " MAC = ", mac)--------------------------------------------------------
(base) D:\栏目\scapy>python 2.py
Begin emission:
Finished sending 256 packets.
.....*....*..*......................................................................*.........*...............*.........*............*...........................................................................................................................*.............................
Received 287 packets, got 9 answers, remaining 247 packets
IP = 172.26.131.1 MAC = d4:xx:fe:6b:xx:01
IP = 172.26.131.7 MAC = 48:xx:7e:c7:xx:e8
IP = 172.26.131.8 MAC = 48:xx:7e:c2:xx:ee
IP = 172.26.131.78 MAC = d4:xx:52:d0:xx:46
IP = 172.26.131.86 MAC = 00:xx:eb:5b:xx:73
IP = 172.26.131.102 MAC = 00:xx:7c:68:xx:38
IP = 172.26.131.111 MAC = cc:xx:da:1d:xx:63
IP = 172.26.131.123 MAC = b0:xx:aa:2f:xx:b8
IP = 172.26.131.244 MAC = 48:xx:7e:c7:xx:1f
ARP协议工作在以太网层,所以使用Scapy,我们将导入以太网层。让我们导入我们将使用的层和函数:
from scapy.all import Ether, ARP, srp
如果 MAC 地址的所有位都设置为 1,则表示该数据包是一个广播,它应该发送到网络中的每个设备。 Scapy 使用十六进制表示,因此我们将创建以下变量来表示广播地址: broadcast = “FF:FF:FF:FF:FF:FF”
然后,我们可以创建一个以太网层数据包并将目的地作为广播。 ether_layer = Ether(dst = broadcast)
我们还需要定义要扫描的 IP 范围。就我而言,我想扫描我的本地网络: ip_range = “172.26.131.1/24”
这表示我们要扫描从 IP 地址 172.26.131.1 到 172.26.131.255 的所有设备。最后 8 位称为位掩码,表示我们要扫描的主机数。记住一个IP地址是32位的,我们这里说我们要屏蔽24位,所以剩下的32-24 = 8位只能寻址,这意味着我们只扫描网络中的最后 256 台主机。
现在,要创建 ARP 层数据包,请使用以下命令: arp_layer = ARP(pdst = ip_range)
现在我们已经创建了两个层,Ether 和 ARP。 接下来,我们将创建一个包含这两个层的数据包: packet = ether_layer / arp_layer
接下来,我们将这个数据包作为广播发送。 为此,我们可以使用以下 srp 函数: ans, unans = srp(packet, iface = “以太网”, timeout=2)
packet 是我们想要发送的数据包的名称,iface 是我们想要用来发送这个数据包的网络接口卡,timeout 是为了确保如果我们在 2 秒内没有得到回复,这意味着设备很可能是离线的。
srp 返回已应答和未应答的数据包。 我们只对来自在线设备的应答数据包感兴趣。 现在,要获取在线设备的 IP 地址和 MAC 地址,我们可以编写以下代码。 我们可以遍历答案以查看 IP 和对应的 MAC 地址:
for snd, rcv in ans:ip = rcv[ARP].psrcmac = rcv[Ether].srcprint("IP = ", ip, " MAC = ", mac)
rcv 表示发送方已经收到的数据包。 获取IP地址可以使用ARP层,获取MAC地址可以使用以太层。 记住数据包中设置的字段对应于相应的层。
使用Scapy进行网络扫描相关推荐
- Kali Linux网络扫描教程(内部资料)
Kali Linux网络扫描教程(内部资料) 试读样张:http://pan.baidu.com/s/1qWuNSYw 前 言 Kali Linux是业内最知名的安全渗透测试专用操作系统.它的前身就 ...
- Kali Linux 网络扫描秘籍 第二章 探索扫描(二)
第二章 探索扫描(二) 作者:Justin Hutchens 译者:飞龙 协议:CC BY-NC-SA 4.0 2.7 使用 Scapy 发现第三层 Scapy 是一种工具,允许用户制作并向网络中注入 ...
- Kali Linux 网络扫描秘籍 第二章 探索扫描(一)
第二章 探索扫描(一) 作者:Justin Hutchens 译者:飞龙 协议:CC BY-NC-SA 4.0 2.1 使用 Scapy 探索第二层 Scapy 是一个强大的交互工具,可用于捕获,分析 ...
- Kali Linux 网络扫描秘籍 第六章 拒绝服务(二)
第六章 拒绝服务(二) 作者:Justin Hutchens 译者:飞龙 协议:CC BY-NC-SA 4.0 6.6 NTP 放大 DoS 攻击 NTP 放大 DoS 攻击利用响应远程 monlis ...
- Kali Linux 网络扫描秘籍 第三章 端口扫描(三)
第三章 端口扫描(三) 作者:Justin Hutchens 译者:飞龙 协议:CC BY-NC-SA 4.0 3.13 Dmitry 连接扫描 另一个可以对远程系统执行 TCP 连接扫描的 替代工具 ...
- Kali Linux 网络扫描秘籍 第三章 端口扫描(一)
第三章 端口扫描(一) 作者:Justin Hutchens 译者:飞龙 协议:CC BY-NC-SA 4.0 3.1 UDP端口扫描 由于 TCP 是更加常用的传输层协议,使用 UDP 的服务常常被 ...
- kali linux 网络架构,Kali Linux网络扫描教程大学霸内部资料
Kali Linux网络扫描教程大学霸内部资料 Kali Linux网络扫描教程大学霸内部资料 黑白教程:95元 彩色教程:118元 介绍:渗透测试是一门操作性极强的学科.掌握该技能的最佳方式就是大量 ...
- Kali Linux 网络扫描秘籍 第三章 端口扫描(二)
第三章 端口扫描(二) 作者:Justin Hutchens 译者:飞龙 协议:CC BY-NC-SA 4.0 3.6 Scapy 隐秘扫描 执行 TCP 端口扫描的一种方式就是执行一部分.目标端口上 ...
- 网络对抗技术_实验一_网络侦查与网络扫描
中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告 实验一 网络侦查与网络扫描 学生姓名 叶菁 年级 2014级 区 ...
- 网络扫描信息收集基于(Windows)
1.首先说明一下一款网络扫描工具,在之前的博客中我曾简要的写过关于Advance IP Scanner使用方法,最近要写网络扫描的工具,所以对这款工具做一个详细的功能细节上的介绍. 如下图 在输入框 ...
最新文章
- 《强化学习周刊》第40期:PMIC多智能体强化学习、Lazy-MDPs、CTDS
- DSP专家给你一个选择FPGA的理由(让人看了热血沸腾的一篇科普文章)
- 给超链接(a标签)加onclick事件
- docker访问宿主机mysql_docker容器内访问宿主机127.0.0.1服务
- 互联网的发展背离了其初衷吗?
- 计算机科学速成课18:操作系统
- [JS] - onmusewheel事件(兼容IE,FF)
- 5.Java 面试题整理(JDBC ,JDO 方面)
- 脚本语言程序员怎么学习程序设计?
- 代码检测vc2013环境是否已经安装了
- UML图详细图文教程
- 常见搜索引擎蜘蛛大全
- css控制表格剧中,如何通过css设置表格居中
- 解决 mac系统下sublime imput 函数交互问题
- 【vue】基于element UI周控件实现的单选周和多选周
- 第一次滑雪经过——教你如何省钱
- 程序员:是花光积蓄在深圳买房?还是回到长沙过“富余”生活?
- ACM之路(14)—— 线段树的日常(上)
- Android 给地震监视器添加Notification
- 4.Redis 所消耗的资源