Scapy编程指南(基础概念)

news2024/9/24 21:18:05

Scapy编程指南(基础概念)

Scapy是什么

Scapy是Python中一个非常强大的库,它专门用于处理、发送和捕获网络协议中的数据包,它允许开发人员通过Python代码构建、解析和发送自定义网络协议的数据包。Scapy提供了一种直观、灵活的方式,使用户能够深入研究和操作网络层次的细节。

在这里插入图片描述

一、构造协议数据报文

scapy可以构造各种网络协议的数据包。用户可以使用Scapy定义协议头、字段和载荷,然后构建出符合特定协议规范的数据包。

  1. Ether(): 构造以太网帧。
  2. IP(): 构造IP数据报。
  3. TCP(): 构造TCP报文。
  4. UDP(): 构造UDP报文。
  5. ICMP(): 构造ICMP报文。
  6. ARP(): 构造ARP请求和响应。
  7. Raw() - 构造原始数据包
二、捕获协议数据报文

scapy可以指定计算机网络接口,去捕获该接口传输的协议数据报文,并且能根据规则过滤出需要的协议数据报文。

sniff(): 捕获数据包

三、发送协议数据报文

Scapy提供了多种方式来发送协议数据报文,具体取决于用户的需求和场景。

  1. send() - 发送数据包

  2. sendp() - 发送数据包并在数据包中包含Layer 2头部信息

  3. sr() - 发送并接收数据包,返回接收到的响应

  4. sr1() - 发送并接收数据包,返回第一个接收到的响应

  5. srloop() - 发送并循环接收数据包

  6. sendpfast() - 以更高的速度发送数据包,通常用于性能要求较高的场景。

  7. srp() - 类似于sr(),但是针对数据包进行二层处理,常用于以太网数据包的发送和接收。

  8. sendpfast() - 高速发送数据包,类似于sendp(),但设计用于更高的性能。

四、分析协议数据报文

Scapy提供了多种功能来分析协议数据报文,让用户深入研究和了解网络通信的细节。

  • ls() :用于列出所有已知的协议和字段。该命令的作用是展示协议和字段的层次结构以及它们的关系。

pkt是数据包对象:

  1. pkt.time - 数据包的时间戳。
  2. pkt.len - 数据包的长度。
  3. pkt.summary() - 显示数据包的摘要信息,包括源地址、目标地址等。
  4. pkt.show() - 显示详细的数据包信息,包括协议头、字段和载荷等,它提供了更全面的输出,包括每个字段的详细信息,适合深入分析单个数据包的结构和内容。
  5. pkt.show2()类似show(),不过他显示是简要信息,通常会提供比较简洁的输出,适合在大量数据包中快速查看关键信息。
  6. pkt.haslayer(proto) - 检查数据包是否包含指定的协议层。
  7. pkt.getlayer(proto) - 获取数据包中指定协议层的实例。
  8. pkt.command() - 返回生成当前数据包的Scapy命令。
  9. pkt.hexdump() - 以十六进制格式显示数据包的内容。

网络分层结构

想学好scapy,就必须要对网络报文要有所了解,理解 TCP/IP 协议栈的层次结构对学习 Scapy 和进行网络编程非常重要。TCP/IP 协议栈分为四个层次,从低到高分别是链路层(数据链路层)、网络层、传输层和应用层。这些层次提供了不同的功能,每个层次都有特定的协议和数据单元。

img

在初步学习了Scapy库中的部分常用函数后,一定要对协议数据包进行一定的熟悉,要明白一个数据包要怎么层层封装,在TCP\IP协议族中,是从应用层->传输层->网络层->数据链路层进行封包传输,而在scapy中,却要从Ether(数据链路层)->IP(网络层)->TCP\UDP(传输层)->HTTP/DNS(应用层)进行封装,Scapy构建数据包的过程是从底层到高层逐步封装

  1. 链路层(数据链路层):
    • 功能:处理与物理媒体的通信,负责将数据帧从一个网络设备传输到相邻的网络设备。
    • 协议:Ethernet、ARP(地址解析协议)等。
    • Scapy 对应的对象:Ether()ARP()

image-20240124200651036

  1. 网络层:
    • 功能:提供端到端的数据传输,实现数据包的路由和转发。
    • 协议:IP(Internet 协议)等。
    • Scapy 对应的对象:IP()ICMP()

image-20240124201054792

  1. 传输层:
    • 功能:提供端到端的通信,保证数据的可靠传输。
    • 协议:TCP(传输控制协议)、UDP(用户数据报协议)等。
    • Scapy 对应的对象:TCP()UDP()

