Scapy库交互式运行
一、基础应用
scapy解决三个问题:监听流量(与Wireshark相同),分析流量,编辑流量数据包(链路层
网络层、传输层),应用层也可以编辑,但是意义不大。
arp协议就是通过IP地址来找到目标的mac地址,也就是基于IP地址找mac
scapy提供两种操作方式:基于命令行进行交互,直接在Python代码中调用
使用命令show_interfaces()来显示网络接口的详细信息
使用sniff命令来监听:
sniff(count=10)命令的含义是:实时捕获网络接口上的数据包,捕获10个
sniff(count=10,iface="")命令的含义是:实时捕获选定网卡的流量,捕获10个数据包即可
当我们去ping baidu.com的时候,它就会自动监听数据包,监听到10个之后就会停止监听
pkg=sniff(cont=10,iface="eth0")
将捕获到的流量存储到pkg这个变量中,如果想要查看流量的话,只需要输入pkg即可
如果想要查看数据包的话,可以使用如下命令:
pkg[0].show()
我们可以使用如下命令去看看数据包的摘要:
pkg.summary()
sniff函数的参数
iface表示使用的网络接口,如果没有指定则会在所有的interface上进行嗅探(在交互环境输入show_interfaces()可以查看所有的网卡)
count是嗅探包的个数
filter是过滤条件
prn是回调函数,通常与lambda搭配使用
sprintf()函数控制输入信息
接下来我们去构造一个我们发送的数据包
使用wireshark进行监听,如下图所示:
我们也可以在后面加上我们的payload,也就是data
命令如下:
send(IP(dst="10.211.55.2")/ICMP()/"hahahahahahahahahahahaha")
我们可以在数据包里面发现我们传输的消息,但好像经过了一些加密等等
发送5次相同的数据包,每次间隔1秒种
send(IP(dst="10.211.55.2")/ICMP()/"hahahahahahahahahahahaha",inter=1,count=5)
发送数据包并接收响应sr,sr1
命令如下:
pkg=sr1(IP(dst="10.211.55.2")/ICMP()/"hahahahahahahahahahahaha")
//构造一个包含 IP 层、ICMP 层和自定义负载的数据包,并发送到目标地址 10.211.55.2,然后等待并接收第一个响应数据包
pkg //使用pkg来查询存储的响应包pkg[IP].id //使用该命令去查响应包里面所想要查询的参数
使用如下命令来接受ARP的一个响应包:
pkg=sr1(ARP(psrc='10.211.55.16',pdst='10.211.55.2'))
构造一个 ARP(地址解析协议)请求数据包,源 IP 地址为 10.211.55.16
,目标 IP 地址为 10.211.55.2
,然后发送这个请求并等待第一个响应。
使用wireshark进行抓包,抓取到的数据包如下图所示:
如果目标IP地址写错的话,终端上不会有回显内容,会告诉你目标IP没有找到,但是使用wireshark抓数据包的话,会有请求响应的字段,但也只是有罢了
具体过程如下图所示:
但是一直等待回复是不合适的,因为我们要进行扫描,所以我们在后面加一个timeout来限制扫描的时间
数据包的抓取和上面的一样
如果我们要去扫描IP地址的话,只需要发ARP数据包就可以了,如果这个ARP数据包发送成功,这个pkg里面有MAC地址,我们就认为这个IP地址是存在的
如果发了ARP数据包,并且超时,并告诉我们得到了0个答复,说明这个IP地址是必然不存在的,ARP数据包是不会被防火墙所阻拦的