什么 是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