image-20240124201032239

  1. 应用层:
    • 功能:为应用程序提供网络服务,处理特定的应用层协议。
    • 协议:HTTP、FTP、DNS 等。
    • Scapy 对应的对象:DNS()HTTP()

image-20240124201222974

使用 Scapy 时,我们可以根据需要构建和操作这些不同层次的数据包。例如,你可以创建以太网帧(Ether())并在其上添加 IP 头(IP())、TCP 头(TCP())等,以模拟整个通信过程。

构造数据包

在Scapy中,可以使用简单而灵活的语法构造各种网络数据包。以下是一些基本的Scapy数据包构造示例:

构造一个简单的IP数据包
from scapy.layers.inet import IP

# 构造一个简单的IP数据包
ip_packet = IP(src="192.168.1.1", dst="192.168.1.2")

# 打印数据包信息
print(ip_packet.show())

image-20240124193120458

构造一个TCP数据包
from scapy.layers.inet import IP, TCP

# 构造一个IP数据包和TCP数据包
tcp_packet = IP(src="192.168.1.1", dst="192.168.1.2") / TCP(dport=80, flags="S")

# 打印数据包信息
print(tcp_packet.show())

image-20240124193208376

构造一个UDP数据包
from scapy.layers.inet  import IP, UDP

# 构造一个IP数据包和UDP数据包
udp_packet = IP(src="192.168.1.1", dst="192.168.1.2") / UDP(dport=53)

# 打印数据包信息
print(udp_packet.show())

image-20240124193244160

构造一个ICMP数据包
from scapy.layers.inet import IP, ICMP

# 构造一个IP数据包和ICMP数据包
icmp_packet = IP(src="192.168.1.1", dst="192.168.1.2") / ICMP()

# 打印数据包信息
print(icmp_packet.show())

image-20240124193354367

构造一个ARP数据包
from scapy.layers.l2 import ARP ,Ether 

#构造ARP请求包
arp_packet = Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst="192.168.1.1")

print(arp_packet.show)

image-20240124193423538

构造一个HTTP数据包
from scapy.layers.all import IP,TCP,HTTP

#构造HTTP请求包
http_packet = IP(dst="192.168.1.1") / TCP(dport=80) /"GET HTTP/1.1\r\nHost:192.168.1.5"

print(http_packet)

image-20240124201854624

总结

Scapy 是一款功能强大的网络工具库,具有灵活性和广泛的协议支持。它提供了丰富的功能,让用户能够直观地操作网络数据包,进行网络分析和实验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1408842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java代码审计原生反序列化CC链跟踪分析

希望和各位大佬一起学习,如果文章内容有错请多多指正,谢谢! 个人博客链接:CH4SER的个人BLOG – Welcome To Ch4sers Blog 在前一篇文章我分析了Commons Collections1链​​​​​​​,其中跟链的顺序是&#xff1a…

【jetson笔记】vscode远程调试

vscode安装插件 vscode安装远程插件Remote-SSH 安装完毕点击左侧远程资源管理器 打开SSH配置文件 添加如下内容,Hostname为jetson IP,User为登录用户名需替换为自己的 Host aliasHostName 192.168.219.57User jetson配置好点击连接,控制台输…

阿里云推出第八代企业级实例 g8i:AI 推理性能最高提升 7 倍、可支持 72B 大语言模型

云布道师 1 月 11 日,全球领先的云计算厂商阿里云宣布推出第八代企业级通用计算实例 ECS g8i,这也是国内首款搭载第五代英特尔至强可扩展处理器(代号 EMR)的云计算产品。依托阿里云自研的「飞天CIPU」架构体系,ECS g8…

【每日一题】3.LeetCode——相交链表

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢迎各位大佬指点&…

Linux-共享内存

文章目录 前言一、system V共享内存申请共享内存挂载共享内存删除共享内存挂载删除共享内存 二、示例代码三.运行效果 前言 在这之前我们已经学习了两种进程间通信方式:匿名管道和命名管道。 从我们之前的学习已经知道,想让多个进程间进行通信就需要让他…

重构改善既有代码的设计-学习(四):简化条件逻辑

1、分解条件表达式(Decompose Conditional) 可以将大块代码分解为多个独立的函数,根据每个小块代码的用途,为分解而得的新函数命名。对于条件逻辑,将每个分支条件分解成新函数还可以带来更多好处:可以突出条…

