关于Scapy

Scapy是一个可以让用户发送、侦听和解析并伪装网络报文的Python程序。这些功能可以用于制作侦测、扫描和攻击网络的工具。

换言之,Scapy 是一个强大的操纵报文的交互程序。它可以伪造或者解析多种协议的报文,还具有发送、捕获、匹配请求和响应这些报文以及更多的功能。Scapy 可以轻松地做到像扫描(scanning)、路由跟踪(tracerouting)、探测(probing)、单元测试(unit tests)、攻击(attacks)和发现网络(network discorvery)这样的传统任务。它可以代替hping,arpspoof,arp-sk,arping,p0f 甚至是部分的Namp,tcpdump和tshark 的功能。

Scapy 在大多数其它工具无法完成的特定任务中也表现优异,比如发送无效帧、添加自定义的802.11的侦、多技术的结合(跳跃攻击(VLAN hopping)+ARP缓存中毒(ARP cache poisoning)、在WEP加密信道(WEP encrypted channel)上的VOIP解码(VOIP decoding))等等等等。

理念非常简单。Scapy 主要做两件事:发送报文和接收回应。您定义一系列的报文,它发送这些报文,收到回应,将收到的回应和请求匹配,返回一个存放着(request, answer)即(请求, 回应)的报文对(packet couples)的列表(list)和一个没有匹配的报文的列表(list)。这样对于像Nmap和hping 这样的工具有一个巨大的优势:回应没有被减少 (open/closed/filtered)而是完整的报文。

在这之上可以建立更多的高级功能,比如您可以跟踪路由(traceroutes)并得到一个只有请求的起始TTL和回应的源IP的结果,您也可以ping整个网络并得到匹配的回复的列表,您还可以扫描商品并得到一个LATEX 报表。

Scapy为何如此特别

第一,对于其它的大多数网络工具来说,您无法制作一些作者无法想到的东西。这些工具已经被一个特定的目标所局限和固定,因此无法和这个目标有大的偏离。比如,一个ARP缓存中毒程序不会让您使用double 802.1q 包裹内容,同样无法找到一个程序可以发送填充(padding)的ICMP报文(是填充(padding),不是负载(payload))。事实上,每次有新需求时,您必需重新建立一个新的工具。

第二,这些工具经常混淆解码(decoding)和解释(interpreting)。机器擅长解码并能帮助人类完成这个工作。解释应该留给人类。一些程序试图模拟这个行为。比如它们说“这个端口是打开的”而不是说“我收到一个SYN-ACK“.有时它们是对的,但有时不是。这样做对于初学者来说更容易,但是当您知道您正在做什么,您将继续试图推从程序的解释中测实际上发生了什么来制作自己的工具,但是这相当困难,因为大量的信息已经丢失。因此最终常常是您使用tcpdump -xX来解码和解释这些工具丢掉的内容。

第三,即使是那些只管解码的程序也没有把它们收到的所有的信息交给您。它们给您展示的网络信息只是其作者认为足够的信息。但是这些并不完整,对您来说是偏颇的。比如,您知道有什么工具可以得到以太帧填充的报文吗(reports the Ethernet padding)?

事实上,每次运行本程序,更像是建造一个新的工具,不是处理上百行的C程序代码,您使用Scapy只需写几行代码。

在探测(probe)(或者扫描(scan)、路由跟踪(traceroute)等等)之后,Scapy总是在任何的解释之前把探测到的所有的包解码后给您。这意味着您可以探测一次而解释很多次,也可以使用路由跟踪并查看报文填充内容。

快速的报文设计

其它的工具坚持命令行运行的模式,这导致描述一个报文需要糟糕的语法。对于这些工具,解决的方法是在其作者想像的情景下,采用一种更高层但是功能更弱的描述方法。举例来说,在端口扫描的情景中,端口扫描器必须的参数只有IP地址。即使情景有所改变,情况依然如此(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解码而不解释

网络探测工具所共有的一个问题是它们都试图解释收到的回应而非仅仅解码并给出结果。报告一些类似于在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)

>>> IP()

>>> target="www.target.com"

>>> target="www.target.com/30"

>>> ip=IP(dst=target)

>>> ip

|>

>>> [p for p in ip]

[,

, ]

>>> ^D

# scapy -s mysession

Using session [mysession]

Welcome to Scapy (0.9.17.108beta)

>>> ip

现在,我们来操纵一些报文:

>>> IP()

>>> a=IP(dst="172.16.1.40")

>>> a.dst

'172.16.1.40'

>>> a.ttl

64

让我们来说我想要一个广播的MAC地址,并且负载的IP报文要到达ketchup.com和mayo.com,TTL值从1到9,并负载UDP报文:

>>> Ether(dst="ff:ff:ff:ff:ff:ff")

/IP(dst=["ketchup.com", "mayo.com"], ttl=(1,9))

/UDP()

现在我们在一行(一个确定报文(implicit packet))中定义了18个报文。

合理的默认值

Scapy试图在所有种类的报文数据域中使用合理的默认值,如果没有被重载的话,

IP源地址根据目的地址和路由表选择

校验和自动计算

源MAC地址根据输出接口(output interface)选择

以太网类型和IP协议由高层决定

其它数据域选择最有用的值:

TCP源端口为20,目的端口为80

UDP源端口和目的端口均为53

ICMP类型为echo request

学习Python

Scapy使用Python解释器作为命令面板。这意味着你可以直接使用Python语言(创建变量,使用循环,定义函数等等)。

