广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python如何使用scapy模块发包收包
  • 624
分享到

Python如何使用scapy模块发包收包

2023-06-14 23:06:34 624人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章给大家分享的是有关python如何使用scapy模块发包收包的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对

这篇文章给大家分享的是有关python如何使用scapy模块发包收包的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

Python的优点有哪些

1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对代码格式的要求没有那么严格;2、Python属于开源的,所有人都可以看到源代码,并且可以被移植在许多平台上使用;3、Python面向对象,能够支持面向过程编程,也支持面向对象编程;4、Python是一种解释性语言,Python写的程序不需要编译成二进制代码,可以直接从源代码运行程序;5、Python功能强大,拥有的模块众多,基本能够实现所有的常见功能。

众所周知,我们每天上网都会有很多数据包需要发送,然后处理在接受在发送,这样一个循环往复的过程

Python如何使用scapy模块发包收包

这里就显示了很多数据包的发送接收数据,那什么是包呢?下面一起看看

包( packet )是网络通信传输中的数据单位,一般称之为数据包,其主要由源地址,目标地址,净载数据组成

它包括包头和包体,包头是固定长度,包体长度不变

简单了解下包的定义,下面我们来看看发包利器 scapy 的用法吧

一、常用命令

ls():显示所有支持的数据包对象,可带参数也可不带,参数可以是任意具体的包

Python如何使用scapy模块发包收包

可以看出,它包含了全部的内容,如果我们想详细查看某个模块中的内容,比如说我想查看 ARP ,tcp 的话了,可以这样:

Python如何使用scapy模块发包收包

在这里要告诉大家的是,我们必须要注意大小写,ls(ARP)这样才可以得出正确结果,ls(arp)是错误的。

lsc():列出所有函数

Python如何使用scapy模块发包收包

满屏的英文,我头都是大的,不知道大家此时此刻是什么样的心情,哈哈哈哈

hide_defaults():用来删除一些用户提供的那些和 default value 相同的项目

a=IP()print(a.hide_defaults())

display():可以简单查看当前 packet 的各个参数的取值情况,

a=IP()a.display()

更多命令

命令                                  作用show_interfaces()                  显示网卡信息str(pkt)                            组装数据包hexdump(pkt)                        十六进制转储ls(pkt)                          显示出字段值的列表pkt.summary()                        一行摘要pkt.show()                      针对数据包的展开视图pkt.show2()             显示聚合的数据包(例如,计算好了的校验和)pkt.sprintf()                   用数据包字段填充格式字符串pkt.decode_payload_as()         改变payload的decode方式pkt.psdump()                绘制一个解释说明的PostScript图表pkt.pdfdump()                   绘制一个解释说明的PDFpkt.command()               返回可以生成数据包的Scapy命令nsummary()                      同上,但规定了数据包数量conversations()                     显示一个会话图表filter()                    返回一个lambda过滤后的数据包列表hexdump()                       返回所有数据包的一个hexdumpimport_hexcap()                 将hexdump重新导入到Scapy中hexraw()                    返回所有数据包Raw layer的hexdumppadding()                   返回一个带填充的数据包的hexdumpnzpadding()                 返回一个具有非零填充的数据包的hexdumpplot()                      规划一个应用到数据包列表的lambda函数make table()                    根据lambda函数来显示表格traceroute("baidu.com")     查看IP路径的traceroute功能export_object()             数据包转换成base64编码的Python数据结构import_object()                     可以将输出重新导入save_session()                  保存所有的session变量load_session()                  读取保存的sessionfuzz()      更改一些默认的不被计算的值(比如校验和checksums),更改的值是随机的,但是是符合字段的值的。

二、嗅探数据包

