Scapy学习笔记之常见‘层’(Layer)的详解

本文详细介绍了Scapy中数据包的层次结构,包括数据链路层、网络层(如IP、ARP)、传输层(TCP、UDP)和应用层(DNS),并展示了各层的关键参数及其作用。后续文章将探讨sr和srpAPI的使用及其响应结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

因官方文档中对一些函数API与部分的基础概念讲解比较笼统或者难以理解(不讲人话),所以本文准备对其进行一些补充

我在上一篇文章中探讨了关于Scapy的基本的数据包对象的结构和如何形象去理解Scapy为什么要将数据包的定义语句设置成这样,感兴趣的可以去看看:
Scapy学习笔记之数据包的结构

今天这篇文章,笔者来讨论一下Scapy中一些常见的 的基本概念,与其内部的一些参数的解释,要理解以下的内容,最好有计算机网络Scapy基本的数据包的结构的知识,因为Scapy的内核就是我们熟悉的计算机网络中讲的数据包的概念


一、层(Layer)是什么?

二、一些常见的层有哪些?

以下会列举部分常见的层,我们从底层向高层看

  1. 数据链路层
  • Ether():如图,使用ls(Ether())查看其内部字段
    请添加图片描述
    • dst:destination MAC – 数据帧目标MAC地址
    • src:source MAC – 数据帧的源MAC地址,即发送这个包的网卡的MAC地址,以上就是我的网卡的MAC地址(默认,毕竟是可以改的)
    • type:以太网类型,指示上层协议的类型,常见的有ipv4(0x0800),ARP(0x0806),ipv6(0x86dd)

注:一般如果构造出的数据包要在局域网中传输时,会加上Ether(),可以为数据包指定MAC地址,比如构造ARP包来探测局域网中的主机。
arp_pkt =Ether(dst=‘FF:FF:FF:FF:FF:FF’)/ARP(pdst=‘192.168.124.0/24’) 这是构造一个ARP数据包,将其广播出去,ARP()后面会有简单的解释
pdst(目标地址应该在发送主机的同一个网段中,因为网关一般是不会转发ARP的请求包的,但ping发送的ICMP包是可以被转发的)

  1. 网络层
  • IP():如图,使用ls()查看IP()请添加图片描述
    • ion:IP协议版本号,默认为4,也可以为6(ipv6)
    • ihl:IP包头长度(Internet Header Length),指定IP包头的长度,以32位字(4字节)为单位算。
    • tos:服务类型(Type of Service),指定IP包的优先级、Qos(Quality of Service)和特定服务要求。
    • len:IP数据包的总长度,包括IP包头和IP包载荷(Payload)的长度。如果未指定,默认会根据实际的包头和载荷计算得出
    • id:IP数据包的表示符(identifier),通常用于数据包重组和相关性
    • flags:用于设置标志位和片偏移(Fragmentation Offset)
    • frag:IP数据包是否需要分片,以及分片的偏移量
    • ttl:生存时间(Time to live),指定数据包在网络中的最大存活时间(跳数)
    • proto:上层协议类型,指IP包的上层协议,如TCP(6)或UDP(17)
    • src:源IP地址(Source IP Address)
    • dst:目标IP地址(Destination IP Address)

注:其中version、src、dst使用较多,其他一般默认值,proto会根据上层协议自动填充

  • ARP():
    在这里插入图片描述
    • op:指定ARP操作类型(ARP operation)。常用的操作类型包括请求(op=1)和应答(op=2)。
    • hwtype:指定硬件类型(Hardware type),默认为1,表示以太网。
    • ptype:指定协议类型(Protocol type),默认为0x0800,表示IPv4。
    • hwlen:指定硬件地址长度(Hardware address length),默认为6,表示以太网MAC地址的长度。
    • plen:指定协议地址长度(Protocol address length),默认为4,表示IPv4地址的长度。
    • hwdst:指定目标硬件地址(Target hardware address),即目标主机的MAC地址。
    • pdst:指定目标协议地址(Target protocol address),即目标主机的IP地址。
    • hwsrc:指定源硬件地址(Source hardware address),即源主机的MAC地址。
    • psrc:指定源协议地址(Source protocol address),即源主机的IP地址。

注:hwsrc、psrc一般会默认被设置成自己的主机的网卡的MAC与IP

  1. 传输层
  • TCP():如图请添加图片描述
    • sport:源端口号,发送方的端口号
    • dport:目标端口号
    • seq:序列号(Sequence Number),用于标识数据包在TCP连接中的顺序
    • ack:确认号(Acknowledgment Number),用于确认接收到的数据包的序列号
    • dataofs:数据偏移量(Data Offset),指示TCP包头的长度,以32位字(4字节)为单位计算
    • reserved:保留字段(Reserved Bits),一些保留用于特定目的的比特位
    • flags:用于设置标志位的比特位,包括ACK,SYN,FIN等。通过设置这些标志位,可以控制TCP的连接建立、数据传输和连接关闭过程
    • window:窗口大小(Window Size),指示发送方预留用于接收缓冲的字节数
    • chksum:校验和(Checksum),用于验证TCP数据包中紧急数据的位置
    • urgptr:紧急指针(Urgent Pointer),指示TCP数据包中紧急数据的位置
    • options:可选字段(Options),用于在TCP包头中添加各种选项

注:sport、dport、seq、ack、flags使用较多

  • UDP():
    请添加图片描述
    • sport:源端口号
    • dport:目标端口号
    • len:UDP数据包的长度,包括UDP头部和数据部分的长度,若为指定则默认会根据实际头部和数据计算得出
    • chksum:校验和,用于检验UDP头部和数据的完整性

注:sport、dport使用较多

  1. 应用层
  • DNS()
    请添加图片描述
    • id:标识符(identifier),用于唯一标识一个DNS查询或响应
    • qr:查询/响应标志位(Query/Response),指示该数据包是一个查询请求还是一个响应
    • opcode:操作码(Opcode),指示DNS消息的类型,例如查询、更新
    • aa:授权回答标志位(Authoritative Answer),指示响应是否是权威回答
    • tc:截断标志位(Truncated),指示响应是否被截断
    • rd:递归查询标志位(Recursion Desired),指示发起者是否希望进行递归查询
    • ra:递归可用标志位(Recursion Available),指示DNS服务器是否支持递归查询
    • z:预留字段(Reserved),保留未来使用
    • rcode:响应码(Response Code),指示响应的状态,例如成功、格式错误、服务器失败等
    • qd:查询部分(Question Section),包含域名查询的相关信息,如域名和查询类型
    • an:回答部分(Answer Section),包含DNS响应中的回答记录
    • ns:权威部分(Authority Section),包含响应中的权威记录
    • ar:附加部分(Additional Section),包含响应中的附加记录

注:这些高级的应用层协议的操作就比较丰富,这里就举一个简单的DNS的例子
dns_pkt = IP(dst=‘192.168.124.1’)/UDP()/DNS(id=1234, qd=DNSQR(qname=‘www.baidu.com’, qtype=“A”))
这里定义了一个查询百度网址的IP地址的dns数据包,未指定的参数会使用默认值


总结

本篇文章旨在起一个抛砖引玉的作用,笔者认为只掌握了这几种典型的层的用法,其他的层的使用方法也类似,我们清楚了从哪一个角度去分析 ,使用它。
另外,笔者的下一篇文章准备写sr()、srp()这一类的用于发送与接收数据包的API的用法、区别以及其响应的数据包的结构是怎样的,应该如何处理获取其数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值