如果你刚开始使用Python并且因此你不理解这些词语,或者如果你想学习这个语言,花一个小时来阅读一个Guido Van Rossum写的非常棒的Python教程。在此之后,你将知道Python :)(真的!)。对于更加深入的学习,Dive Into Python也是一个很好的开始。

作为一个快速的开始,下面是Python数据类型的概览:

int(signed, 32bits) : 42

long(signed, infinite) : 42L

str : "bell\x07\n" or 'bell\x07\n'

tuple (immutable): (1,4,"42")

list (mutable): [4,2,"1"]

dict (mutable): {"one":1, "two":2}

Python中没有块分割符,而是同缩进决定:

if cond:

instr

instr

elif cond2:

instr

else:

instr

python scapy使用教程_Scapy的基本使用相关推荐

  1. python scapy使用教程_scapy的基本用法

    不知道为何,网上有些把scapy跟scrapy搞混的.scapy是一个操作网络数据包的工具(Packet crafting),scrapy是一个屏幕抓取和web抓取框架(A Fast and Powe ...

  2. Python培训基础教程都教哪些

    根据相关数据统计,目前学习Python技术的同学大多数是零基础,都是从其他行业转型来学习的,那么Python培训基础教程都教哪些呢?好不好学呢?来看看下面的详细介绍. Python培训基础教程都教哪些 ...

  3. python爬虫入门教程--优雅的HTTP库requests(二)

    requests 实现了 HTTP 协议中绝大部分功能,它提供的功能包括 Keep-Alive.连接池.Cookie持久化.内容自动解压.HTTP代理.SSL认证等很多特性,下面这篇文章主要给大家介绍 ...

  4. python3里的pillow怎么安装_“python安装pillow教程“python3.4怎么安装pil

    "python安装pillow教程"python3.4怎么安装pil python安装pillow教程2020-10-09 03:37:02人已围观 如何在python3.6中装p ...

  5. 面向回家编程!GitHub标星两万的Python抢票教程”,我们先帮你跑了一遍

    来源:大数据文摘 本文约3400字,建议阅读8分钟 本文为你介绍Python抢票教程,带你回家! 盼望着,盼望着, 春节的脚步近了, 然而,每年到这个时候, 最难的, 莫过于一张回家的火车票. 据悉, ...

  6. Python编程系列教程第12讲——属性和方法

    视频地址:http://v.youku.com/v_show/id_XNTgyOTg4NjQ4.html 普及网络安全知识,推动信息技术发展. 为祖国的网络安全撑起一片蓝天,为网络安全爱好者构建一方家 ...

  7. Python编程系列教程第16讲——拷贝自身到系统目录

    分享知识,分享快乐,收获友谊,收获财富! 大家好,我是数字雨,QQ:798033502 http://itbook.taobao.com/ 今天给大家带来的教程是<Python编程系列教程第16 ...

  8. python爬取图片教程-推荐|Python 爬虫系列教程一爬取批量百度图片

    Python 爬虫系列教程一爬取批量百度图片https://blog.csdn.net/qq_40774175/article/details/81273198# -*- coding: utf-8 ...

  9. 编程入门python语言是多大孩子学的-不学点编程,将来怎么给孩子辅导作业―Python新手入门教程...

    为了填满AI时代的人才缺口,编程语言教育都从娃娃抓起了!如果你还不懂Python是什么将来怎么给孩子辅导作业呢? Python新手入门教程 近期,浙江省信息技术课程改革方案出台,Python言语现已断 ...

最新文章

  1. python表单提交的两种方式_详解flask表单提交的两种方式
  2. LaTeX 笔记:NFSS 那点事儿
  3. html5 table的表头拖动,可拖动table表头的实现
  4. tabnavigator_使用TabNavigator在Firefox中享受桌面Alt-Tab样式导航
  5. 阅读react-redux源码(三) - mapStateToPropsFactories、mapDispatchToPropsFactories和mergePropsFactories
  6. 哈希表和有序表的简单介绍
  7. WordPress 高颜值自适应黑/白模式Puock主题
  8. 在配置使用Membership或其他的Providers的ASP.NET2.0时一定要设置applicationName属性
  9. 解决远程桌面无法复制黏贴
  10. Ockam为物联网设备带来区块链无服务器身份识别
  11. sqlplus基础命令
  12. 几种防鼠光缆的种类及优缺点分析!
  13. HTML5个人学习笔记(一)
  14. stm32f103r8t6的晶振频率_STM32F103R8T6 中文资料
  15. 什么是网络爬虫?有哪些作用?如何构建?
  16. Sourcetree 使用
  17. 软技能:代码之外的生存指南
  18. 【读书笔记】代码思考
  19. 一个程序员老总的年终总结2010版
  20. 开关、按钮开关、自锁开关内部结构

热门文章

  1. 2007全球杀毒软件排名 + 2007全球防火墙排名
  2. 企业项目管理数字化解决方案
  3. 毕业设计第一次总结(基于知识图谱的医疗问答)
  4. 如何合并多个excel中(excel表格样式都一样)
  5. 打造抖音爆款脚本文案,让你分分钟钟上热门涨粉。
  6. 推荐 :常见损失函数和评价指标总结(附公式代码)
  7. 基于STM32的“智能家居”课程设计
  8. performSelector的原理及应用场景分析
  9. 一种SpaceClaim抽取流道的方法——利用缺失的面功能
  10. 计算机网络专业英语pdf,计算机网络专业英语词汇