from scapy.all import *pkt = sniff(iface = "Realtek PCIe GBE Family Controller",count = 3 ,filter='tcp',prn = lambda x: x.sprintf('{IP:%IP.src%->%IP.dst%\n}{Raw:%Raw.load%\n}'))filter:过滤条件iface:网卡接口名称count:数据包数量prn:回调函数,通常与lambda搭配使用sprintf()函数控制输入信息抓取源地址为192.168.3.3的端口为80的tcp报文:sniff(filter="ip src 192.168.3.3 and tcp and tcp port 80", prn=lambda x:x.summary())抓取目的地址网段为192.168.3.3/24的报文:sniff(filter="dst net 192.168", prn=lambda x:x.summary())抓取非ICMP的报文:sniff(filter="not icmp", prn=lambda x:x.summary())将抓取到的报文的summary打印出来:sniff(filter="icmp", prn=lambda x:x.summary(), count=10)将所有IP报文的源地址打印出来:sniff(filter="icmp", prn=lambda x:x[IP].src, count=10)

三、构造数据包

pkt= Ether()/IP(dst='192.168.1.2')/TCP(dport=80)

提到数据包,不得不说各个协议了,提到协议,又自然而然想到了 osi 七层模型

OSI 七层网络模型TCP/IP 四层概念模型对应网络协议
应用层(Application)应用层Http、TFTP, FTP, NFS, WAIS、SMTP
表示层(Presentation)应用层Telnet, Rlogin, SNMP, Gopher
会话层(Session)应用层SMTP, DNS
传输层(Transport)传输层TCP, UDP
网络层(Network)网络层IP, ICMP, ARP, RARP, AKP, UUCP
数据链路层(Data Link)数据链路层FDDI, Ethernet, Arpanet, PDN, SLIP, PPP
物理层(Physical)数据链路层IEEE 802.1A, IEEE 802.2到IEEE 802.11

以上便是各个网络协议对应的 osi 模型,那么各个协议的用法是怎样的了,下面我们一起来看下

四、各个协议用法

构造一个 IP 包,并传入一些参数

#构造一个 IP 包,并传入一些参数pkt = IP(dst="192.168.1.2",ttl=10)ls(pkt)  version:版本号ihl:头长度tos:服务类型len:IP数据包总长id:标识符flags:标记flag:片偏移ttl:生存时间proto:协议类型chksum:头部校验src:源IP地址dst:目的IP地址options:可选项

构造ARP包

#构造ARP包ARP(op=1, hwdst="ff:ff:ff:ff:ff:ff", pdst=ip_address)#arp类的构造函数列表:ls(ARP)hwtype     : XShortField          = (1)  值为1表示以太网地址,其它还可能表示令牌环地址ptype      : XShortEnumField      = (2048)  0x0800表示IP地址,其它还可能是ICMP/IGMPhwlen      : ByteField            = (6)   ARP报文中,它的值为6plen       : ByteField            = (4)  ARP报文中,它的值为4op         : ShortEnumField       = (1) 取值为1或者2,代表ARP请求或者响应包。1.ARP请求,2.ARP应答,3.RARP请求,4.RARP应答 hwsrc      : ARPSourceMacField    = (None) 发送方Mac地址。psrc       : SourceIPField        = (None) 发送方IP地址。hwdst      : MACField             = ('00:00:00:00:00:00') 目标Mac地址。pdst       : IPField              = ('0.0.0.0') 目标IP地址。

构造Ether

#构造EtherEther(dst="ff:ff:ff:ff:ff:ff")ls(Ether)dst        : DestMACField         = (None) 目的MACsrc        : SourceMACField       = (None) 源MACtype       : XShortEnumField      = (36864)构造一个以太网数据包通常需要指定目标和源MAC地址,如果不指定,默认发出的就是广播包ff:ff:ff:ff:ff:ff

构造TCP包

#构造TCP包sport      : ShortEnumField                      = 20              (20) 目标端口dport      : ShortEnumField                      = 80              (80)  源端口seq        : IntField                            = 0               (0)ack        : IntField                            = 0               (0)dataofs    : BitField (4 bits)                   = None            (None)reserved   : BitField (3 bits)                   = 0               (0)flags      : FlagsField (9 bits)                 = <Flag 2 (S)>    (<Flag 2 (S)>)window     : ShortField                          = 8192            (8192)chksum     : XShortField                         = None            (None)urgptr     : ShortField                          = 0               (0)options    : TCPOptionsField                     = []              (b'')

五、发包,收包

可分为两种情况,用法如下:

只发不收

