编辑: GXB156399820 | 2019-07-08 |
4 使情景有所改变,情况依然如此(Even if the scenario is tweaked a bit, you still are stuck to a port scan). Scapy 的原则是推荐使用一种特定领域语言(Domain Specific Language (DSL))以 达到对于任何种类报文的功能强大并快速的描述.使用 Python 语法 和 Python 解释器作为特定领域语言(DSL)的语法和解释器有许多优势:没有必要 写一个单独的解释器,用户不需要再学一种新语言并可以从这个完整、简约且非常 强大的语言中受益. Scapy 允许用户将一个或一系列报文描述成为一个个堆起来的层(layer).每层的 数据域有有用的且可重载的默认值. Scapy 不强制用户使用预先定义的方法和模 板.这样每次碰到不同的情景时写新工具的需要得到了减少.在C语言中,描述一 个报文可能平均要用60行代码.使用 Scapy ,发送的报文可能仅需一行代码描述 再加一行打印结果的代码.90%的网络探测工具可以使用 Scapy 使用2行代码重新 实现. 一次探测,多次解释 网络的发现是一个黑盒测试.当探测一个网络时,许多侦测报文(stimuli)发送然而 它们当中只有少数能够被回应.如果选择了正确的侦测报文,希望得到的信息可以 通过回应的报文或者是没有回应的情况来获得.不像很多其它的工具, Scapy 得 到所有的信息,也就是说,所有的发送的侦测报文和所有收到的回应.通过检查这 些数据用户可以得到想要的信息.当数据量较小时,用户可以直接查看数据.在其 它情况下,对于数据的解释将依赖于关注点的不同.多数工具选择展示关注点内容 而忽略和关注点无关的内容.由于 Scapy 给出完整的原始数据,因此这些数据可 以多次使用从而允许关注点在分析过程中发生变化.比如,可能探测一个TCP端口 扫描而关注(展示)端口扫描的结果.同时也可以查看回应报文的TTL方面的内容. 一个新的探测并不需要再来一次,而只是在已有的数据中改一下关注点即可. Scapy 解码而不解释 介绍
5 网络探测工具所共有的一个问题是它们都试图解释收到的回应而非仅仅解码并给出 结果.报告一些类似于在80端口收到一个TCP Reset报文这样的消息不属于解释错 误.报告80端口关闭在多数情况下是正确的,但是在某些特定的工具的作者没有想 到的上下文中是错误的.比如,一些扫描器在收到一个目的地址不可达的ICMP报 文后倾向于报告一个过滤TCP端口.这可能是正确的,但是在某些情况下,这表明 报文被防火墙过滤掉而找不到报文的非目的主机. 解释结果可以帮助那些不知道什么是端口扫描的用户,但是弊大于利,因为这对于 结果是一种主观的解释.可能的结果就是它们可以自己解释,知识丰富的用户将试 图反向还原这个工具的解释以得到引起这个解释的真正原因.不幸的是,在这个过 程中有大量的信息丢失. 快速展示(Quick demo) 首先我们稍微试一下,一次创建4个IP报文来看看这个工具是如何工作的.我们首 先初始化IP类.然后,我们重新将其实例化并给出4个IP报文的目的地址(/30给出掩 码).使用 Python 语法,我们在一系列明确的报文中定义这个报文(we develop this implicit packet in a set of explicit packets).然后,我们退出解释器.作为我们 提供的会话文件(session file),这些我们正在使用变量已经保存,然后重新加载: # ./scapy.py -s mysession New session [mysession] Welcome to Scapy (0.9.17.108beta) >