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

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