学习Python渗透第一天:Python中的Scapy库

由于数据包中的数据由多种协议组成,而为了解析方便,我们将这些协议大致分为四层,也就是TCP/IP协议,由下至上分别是:数据链路层,网络层,传输层,应用层。因为这些分层,数据包的结构变的清晰明了。而scapy库就是可以直接操作数据包里的这些层级的库。

1,构造数据包

(1),你想使用什么协议,就导入什么协议的包,比如这里使用IP协议的包

from scapy.all import IP

(2),如果你想操控的是IP的数据包,那就实例化一个IP的数据包,因为Scapy使用了“类+属性”的方法来构造数据包。

pakage=IP()

(3),接下来我们打印这个数据包,会得到从源IP到目的IP的一段数据,比如就像这样192.168.1.2 > 127.0.0.1 ip。这就是scapy中IP协议的作用。

print(pakage)

(4),在这个协议中,我们也能自己设置参数,比如设置包中的源IP,目的IP,以下两个,一个构造的是发往目的IP为192.168.1.1的数据包,一个是从源IP192.168.1.2发出的IP数据包。

ip=IP(dst ="192.168.1.1")
ip1=IP(src = "192.168.1.2")

(5),另外,在scapy中可以实现控制大量的网络协议(DNS,UDP,ARP,IP,TCP),而这些数据包中有哪些参数,需要设置哪些参数,如果靠脑子记的话,很麻烦,所以有方便的代码查询函数ls,通过ls,我们可以查询这个数据包中需要哪些参数。

from scapy.all import IP,ls

pak=IP()
ls(pak)

(6),如果一个数据包是由多个协议组成,那么每个协议需要按照TCP/IP的四层模型中从下到上的顺序,在python中按从左到右用/隔开,比如一个数据包中有数据链路层,网络层,传输层。

from scapy.all import Ether,IP,TCP
pak= Ether()/IP()/TCP()

(7),如果还要加上应用层的话可以这样构造

pak = Ether()/IP()/TCP()/ " GET HTTP/1.1\r\n\r\n"
#应用层的数据包分为三个部分,请求行,请求头,请求体,每个部分的参数用/隔开,每个部分用\r\n隔开,如果写完了后面没有内容了最后用两个\r\n隔开
#1,请求行:选择请求方法GET/POST,请求的资源或者地址,HTTP版本号
#2,请求头:选择请求的主机名,比如Host:baidu.com,代理信息User-Agent:xxxxx,请求体数据类型Content-Type:xxxx,客户端可接收的响应内容类型Accept:xxxxx
#3,请求体:要发给服务器的数据,比如post表单数据或者或者上传的文件内容

(8),scapy中常用的函数raw():以字节形式表示数据包内容

from scapy.all import IP,raw
pak=IP()
print(raw(pak)) 

(9),hexdump():以16进制表示数据包内容

from scapy.all import IP,hexdump
pak=IP()
print(hexdump(pak)) 

(10),summary():不超过一行的内容来描述数据包内容,show():使用展开视图的方式显示数据包的详细信息,command():显示构造该数据包的命令,这几个是自带函数,不用导入包

from scapy.all import IP
pak=IP()
pak.summary()
pak.show()
pak.command()

(11),wrpcap():将捕获到的数据包打包保存起来

from scapy.all import IP,wrpcap


pak = IP()
wrpcap("temp.cap",pak)

(12),readcap():读取数据包

from scapy.all import IP,rdpcap


pak = IP()
paks=rdpcap("temp.cap")

2,发送和接收数据包

以上我们将的都是如何产生了一个数据包,但是并没有发送,也不能接收别人发来的数据包,所以我们接下来讲发送和接收数据包

(1),send():发送IP数据包,sendp():发送Ether数据包,也就是数据链路层的数据包,发送成功会显示send 1 packets,sendp的使用方式是一样的。

from scapy.all import IP,ICMP,send


pak = IP()/ICMP()
send(pak)

(2),我们不仅需要发送数据包,还需要接收响应的数据包,用于IP地址的是sr()和sr1(),用于mac地址的是srp()