业余爱好-生物信息学/生物化学/物理/统计学/政治/数学/概率论/AI/AGI/区块链

生物信息学 高等数学—元素和极限-实数的定义高等数学—元素和极限-实数的元素个数高等数学—元素和极限-自然数个数少于实数个数高等数学—元素和极限-无穷大之比较高等数学—元素和极限-级数的收敛高等数学—元素和极限-极限的定义数学分析与概率论人工智能AI数学基础——全套…

深度学习——pycharm远程连接

目录 远程环境配置本地环境配置(注意看假设!!!这是很多博客里没写的)步骤1步骤2步骤2.1 配置Connection步骤2.2 配置Mappings 步骤3 配置本地项目的远程解释器技巧1 pycharm中远程终端连接技巧2 远程目录技巧3 上传代码文件技巧4 …

云手机与实体手机的对比

在数字化时代,云手机作为一种虚拟手机在云端服务器上运行,与传统的实体手机相比存在诸多差异。让我们深入探讨云手机与实体手机之间的区别,以便更好地了解它们的特点和优势。 外观上的差异 实体手机具有实际的外观和重量,占据一定…

Java基础进阶02-xml

目录 一、XML(可拓展标记语言) 1.学习网站: 2.作用 3.XML标签 4.XML语法 5.解析XML (1)常见解析思想DOM 6.常见的解析工具 7.DOM4j的使用 8.文档约束 (1)概述 (2&#xf…

一种很新的阶乘

D-一种很新的阶乘_浙江机电职业技术学院第八届新生亮相赛(同步赛) (nowcoder.com) 首先可以看出[1,n]中的数a的次方在初始情况下是n - a 1,所以我们可以初始化一个w数组,w[i]存储的值为i的次方,注意w[i]的数据类型必须…

Spring Security架构

文章目录 过滤器回顾DelegatingFilterProxyFilterChainProxySecurityFilterChainSecurity Filters打印Security Filters将自定义过滤器添加到过滤器链 Handling Security ExceptionsSaving Requests Between AuthenticationRequestCachePrevent the Request From Being Saved R…

1.24号c++

C绪论 c是c语言的扩充,C包含了C的所有属性,换一句话说,C语言在C中都合法。 C语言编程思想:面向过程 c编程思想:面向对象 可以说在C中一切皆对象。 c的三大属性:封装,继承,多态。…

gin介绍及helloworld

1. 介绍 Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点 对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单&…

DeadLinkHunter工具

一、背景 二月底的时候,提到一个文档中心的链接有效性问题,文档中心的某个超链接跳转后,页面内容是空的或者提示页面内容不存在。 分析一下可知,其实文档中心的每个页面都有很多不定位置、不定数量的超链接,每个超链…

JS进阶-解构赋值(一)

扩展:解构赋值时Js特有的一种处理数据的方式,在Java中没有处理数据的方式 知识引入: 思考:在js中,在没有学习解构赋值之前,我们是如何获取数组的内容的? 以上要么不好记忆,要么书写麻…

css实现右边边框分割线 渐变色,边框四角样式

分割线 代码 .data-item:first-of-type {border-right: 2px solid;border-image: linear-gradient(to top,rgba(0, 0, 0, 0.1) 0%,rgba(81, 110, 197, 0.76) 50%,rgba(0, 0, 0, 0.1) 100%)1;padding: 15px 0;}四角边框样式 代码 .chart-box {cursor: pointer;background: line…

SSM项目集成Spring Security 4.X版本(使用spring-security.xml 配置文件方式)

目录 前言 实战开发: 一、Spring Security整合到SSM项目 1. pom文件引入包 2. web.xml 配置 3. 添加 spring-security.xml 文件 二、Spring Security实战应用 1. 项目结构 2. pom文件引入 3. web.xml 配置 4. Spring 配置 applicationContext.xml 5. sp…

PCB【过孔】

1、钻孔的费用通常占PCB制板费用的30%到40%,过孔钻孔(drill hole) 钻孔周围的焊盘区,这两部分的尺寸大小决定了过孔的大小。过孔越小,其自身的寄生电容也越小。在高速电路中希望越小越好。孔内径原则上要求0.2mm&#…

C4.5决策树的基本建模流程

C4.5决策树的基本建模流程 作为ID3算法的升级版,C4.5在三个方面对ID3进行了优化: (1)它引入了信息值(information value)的概念来修正信息熵的计算结果,以抑制ID3更偏向于选择具有更多分类水平…