send(pkt, inter=0, loop=0, count=1, iface=N) pkt:数据包inter:发包间隔时间count:发包数量iface:网卡接口名称send(),在第三层发包,没有接收功能;send(IP(dst="www.baidu.com",ttl=2)/ICMP())sendp(),在第二层发包,没有接收功能。sr(Ether()/IP(dst=www.baidu.com))

发包且收包

sr()和sr1()都是在第三层发包,sr1表示只接收第一个回复。sr(IP(dst="www.baidu.com",ttl=(1,4))/TCP(dport=[21,23,80],flags="S")) 返回两个值sr1(IP(dst="www.baidu.com",ttl=(1,4))/ICMP()) srloop(IP(dst="www.baidu.com",ttl=1)/ICMP()) #不停的ping百度srloop(IP(dst="www.baidu.com",ttl=1)/ICMP(),inter=3,count=2) #每隔3秒ping一次,一共执行两次#inter表示间隔,count记录次数srp()和srp1()都是根据第二层发包,srp1表示只接收第一个回复srp(Ether()/IP(dst="www.baidu.com"))srp1(Ether()/IP(dst=www.baidu.com))

六、SYN半开式扫描

当 TCP 链接指定端口时,flags 参数设为 S 时则为半开式扫描,若此时该端口处于监听状态,返回 syn/ack,否则返回 rst/ack

sr1(IP(dst="192.168.1.2")/TCP(dport=80,flags="S"))

七、数据包序列化,反序列化

序列化:将数据包对象保存为 pcap 文件

反序列化:读取 pcap 文件中的内容

pkt= Ether()/IP(dst='192.168.1.2')/TCP(dport=80)#将嗅探到的数据包内容写到pcap文件中 wrpcap("hw.pcap",pkt)#读取pcap文件。read=rdpcap('hw.pcap')print(read[1])#打印嗅探到的包的数据

八、数据包与字符串转换

更加直观清晰的分析数据。

zfc= str(pkts[0]) z= Ether(zfc)

九、导入导出 base64 编码

为了方便我们对数据进行加密而发明的一种方式

export_object(str(pkts[0])) 导出数据包new_Pkt = import_object() #将上一步导出的字符串填入

十、离线数据包的解析

如果我们捕获到数据包,未联网的情况下如何解析呢?

现在就可以使用我们的离线数据包分析数据了:

sniff(offline = "hw.pcap")#离线数据包

感谢各位的阅读!关于“Python如何使用scapy模块发包收包”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Python如何使用scapy模块发包收包

