信息搜集-三层发现 Scapy

信息搜集-三层发现 Scapy

点击右上角【关注】发哥微课堂头条号,get更多相关技能~


0x00:简介

之前的二层发现利用 arp 协议记录了 scapy 的使用方法,主要通过 ARP() 函数进行的发现。在三层中 scapy 也可以用来发现目标,利用的协议也是三层的主要协议 ip 和 icmp,方法类似。

0x01:scapy 三层发现

scapy 在三层发现目标主要是 IP() 函数和 ICMP() 函数,首先需要调用一下 IP 函数赋给一个变量,其次调用 ICMP 函数赋给一个变量,将两个函数的请求头合并就是一个 ping 包,如下图:

信息搜集-三层发现 Scapy


合成一个包的方式是小括号括起来通过 / 就可以。这样就有了一个完整的 ping 包,通过 display 可查看,如下:

信息搜集-三层发现 Scapy


有了 ping 包后,需要设置一下 ip 里面的 dst 字段,也就是要发现目标的 ip 地址,这里可以通过 ping[IP].dst="10.136.178.15" 来设置,设置后可通过 display 再次查看是否成功,如下:

信息搜集-三层发现 Scapy


这时就可以发送 ping 包了,函数是 sr1,这里是 sr1(ping), 示例如下:

信息搜集-三层发现 Scapy


这时就发送完成了,结果赋给了变量 answer,详细信息可以通过 answer.display 查看,如下:

信息搜集-三层发现 Scapy


以上操作步骤也可以写成一行命令,sr1(IP(dst="10.136.178.15")/ICMP()),结果和上面步骤一样,如下图:

信息搜集-三层发现 Scapy


如果碰到没有在线的目标,scapy 会等待,直到目标上线,所以如果批量去发现目标碰到一个目标不在线时,后面的就不会继续去进行发现,如下图:

信息搜集-三层发现 Scapy


这时,可以通过 sr1 的第二个参数 timeout 来设置超时时间,默认单位是毫秒,如下图:

信息搜集-三层发现 Scapy


提示已经发了一个包,应答两个包,获取了 0 个丢失了 1 个。scapy 的三层发现也是不能批量扫描,需要结合 python 编写脚本来实现,示例如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import logging
import subprocess
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
if len(sys.argv)!=2:
print "参数错误,示例:./scapy-icmp.py 1.1.1.1"

sys.exit()
address=str(sys.argv[1])
prefix=address.split('.')[0]+'.'+address.split('.')[1]+'.'+address.split('.')[2]+'.'
for addr in range(1,254):
a=sr1(IP(dst=prefix+str(addr))/ICMP(),timeout=0.1,verbose=0)
if a == None:
pass
else:
print prefix+str(addr)

运行结果如下:

信息搜集-三层发现 Scapy


协议的话就是 ICMP 了,因为脚本中使用 icmp 函数发的包,wireshark 抓包如下:

信息搜集-三层发现 Scapy


如果已经有了要扫描的目标列表,也可以使用 python 写一个脚本来实现读取文件内容进行目标发现,示例如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import logging
import subprocess
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
if len(sys.argv)!=2:
print "参数错误,示例:./scapy-icmp-txtList.py filename"
sys.exit()

filename=str(sys.argv[1])
file=open(filename,'r')
for addr in file:
a=sr1(IP(dst=addr.strip())/ICMP(),timeout=0.1,verbose=0)
if a==None:
pass
else:
print addr.strip()

0x02:总结

scapy 可以利用 arp 函数来进行二层的目标发现,也可以使用 icmp 函数来实现三层目标发现。不支持批量扫描,但因 scapy 本就是 python 的一个网络分析包的库,所以可用 python 来用脚本实现批量扫描。


分享到:


相關文章: