python中的scapy模块

article/2025/9/6 2:10:13

文章目录

      • 模块简介
      • 基本用法
      • Scapy的基本操作
      • Scapy模块中的函数
      • Scapy模块的常用简单实例
      • 编写端口扫描器

模块简介

Scapy是一个由Python编写的强大工具,目前很多优秀的网络扫描攻击工具都使用了这个模块。也可以在自己的程序中使用这个模块来实现对网络数据包的发送、监听和解析。这个模块相对于Nmap来说,更为底层。可以更直观的了解网络中的各类扫描攻击行为。

相对于Nmap来说,Scapy模块只会把收到的数据包展示给你,并不会告诉你这个包意味着什么。

例如,当你去医院检查身体时,医院会给你一份关于身体各项指标的检查结果,而医生也会告诉你得了什么病或者没有任何病。那么Nmap就像是一-个医生,它会替你搞定-切,按照它的经验提供给你结果。而Scapy则像是一个体检的设备, 它只会告诉你各种检查的结果,如果你自己就是-一个经验丰富的医生,显然检查的结果要比同行的建议更值得参考。

基本用法

在Kali里边已经集成了Scapy这个工具,我们在终端下输入Scapy就可以启动它了。
在这里插入图片描述

Scapy提供了和Python一样的交互式命令行,在这里需要说一下,接下来的实例我都会在这个命令行里运行。

Scapy的基本操作

首先使用几个实例来演示一下Scapy的用法,在Scapy中每一个协议就是一个类。只需要实例化一个协议类,就可以创建一个该协议的数据包,例如,如果要创建一个IP类型的数据包,就可以使用如下命令。

ip = IP() 

IP数据包最重要的属性就是源地址和目的地址,这两个属性可以使用src和dst来设置,例如,要构造一个发往“192.168.1.107”的数据包,可以这么写。

ip = IP(dst="192.168.1.107")

在这里插入图片描述
这个目标dst值可以是一个IP地址,也可以是一个网段,例如192.168.1.0/24,这时产生的就不是一个数据包,而是256个数据包。
在这里插入图片描述
如果想要查看每个数据包,可以使用 [p for p in ip] 。
在这里插入图片描述
Scapy采用分层的形式来构造数据包,通常最下面的一个协议为Ether,然后是IP,在之后是TCP或者UDP。IP()函数无法用来构造ARP请求和应答数据包,所以这时可以使用Ether(),这个函数可以设置发送方和接收方的MAC地址。那么现在来产生一个广播数据包,执行的命令如下。

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

执行后如图。
在这里插入图片描述
如果要构造一个HTTP数据包,也可以使用如下这种方式。

IP()/TCP()/"GET/HTTP/1.0\r\n\r\n"

Scapy目前使用频率最高的类要数Ether、IP、TCP和UDP,但是这些类都具有哪些属性呢?Ether类中显然要有源地址、目的地址和类型。IP类的属性则复杂了许多,除了最重要的源地址和目的地址之外,还有版本、长度、协议类型、校验和等,TCP类中需要有源端口和目的端口。这里可以使用 ls() 函数来查看一个类拥有那些属性。

例如,使用ls(Ether())来查看Ether类的属性。
在这里插入图片描述
也可以看一下IP()类中的属性。

在这里插入图片描述
可以对里边对应的属性进行设置,例如,将ttl的值设置为32,可以使用如下方式。

IP(src="192.168.1.1",dst="192.168.1.107"ttl=32)

Scapy模块中的函数

除了这些对应着协议类和它们的属性之外,还需要一些可以完成各种功能的函数。需要注意的一点是,刚才使用的IP()的作用是产生了一个IP数据包,但是并没有将其发送出去,因此,现在首先来看的就是如何将产生的报文发送出去,Scapy中提供了多个用来完成发送数据包的函数,首先来看一下其中的send()sendp()。这两个函数的区别在于send()工作在第三层,而sendp()工作在第二层。简单地说,send()是用来发送IP数据包的,而sendp()是用来发送Ether数据包的。
例如,构造一个目的地址为“192.168.1.107”的ICMP数据包,并将其发送出去,可以使用如下语句。

send(IP(dst="192.168.1.107")/ICMP())

执行结果。
在这里插入图片描述如果成功了就会出现一个“Sent 1 packets.”的显示

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

执行结果。
在这里插入图片描述
注:这两个函数,只发不收

如果希望发送一个内容是随机填充的数据包,而且又要保证这个数据包的正确性,那么可以是fuzz()函数。例如,可以使用如下命令来创建一个发往192.168.1.107的tcp数据包。

IP(dst="192.168.1.107")/fuzz(TCP())

执行结果。
在这里插入图片描述
在Scapy中提供了三个用来发送接收数据包的函数,分别是**sr()、sr1()和srp()**其中sr()和sr1()工作在第三层,例如IP和ARP等,而srp()工作在第二层。
这里仍然向192.168.1.107发送一个ICMP数据包来比较一下sr()和send()的区别。

sr(IP(dst="192.168.1.107")/ICMP())

执行结果。
在这里插入图片描述
当禅城==产生的数据包发送出去之后,Scapy就会监听接收到的数据包个数,answers表示对应的应答数据包。
sr()函数是Scapy的核心,它的返回值是两个列表,第一个列表是收到了应答的包和对应的应答,多伊尔戈列表是未收到应答的包。所以使用两个列表来保存sr()的返回值。
在这里插入图片描述
这里使用ans和unans来保存sr()的返回值,因为发出的是一个ICMP请求数据包,而且也收到了一个应答包,所以这个发送的数据包和收到的应答包都被保存到了ans列表中,使用ans.summary()可以查看两个数据包的内容,而unans列表为空。

sr1()函数和sr()函数作用基本一样,但是值返回一个应答包。只需要使用一个列表就可以保存这个函数的返回值。例如,使用p来保存sr1(IP(dst=“192.168.1.107”)/ICMP())的返回值。
在这里插入图片描述
可以使用sr1()函数来测试目标的某个端口是否开放,采用半开扫描(SYN)的办法。

执行结果如图所示。
在这里插入图片描述

从上面p的值可以看出,192.168.1.107回应了发出设置了SYN标志位的TCP数据包,这表明他开放了80端口。

另外一个十分重要的函数就是sniff(),如果使用过Tcpdump,那么对这个函数的使用就不会感到陌生。通过这个函数可以在自己的程序中捕获经过本机网卡的数据包。
在这里插入图片描述

这里有个比较坑的地方,就是他不能实时回显,你必须得终止嗅探他才会回显他嗅探到的包。

这个函数强大的地方在于可以使用番薯filter对数据包进行过滤。例如,指定之捕获与192.168.1.107有关的数据包,可以使用“host 192.168.1.107”:

sniff(filter="192.168.1.107")

同样,也可以使用filter来过滤指定的协议,例如ICMP类型的数据包。

sniff(filter="icmp")

如果要同时满足多个条件,可以使用“and”、“or”等关系运算符来表达:

sniff(filter=" host 192.168.1.107 and icmp")

另外两个很重要的参数是iface、count。iface可以用来指定所要进行监听的网卡,例如,指定eth0作为监听网卡,就可以使用:

sniff(iface="eth0")

而count则用来指定监听到数据包的数量,达到指定的数量就会停止监听,例如,只监听30个数据包:

sniff(count=30)

现在设计一个综合性的监听器他会在网卡eth0上监听源地址或者目标地址为192.168.1.107的ICMP数据包,到收到3个这样的数据包就停止:

sniff(filter="icmp and host 192.168.1.107",count=30,iface="eth0")

运行结果:
在这里插入图片描述如果要查看这三个数据包的内容,可以使用"_",在Scapy中这个符号表示是上一条语句的执行结果。例如:

a=_
a.nsummart()

运行结果:
在这里插入图片描述刚刚使用过的函数 pkt.summary()用来以摘要的形式显示pkt的内容,这个摘要长度为一行。

p=IP(dst="www.baidu.com")
p.summary()

运行结果:
在这里插入图片描述注:函数pkt.summary的作用与pkt.nsummary()相同,只是操作对象是单个数据包

Scapy模块的常用简单实例

由于scapy功能极为强大,可以构造目前各种常见的协议类型的数据包,因此几乎可以使用这个模块完成任何任务,下面看看一些简单的应用。

使用scapy来实现一次ACK类型的端口扫描,对192.168.1.107的21、22、23、135、443、445这些端口是否被屏蔽进行扫描, 注意是屏蔽,不是关闭! 采用ACK扫描模式,可以构造一下命令方式。

ans,unans = sr(IP(dst="192.168.1.107")/TCP(dport=[21,22,23,135,443,445],flags="A"))

运行结果:
在这里插入图片描述
正常的时候,如果一个开放的端口会回应ACK数据包,而关闭则回应RST数据包。在网络中,一些安全设备会过滤一部分端口,这些端口不会响应来自外界的数据包一切发往这些端口的数据包都石沉大海,这些端口的状态并非是开放或者关闭的这是网络安全管理常用的方法。

首先查看未被过滤的端口:

 for s,r in ans:if s[TCP].dport == r[TCP].sport:print("The port "+str(s[TCP].dport)+" is unfiltered")

运行结果:
在这里插入图片描述

编写端口扫描器

下面使用Scapy强大的包处理功能来设计一个端口是否开放的扫描器。注意,这里还是要注意和前面例子的区别,如果-一个端口处于屏蔽状态,那么它将不会产生任何响应报文。如果一个端口处于开放状态,那么它在收到syn数据包之后,就会回应- -个ack数据包。反之,如果一个端口处于关闭状态,那么它在收到syn数据包之后,就会回应-一个rst数据包。首先在Kali Linux 2中启动一个终端,在终端中打开Python。先导入需要使用的模块文

from scapy.all import fuzz,TCP,IP,sr #导入模块与函数

接下来产生一个目标为“192.168.1.107”的80端口的SYN数据包,将此标志位设置为“S”:

ans,unans = sr(IP(dst="192.168.1.1")/fuzz(TCP(dport=80,flags="S"))) //指定目标地址以及端口

接下来使用循环查看,如果r[TCP].flags==18,则表示目标端口开放,若为20则为关闭状态。

for s,r in ans:                    		#把ans的值赋给s,r并开始遍历if r[TCP].flags==18:		   		#判断返回值是否等于18print("This port is Open") 		#输出判断结果if r[TCP].flags==20:				#判断返回值是否等于20print("This port is Closed")	#输出判断结果

运行结果:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/NchewIWT.shtml

相关文章

Scapy使用文档中文版

0x00 前言 scapy是一个强大的交互式(interactive)的包操作程序,用python写的,有一个python的命令行解释器界面,可直接运行,当然也可以作为第三库,导入到我们的python程序中去使用它的类和方法。 关于scapy作者的一个简…

“人生苦短,我用Python“——Socket、Nmap、Scapy

渗透测试模块 Socket实例化Socket类Socket常用的函数服务端函数客户端函数服务端和客户端均可使用的函数使用Socket编写一个简单的服务端和客户端 Nmappython-nmap模块类的实例化python-namp模块中的函数PortScanner类PortScannerAsync类使用python-nmap模块来编写一个扫描器 S…

【Python】scapy模块学习笔记

文章目录 0x00 scapy安装以及环境配置0x01 实验10x02 实验20x03 实验30x04 实验40x04 实验50x06 python代码实现端口扫描 0x00 scapy安装以及环境配置 学习自知乎大佬 ——弈心——网络工程师的Python之路—Scapy基础篇 复现了一波 scapy安装: pip install scapy导入scapy方…

Python-Scapy使用介绍

介绍 Scapy可作为python模块运行,也可以单独运行,scapy在kali自带,可以直接输入scapy进入交互命令行。 Scapy可对网络数据包进行发送、监听、解析等操作,类似于python-nmap模块,只不过scapy更偏向于底层操作。 函数 下面简单了解下scapy的基本使用,这里以kali系统为例…

python的scapy基础使用

Scapy库 解决三个问题: 监听流量(与wireshark相同) 分析流量 编辑流量数据包(链路层 网络层 传输层),应用层也可以编辑 意义不大 提供两种操作方式 基于命令进行交互 python代码调用 基于命令进行交…

Python使用scapy和dpkt抓包并解析

scapy scapy是python中一个可用于网络嗅探的非常强大的第三方库,可以用它来做 packet 嗅探和伪造 packet。 scapy已经在内部实现了大量的网络协议。如DNS、ARP、IP、TCP、UDP等等,可以用它来编写非常灵活实用的工具。 scapy安装: pip inst…

Scapy:交互式数据包处理程序

简介 Scapy是一个强大的,用Python编写的交互式数据包处理程序 可以让用户发送、嗅探、分析和伪造网络包,从而用来侦测、扫描和向网络发动攻击 可以轻松地处理扫描(scanning)、路由跟踪(tracerouting)、探测(probing)、单元测试(unit tests)、攻击(attac…

Scapy基础学习之一

关于Scapy Scapy的是一个强大的交互式数据包处理程序(使用python编写)。它能够伪造或者解码大量的网络协议数据包,能够发送、捕捉、匹配请求和回复包等等。它可以很容易地处理一些典型操作,比如端口扫描,tracerouting…

Scapy常用操作和命令(1)

 ls() 列出scapy中实现的所有网络协议 >>> ls() ARP : ARP ASN1_Packet : None BOOTP : BOOTP CookedLinux : cooked linux DHCP : DHCP options DHCP6 : DHCPv6 Generic Message) DHCP6OptAuth : DHCP6 Option - …

python+scapy 抓包与解析

最近一直在使用做流量分析,今天把 scapy 部分做一个总结。 python 的 scapy 库可以方便的抓包与解析包,无奈资料很少,官方例子有限,大神博客很少提及, 经过一番尝试后,总结以下几点用法以便大家以后使用。 python scapy 抓包与解析 转载请注明来自:b0t0w1’blog ## 安…

基于Scapy的传统网络攻击实现

基于Scapy的传统网络攻击实现 前言开发环境与工具系统主要功能 系统原理分析协议工作原理ARP工作原理TCP工作原理 攻击原理及实现方法ARP扫描原理ARP欺骗原理SYN Flood攻击原理实现方法 功能设计功能描述 系统功能实现准备(Scapy的下载)ARP扫描的实现ARP…

Python Scapy使用方法

0x01 起航Scapy Scapy的交互shell是运行在一个终端会话当中。因为需要root权限才能发送数据包,所以我们在这里使用sudo $ sudo scapy Welcome to Scapy (2.0.1-dev) >>>123 在Windows当中,请打开命令提示符(cmd.exe)&…

python库:scapy使用

1、安装:sudo pip install scapy 2、查看scapy依赖关系: 2.3.2版本,不依赖任何python库。 3、使用help(scapy)查看帮助 就这么点,任何发送、接受数据包函数都没有看到,和以前的任何显示模块帮助都不一样 正确显示…

Scapy 中文文档:一、介绍

介绍 译者:pdcxs007 来源:Scapy介绍官方文档翻译 原文:Introduction 协议:CC BY-NC-SA 2.5 关于ScapyScapy为何如此特别快速的报文设计一次探测多次解释Scapy解码而不解释快速展示Quick demo合理的默认值学习Python 本人英文水平…

Scapy的介绍(一)

介绍 关于Scapy的 Scapy是一个Python程序,使用户能够发送,嗅探和剖析并伪造网络数据包。此功能允许构建可以探测,扫描或攻击网络的工具。 换句话说,Scapy是一个功能强大的交互式数据包操作程序。它能够伪造或解码大量协议的数据…

scapy基本操作

scapy基本操作 scapy是一款基于Python强大的数据包处理工具。它可以用来发送各类定制的数据包也可以用于数据包解析。 由于毕业论文需要对数据包进行预处理(数据清洗,数据归一化等),使用scapy进行数据处理。 本文是scapy学习过程…

Scapy的基本操作

Scapy模块的使用 Scapy的基本操作Scapy模块中的函数利用Scapy进行端口屏蔽探测 Scapy的基本操作 1.IP()类型数据包 在Scapy中,每一个协议就是一个类。只需要实例化一个协议类,就可以创建一个该协议的数据包。例如,如果要创建一个IP类型的数…

数据包工具--Scapy基础篇

数据包工具--Scapy基础篇 零、前言一、Scapy是什么?二、Scapy基础1 利用pip安装库2 基本使用2.1 conf变量2.2 lsc()方法2.3 ls()方法 3 发送数据3.1 创建数据3.2 发送数据3.3 fuzz()方法3.4 发送与接收数据 三、结尾 零、前言 学习过程中用到Scapy这个工具&#xf…

SCAPY官方教程一

一、Scapy简介 Scapy是一个强大的基于Python的交互式数据包操作程序和库。Scapy 使用 Python 解释器作为命令板,这意味着您可以直接使用 Python 语言(分配变量、使用循环、定义函数等) Scapy 是一个 Python 程序,它使用户能够发送、嗅探、剖析和伪造网络数据包。这种能力…

Python中Scapy使用方法,模块中的常用函数,简单的端口扫描编写

目录 scapy是什么 scapy的使用 IP() src()和dst() Ether() 采用分层的方式来构造数据包 raw()和hexdump() summary()和show() 如何在scapy中发送和接收数据包 send()和sendp() sr()、sr1()和srp() 简单的端口扫描 sniff() 使用scapy编写简单的端口扫描 scapy是什…