sr()函数的返回值是两个列表,一个收到应答的数据包,一个是未收到应答的数据包,所以需要用两个列表来保存返回值,而sr1()只返回一个列表,也就是只返回收到应答的数据包,srp()与sr()的区别就是发送时需要使用mac地址

from scapy.all import IP,ICMP,send,sr


pak = IP(dst="192.168.1.1")/ICMP()
ans,uans=sr(pak)
ans.summary()

3,抓取数据包

构造,发送,接收数据包我们都接触了,那如果我们想要获得其他地址的数据包怎么办呢,不要怕,scapy也能办到,scapy中有过滤函数scniff(),可以过滤特定地址的数据包,从而实现抓取你想要的地址的数据包的功能。

(1)sniff()中有很多参数,下面我们一一来讲解:

第一个参数filter:这是用来设置过滤器,用于捕获过滤器格式的数据包,通常使用BFP(伯克利包过滤)机制来设置过滤器,BFP过滤中有三种限定符:

type:表示迭代对象,也就是你要过滤的host(主机地址),net(子网),port(端口),没有指定默认host。

dir:表示数据包传输方向:src(源IP地址),dst(目的IP地址),没有指定默认为src or dst。

proto:表示匹配的协议类型:常见的就是Ether,TCP,IP协议。

过滤中我们还能使用or and not这些连接词组合复杂的过滤语句,下面举一些例子:

dst host 192.168.1.1:当数据包的目的地址为192.168.1.1时,进行捕获。

ether dst 11.22.33.44.55.66:当数据包目的地址为11.22.33.44.55.66时,进行捕获。

dst net 192.168.1.0/24:当数据包目的地址在192.168.1.0-192.168.1.255这一区间时,进行捕获。

dst port 8080:当数据包时TCP或UDP协议且端口号为8080时,进行捕获。

第二个参数iface:用来指定使用的网卡,默认第一张网卡。

第三个参数prn:表示对捕获到的数据包进行处理的函数,也就是这样sniff(prn=pak_function),pak_function是一个自己定义的函数。

第四个参数count:用来指定监听到的数据包的数量,达到指定的数量就会停止,比如监听到4个就结束,sniff(count=4)。

第五个参数stop_filter:可以自定义停止捕获的条件函数,跟prn差不多,值也是一个函数。

第六个参数timeout:指定捕获数据包的超时时间。

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scapy是一个强大的交互式数据包处理程序,使用Python编写。它可以伪造或解码各种网络协议的数据包,发送、捕获、匹配请求和回复包等等。它可以轻松处理一些常见操作,如端口扫描、tracerouting、探测、单元测试、攻击或网络发现。Scapy还具有一些其他优秀的特性,如发送无效数据帧、注入修改的802.11数据帧、解码加密通道(VOIP)上的WEP、ARP缓存攻击(VLAN)等。它是其他工具无法完成的任务的理想选择。\[3\] 在使用Scapy之前,你需要导入相关的模块。例如,你可以使用以下代码导入Scapy的相关模块: ``` from scapy.layers.inet import * from scapy.all import * ``` 接下来,你可以使用Scapy构造数据包、发送数据包、捕获数据包等等。你可以使用`IP()`、`TCP()`等函数构造不同类型的数据包,并使用`send()`或`sendp()`方法发送数据包。你还可以使用`sniff()`函数来捕获数据包,并指定过滤条件、网卡、处理函数和捕获数量等参数。你还可以使用`wrpcap()`和`rdpcap()`函数来保存和读取数据包。\[2\] 总之,Scapy是一个功能强大的Python,用于处理网络数据包。它提供了丰富的功能和灵活的接口,使得网络数据包的处理变得更加简单和高效。 #### 引用[.reference_title] - *1* *2* [Python-scapy](https://blog.csdn.net/qingguaxiaoxiao/article/details/131170191)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [python———scapy(数据包发送)](https://blog.csdn.net/weixin_43803070/article/details/90549701)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值