本文链接: https://www.lsjlt.com/news/275902.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python使用scapy模块发包收包
    前言 众所周知,我们每天上网都会有很多数据包需要发送,然后处理在接受在发送,这样一个循环往复的过程 这里就显示了很多数据包的发送接收数据,那什么是包呢?下面一起看看 包( packet )是网络通信传输中的数据单...
    99+
    2022-06-02
    Python scapy python 发包收包
  • Python如何使用scapy模块发包收包
    这篇文章给大家分享的是有关Python如何使用scapy模块发包收包的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对...
    99+
    2023-06-14
  • 如何使用Python中的发包收包利器Scapy
    这篇文章将为大家详细讲解有关如何使用Python中的发包收包利器Scapy,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。今天跟大家讲的是Python 用于发送接受网络数据包的模块------...
    99+
    2023-06-15
  • 如何在Python中使用zipfile压缩包模块
    这期内容当中小编将会给大家带来有关如何在Python中使用zipfile压缩包模块,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。简介ZIP 文件格式是一个常用的归档与压缩标准,zipfile 模块提供了创...
    99+
    2023-06-15
  • Python中的zipfile压缩包模块如何使用
    这篇文章主要介绍“Python中的zipfile压缩包模块如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python中的zipfile压缩包模块如何使用”文章能帮助大家解决问题。简介ZIP ...
    99+
    2023-07-06
  • Python中如何使用语句导入模块或包
    小编给大家分享一下Python中如何使用语句导入模块或包,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!  从一个模块导入全部  from import * mea...
    99+
    2023-06-02
  • Python中zipfile压缩包模块的使用
    简介 ZIP 文件格式是一个常用的归档与压缩标准,zipfile 模块提供了创建、读取、写入、添加及列出 ZIP 文件的工具 此模块目前不能处理分卷 ZIP 文件,支持解密 ZIP 归档中的加密文件,但是目前不能创建...
    99+
    2022-06-02
    Python zipfile
  • Python如何引入同级包和模块
    目录如何引入同级包和模块工程项目结构如下首先是Gound.py引入Animal模块Sky和Sea同理测试结果如何导入同级.py文件导入.py文件的所有方法如何引入同级包和模块 工程项...
    99+
    2022-11-13
  • Python如何使用email、smtplib、poplib、imaplib模块收发邮件
    一封电子邮件的旅程是:Mail User Agent (MUA) refers to an email client or software used by a user to access their email account.。(即类...
    99+
    2023-05-17
    Python email smtplib
  • Python打包开发技术:如何使用函数进行模块化编程?
    Python是一种非常流行的编程语言,它具有简单易学、可读性强等优点。在Python的开发过程中,我们经常需要将代码进行模块化处理,以便于代码管理和复用。在本文中,我们将介绍Python打包开发技术中的一个重要内容,即如何使用函数进行模块...
    99+
    2023-07-22
    打包 开发技术 函数
  • 关于Python中zipfile压缩包模块的使用
    目录简介解压文件是否ZIP文件读取元数据从其他数据源压缩文件写入ZipInfo追加文件创建包含Python库的ZIP简介 ZIP 文件格式是一个常用的归档与压缩标准,zipfile&...
    99+
    2023-05-15
    Python zipfile Python 压缩包模块 zipfile压缩包模块
  • Node.js模块与npm包管理器如何使用
    本篇内容主要讲解“Node.js模块与npm包管理器如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node.js模块与npm包管理器如何使用”吧!require函数作用:在当前模块中加载...
    99+
    2023-06-29
  • Python使用poplib模块和smtplib模块收发电子邮件的教程
    poplib模块接收邮件 python的poplib模块是用来从pop3收取邮件的,也可以说它是处理邮件的第一步。 POP3协议并不复杂,它也是采用的一问一答式的方式,你向服务器发送一个命令,服务器必然会回...
    99+
    2022-06-04
    模块 收发电子邮件 教程
  • Python中的模块和包是如何工作的?
    Python中的模块和包是如何工作的?Python作为一门强大的编程语言,拥有丰富的标准库,同时也支持自定义的模块和包,这使得程序的组织和复用更加简单和高效。本文将介绍Python中模块和包的基本概念,并通过具体的代码示例来说明它们是如何工...
    99+
    2023-10-22
    工作 模块
  • 怎么搞懂Python模块、包的区别和使用
    怎么搞懂Python模块、包的区别和使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、模块和包的定义模块的定义:任何*.py 的文件都可以当作模块使用imp...
    99+
    2023-06-04
  • 使用maven-assembly-plugin如何打包多模块项目
    目录maven-assembly-plugin打包多模块项目概述1. 需求2. 打包流程使用maven-assembly-plugin插件来定制化打包使用内置的Assembly De...
    99+
    2022-11-13
  • 如何使用r.js打包模块化的javascript文件
    这篇文章主要介绍了如何使用r.js打包模块化的javascript文件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。简单打包【项目结构】以一...
    99+
    2022-10-19
  • python 包(模块 函数 类 定义 导入)使用详解
    目录python 包的模块 函数 类 定义 导入使用详细说明python 包的模块 函数 类 定义 导入使用详细说明 下面是一个使用 Python 包的详细案例,它涉及到模块、函数...
    99+
    2023-03-24
    python 包使用 python 包
  • Python压缩包处理模块zipfile和py7zr怎么使用
    这篇“Python压缩包处理模块zipfile和py7zr怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python...
    99+
    2023-07-02
  • 如何使用Go语言打包和加载HTTP模块?
    Go语言是一种简单、高效的编程语言,它被广泛应用于各种领域,特别是在Web开发中。HTTP模块是开发Web应用程序中必不可少的一部分,Go语言提供了许多方便的工具来打包和加载HTTP模块。在本文中,我们将介绍如何使用Go语言打包和加载HTT...
    99+
    2023-10-18
    http 打包 load
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作