互联网技术 / 互联网资讯 · 2024年1月2日

Scapy基础知识:数据包处理的利器

什么 是scapy

Scapy是功能强大的交互式数据包处理程序。它能够伪造或解码各种协议的数据包,在线发送,捕获,匹配请求和响应等。它可以轻松处理大多数经典任务,例如扫描,跟踪路由,探测,单元测试,攻击或网络发现,它可以代替hPING,aRpspoof,aRp-sk,aRPING,p0f甚至NMap,TCPduMp和tshaRk的某些部分。它在其他工具无法处理的许多其他特定任务上也表现出色,例如发送无效帧,组合技术(VLAN跳变+ ARP缓存中毒,WEP加密通道上的VOIP解码等等)

安装scapy

直接pIP安装即可,我使用的是Python3

pIP3 install scapy  scapy基本使用

输入scapy回车进入scapy的Shell 可以使用ls()来查看scapy支持的协议

使用lsc()查看scapy支持的函数

还可以使用ls()获取协议包含的参数

发送和接收数据包

send

– 在第3层发送数据包(Scapy创建第2层标头),不接收任何数据包。

loop 参数默认为0,如果它的值不是0,那么数据包将一直循环发送,直到按CTRL-C为止。 count 可用于设置要发送的数据包的确切数量。 inteR 可用于设置每个数据包之间的秒数。 >> send(IP(dst=’8.8.8.8′)/TCP(dpoRt=53, flags=’S’)) . Sent 1 packets. >> send(IP(dst=’8.8.8.8′)/TCP(dpoRt=53, flags=’S’), count=10) ………. Sent 10 packets. >> send(IP(dst=’8.8.8.8′)/TCP(dpoRt=53, flags=’S’), loop=1) ……………………. [… snIPped …] Sent 1503 packets.

sendp

与send()相同,但在第2层发送数据包(必须提供第2层标头),不接收任何数据包。 使用ifACE到设置界面上发送数据包。(如果未设置,将使用conf.ifACE的值) >> sendp(EtheR()/IP(dst=”1.2.3.4″,ttl=(1,4)), ifACE=”eth0″) …. Sent 4 packets. >> sendp(“I’ M tRavelling on EtheRnet”, ifACE=”eth0″, loop=1, inteR=0.2) >> sendp(RdPCap(“/tMp/PCapfile”)) # TCPReplay ……….. Sent 11 packets.

sR

发送数据包并接收响应。 sR()返回两个列表,第一个列表包含响应的,第二个列表包含未响应的。 >> sR(IP(dst=”60.205.177.168″)/TCP(dpoRt=[21,22,23])) Begin eMiSSion: Finished sending 3 packets. …**………………………….^C Received 36 packets, got 2 answeRs, ReMAIning 1 packets (,  ) >> ans,unans=_ >> unans.suMMaRy() IP / TCP 172.17.51.80:FTP_data  > 60.205.177.168:telnet S  >> ans[0] (>,  )>> ans[0][0]  >

sR1

发送所有数据包并仅记录第一个响应. >> p=sR1(IP(dst=”www.bAIdu.coM”)/ICMP()/ “asdqwe”) Begin eMiSSion: Finished sending 1 packets. .* Received 2 packets, got 1 answeRs, ReMAIning 0 packets

sRloop

循环发送,接收响应并显示响应。 该函数返回几个数据包和响应,以及未响应的. >> packet = IP(dst=’60.205.177.168′)/ICMP() >> sRloop(packet) RECV 1: IP / ICMP 60.205.177.168  172.17.51.80 echo-Reply 0 RECV 1: IP / ICMP 60.205.177.168  172.17.51.80 echo-Reply 0 RECV 1: IP / ICMP 60.205.177.168  172.17.51.80 echo-Reply 0 RECV 1: IP / ICMP 60.205.177.168  172.17.51.80 echo-Reply 0  ^C                                          Sent 4 packets, Received 4 packets. 100.0% hITs. (,  )

使用Scapy创建数据包 Scapy数据包的创建与网络中的分层方法一致。 数据包的基本构建块是一层,而整个数据包则是通过将各个层堆叠在一起而构建的。 scapy通过在TCP / IP的不同层上为每个协议定义数据包头,然后按顺序堆叠这些层,来构造数据包。

在一行中创建数据包

>> packet = EtheR()/IP(dst=’8.8.8.8′)/TCP(dpoRt=53,flags=’S’)

分别创建每个图层并使用””/””运算符将它们堆叠

>> l2 = EtheR()  >> l3 = IP(dst=’8.8.8.8/30′)  >> l4 = TCP(dpoRt=53, flags = ‘S’)  >> packet = l2/l3/l4

Scapy IP表示法

Scapy接受普通的IP表示法,CIDR表示法,主机名。

>> packet = IP(dst = ‘8.8.8.8’)  >> packet = IP(dst = ‘scanMe.nMap.oRg’)  >> packet = IP(dst = ‘8.8.8.8/30’)  >> [a foR a in packet] [, , , ]  >> packet = IP(dst = ‘egadz.MetasploIT.coM/30’)

创建一组数据包

我们可以使用Scapy创建一组数据包

>> pkts = IP(ttl=[1,3,5,(7,10)])/TCP()  >> [pkt foR pkt in pkts] [>,  >,  >,  >,  >,  >,  ]  >> packet=IP(dst=”192.168.*.1-10″)/TCP(dpoRt=(0,100))  >> [a foR a in packet] [>,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  >,  ,  ]

检查数据包

获取数据包的详细说明以及数据类型

>> packet = IP()/TCP()  >> ls(packet) version          : BITField                                      = 4         (4) ihl                  : BITField                                      = None                                  (None) tos                  : XByteField                                 = 0         (0) len                  : ShoRtField                                      = None

OpenMagic API

Need more than content? Move into the product flow.

If you are here for model access, pricing, developer docs, or the future API console, the dedicated product path now lives on api.openmagic.ai.