介绍
关于Scapy的
Scapy是一个Python程序,使用户能够发送,嗅探和剖析并伪造网络数据包。此功能允许构建可以探测,扫描或攻击网络的工具。
换句话说,Scapy是一个功能 强大的交互式数据包操作程序。它能够伪造或解码大量协议的数据包,通过线路发送,捕获它们,匹配请求和回复等等。Scapy可以轻松处理大多数经典任务, 如扫描,跟踪路由,探测,单元测试,攻击或网络发现。它可以取代hping,arpspoof,arp-sk,arping,p0f甚至是 Nmap,tcpdump和tshark的某些部分。
Scapy在很多其他工具无法处理的其他特定任务上表现也很好,比如发送无效帧,注入自己的802.11帧,组合技术(VLAN跳频+ ARP缓存中毒,WEP加密通道上的VOIP解码,… )等
这个想法很简单。Scapy主要 做两件事:发送数据包和接收答案。您定义一组数据包,它发送它们,接收答案,匹配带有答案的请求,并返回数据包对(请求,应答)列表和不匹配数据包列表。 这比Nmap或hping这样的工具有一个很大的优势,即答案不会减少到(打开/关闭/过滤),而是整个数据包。
除此之外,还可以构建更多高级功能,例如,执行跟踪路由并仅提供请求的起始TTL和答案的源IP的功能。一个ping整个网络并提供机器回答的列表。执行portscan并返回LaTeX报告的人。
是什么让Scapy如此特别
首先,使用大多数其他网络工具,您将无法构建作者无法想象的东西。这些工具是为特定目标而构建的,不能偏离它。例如,ARP缓存中毒程序不允许您使用双802.1q封装。或者尝试找一个可以发送带有填充的ICMP数据包的程序(我说填充,而不是有效负载,请参阅?)。事实上,每次有新需求时,都必须构建一个新工具。
其次,它们通常会混淆解码和解释。机器擅长解码,可以帮助人类。解释是为人类保留的。有些程序试图模仿这种行为。例如,他们说“ 这个端口是开放的 ”而不是“ 我收到了一个SYN-ACK ”。有时他们是对的。有时不是。这对初学者来说更容易,但是当你知道自己在做什么的时候,你会继续尝试从程序的解释中推断出真正发生的事情来制作你自己的,这很难,因为你丢失了大量的信息。而且您经常最终使用解码和解释工具遗漏的内容。tcpdump -xX
第三,即使是只能解码的程序也不会向您提供他们收到的所有信息。他们给你的网络愿景是他们的作者认为足够的。但它并不完整,你有偏见。例如,您是否知道报告以太网填充的工具?
Scapy试图克服这些问题。它 使您能够准确地构建所需的数据包。即使我认为在TCP之上堆叠802.1q层没有任何意义,但对于其他人来说,它可能还有一些我不知道的产品。Scapy 有一个灵活的模型,试图避免这种任意限制。您可以在任何您想要的字段中随意添加任何值,并按照您的需要进行堆叠。毕竟你是一个成年人。
事实上,它就像每次构建一个新工具,但不是处理百行C程序,而是只编写两行Scapy。
在探测(扫描,跟踪路由等)之后,在进行任何解释之前,Scapy始终会为探测器提供完整的解码数据包。这意味着您可以探测一次并多次解释,请求traceroute并查看填充。
快速包设计
其他工具坚持程序 – 你从shell运行的范例。结果是描述数据包的可怕语法。对于这些工具,采用的解决方案使用工具作者想象的场景形式的更高但不太强大的描述。例如,只有IP地址必须提供给端口扫描程序才能触发端口扫描方案。即使方案稍微调整一下,您仍然会遇到端口扫描。
Scapy的范例是提出一种域特 定语言(DSL),它可以对任何类型的数据包进行强大而快速的描述。使用Python语法和Python解释器作为DSL语法和解释器有许多优点:不需要 编写单独的解释器,用户不需要学习另一种语言,并且他们可以从完整,简洁和非常强大的语言中受益。
Scapy使用户能够将一个包或 一组包描述为一个堆叠在一起的层。每个图层的字段都有可用的默认值,可以重载。Scapy并不要求用户使用预定的方法或模板。这减轻了每次需要不同场景时 编写新工具的要求。在C中,可能需要平均60行来描述分组。使用Scapy,要发送的数据包可能只用一行描述另一行来打印结果。90%的网络探测工具可以 用2行Scapy重写。
探测一次,解释很多
网络发现是黑盒测试。在探测网络 时,会发送许多刺激,而只有少数刺激被回答。如果选择了正确的刺激,则可以通过响应或缺乏响应来获得所需信息。与许多工具不同,Scapy提供所有信息, 即发送的所有刺激和收到的所有响应。检查这些数据将为用户提供所需的信息。当数据集很小时,用户可以挖掘它。在其他情况下,数据的解释将取决于所采用的观 点。大多数工具选择视点并丢弃与该视点无关的所有数据。由于Scapy提供了完整的原始数据,因此可以多次使用该数据,从而允许视点在分析过程中发展。例 如,可以探测TCP端口扫描,并将数据视为端口扫描的结果。然后,还可以相对于响应分组的TTL来可视化数据。不需要启动新的探测来调整数据的视点。
Scapy解码,它不解释
网络探测工具的一个常见问题是它们试图解释所接收的答案,而不是仅解码和给出事实。报告 端口80上的“接收TCP重置”之类的内容不受解释错误的影响。报告端口80关闭是 一种解释,可能在大多数情况下是正确的,但在该工具的作者无法想象的某些特定上下文中是错误的。例如,某些扫描程序在收到ICMP目标不可达数据包时往往 会报告已过滤的TCP端口。这可能是正确的,但在某些情况下,这意味着数据包未被防火墙过滤,而是没有主机将数据包转发到。
解释结果可以帮助那些不知道端口扫描是什么但却弊大于利的用户,因为它会在结果中注入偏差。可能发生的事情是,他们可以自己进行解释,知识渊博的用户将尝试对工具的解释进行逆向工程,以得出触发该解释的事实。不幸的是,此操作中丢失了大量信息。
Scapy库安装
github地址:https://github.com/secdev/scapy
安装过程:见官方文档
后面将会有几篇文章将对这模块进行Python实例应用
如:窃取EMAIL认证,ARP投毒,处理PACP文件