0x00 前言

Shodan是一个针对网络设备的搜索引擎,通过Shodan API进行搜索,不仅数据更加丰富,而且能够配合自己的程序实现自动化分析。

本文将要介绍Shodan API在使用过程需要注意的问题,分享使用心得和脚本开发技巧。

0x01 本文将要介绍以下内容

  • Shodan API的简单使用

  • 利用python调用Shodan API获得搜索结果

  • 对搜索结果作进一步处理

  • 三种积分(credits)的区别

  • 通过Shodan官网导出搜索结果和进一步处理

0x02 Shodan API的简单使用

1、注册账号,获得API Key

测试API Key为:SkVS0RAbiTQpzzEsahqnq2Hv6SwjUfs3

2、安装python包

pip install shodan

3、通过Shodan CLI获得搜索结果

参考资料:https://cli.shodan.io/

注:

未付费只能获得100个搜索结果

CLI全称为command-line interface,即shodan的命令行模式

Windows系统下使用pip install在同级目录产生文件Shodan.exe

如下图

(1) 初始化

shodan init <api key>

实际命令为:

shodan init SkVS0RAbiTQpzzEsahqnq2Hv6SwjUfs3

如下图

(2) 搜索指定内容(apache)的数量

shodan count apache

如下图

获得结果23803090

(3) 搜索指定内容(apache)的信息

shodan search --fields ip_str,port,org,hostnames apache

搜索关键词:apache

输出:ip_str,port,org,hostnames

(4) 下载指定内容(apache)的搜索结果

shodan download result apache

搜索关键词:apache

保存文件名:result.json.gz

如下图

(5) 解析文件,获得搜索结果

shodan parse --fields ip_str,port,org --separator , result.json.gz

如下图

(6) 搜索指定IP的信息

shodan host 189.201.128.250

如下图

0x03 三种积分(credits)的区别

Shodan共有三种积分(credits):

  • Export credits

  • Query credits

  • Scan credits

官方文档:

https://help.shodan.io/the-basics/credit-types-explained

简单理解:

Export Credits

通过Shodan官网下载数据时使用

1 export credit = 10,000 results

注:

导出一次结果消耗一个credit,无论获取到的结果有多少,最多为10000个结果

月初不会更新

Query Credits

调用Shodan API时使用

1 query credit = 100 results

月初更新,也就是说如果只买了一个月的会员,那么下一个月清零

Scan Credits

调用Shodan API时使用

1 scan credit = 1 IP

月初更新

0x04 通过python调用Shodan API获得搜索结果

注:

未付费不仅无法使用搜索过滤条件,而且只能获得100个搜索结果

(1) 搜索指定内容(apache)的信息

python代码如下:

import shodan
SHODAN_API_KEY = "SkVS0RAbiTQpzzEsahqnq2Hv6SwjUfs3"
api = shodan.Shodan(SHODAN_API_KEY)
try:results = api.search('Apache')print 'Results found: %s' % results['total']for result in results['matches']:         print ("%s:%s|%s|%s"%(result['ip_str'],result['port'],result['location']['country_name'],result['hostnames']))
except shodan.APIError, e:print 'Error: %s' % e

如下图

如果未付费,无法使用搜索过滤条件,例如Apache country:"US"

(2) 搜索指定内容,将获得的IP写入文件

python代码如下:

import shodan
SHODAN_API_KEY = "SkVS0RAbiTQpzzEsahqnq2Hv6SwjUfs3"
api = shodan.Shodan(SHODAN_API_KEY)
file_object = open('ip.txt', 'w')
try:results = api.search('Apache')print 'Results found: %s' % results['total']for result in results['matches']:
#            print result['ip_str']file_object.writelines(result['ip_str']+'\n')
except shodan.APIError, e:print 'Error: %s' % e
file_object.close()

(3) 通过命令行参数指定搜索条件,将搜索到的IP写入文件

python代码如下:

import shodan
import sys
SHODAN_API_KEY = "SkVS0RAbiTQpzzEsahqnq2Hv6SwjUfs3"
api = shodan.Shodan(SHODAN_API_KEY)
if len(sys.argv)<2:print '[!]Wrong parameter'sys.exit(0)
print '[*]Search string: %s' % sys.argv[1]
file_object = open('ip.txt', 'w')
try:results = api.search(sys.argv[1])print '[+]Results found: %s' % results['total']for result in results['matches']:
#            print result['ip_str']file_object.writelines(result['ip_str']+'\n')
except shodan.APIError, e:print 'Error: %s' % e
file_object.close()

命令行参数:

search.py apache

注:

如果搜索多个关键词,需要用引号将搜索条件包含,例如:

search.py "apache country:US" 

(4) 读取文件中的IP列表,反查IP信息

python代码如下:

import sys
reload(sys)
sys.setdefaultencoding('utf8')
SHODAN_API_KEY = "SkVS0RAbiTQpzzEsahqnq2Hv6SwjUfs3"
api = shodan.Shodan(SHODAN_API_KEY)
def searchip( str ):try:host = api.host(str)except shodan.exception.APIError:print "[!]No information available"print "---------------------------------------------"returnelse:# Print general infotry:print "IP: %s\r\nOrganization: %s\r\nOperating System: %s" % (host['ip_str'], host.get('org', 'n/a'), host.get('os', 'n/a'))except UnicodeEncodeError:print "[!]UnicodeEncode Error\r\n"     else:# Print all bannersfor item in host['data']:print "Port: %s\r\nBanner: %s" % (item['port'], item['data'])print "---------------------------------------------"   return
file_object = open('ip.txt', 'r')
for line in file_object:searchip(line)

0x05 通过Shodan官网下载搜索结果

通过Shodan官网下载数据时使用Export credits,如下图

查询一次消耗一个export credit,无论结果有多少个,最多为10000个

导出格式选择为json

(1) 从下载的json结果文件中提取IP

python代码如下:

import json
file_object = open("shodan_data.json", 'r')
for line in file_object:data = json.loads(line)print data["ip_str"]
file_object.close()

(2) 从下载的json结果文件中提取指定国家的IP和端口

国家代号在二级元素中,对应结构:data["location"]["country_code"]

python代码如下:

import json
import sys
import re
def search(country):file_object = open("shodan_data.json", 'r')file_object2 = open(country+".txt", 'w')for line in file_object:data = json.loads(line)  if re.search(data["location"]["country_code"], country, re.IGNORECASE):str1 = "%s:%s" % (data["ip_str"],data["port"])print str1file_object2.writelines(str1+'\n')file_object.close()file_object2.close()
if __name__ == "__main__":if len(sys.argv)<2:print ('[!]Wrong parameter')sys.exit(0)else:print ('[*]Search country code: %s' % sys.argv[1])search(sys.argv[1])print ("[+]Done")

命令行参数:

search.py US

生成文件US.txt,保存IP和对应的端口

0x06 小结

本文介绍了Shodan API的用法,分享使用心得和python脚本开发技巧。选择付费购买时,记得区分好三种积分(credits)

Shodan API使用指南 撒旦网相关推荐

  1. shodan API 获取IP开放端口

    # -*- coding: utf-8 -*-""" @author:随时静听 @file: shodanForIp.py @time: 2019/01/28 @emai ...

  2. PayPal API风格指南和设计模式

    PayPal通过RESTful API将自己的平台打造成彼此连接的服务.他们为此提供了用于创建和使用这些API的指南和设计模式,其他开发者可以在自己的项目中使用这些指南和模式. \\ PayPal的A ...

  3. 谷歌地球API开发者指南(高级)

    谷歌地球API开发者指南(高级) 作者感慨:Google Earth真是一个好东东,而其爱好者更是天才啊.我们与老美在科技上的差距,不是我们以环境.资源为代价的粗放式快速增长的GDP所能掩盖的 Goo ...

  4. 百度地图API开发指南

    百度地图API开发指南 本文为百度地图API官方版本的开发指南,供各位51CTO的网友进行参考. 简介什么是百度地图API? 百度地图API是一套由JavaScript语言编写的应用程序接口,它能够帮 ...

  5. RESTful API 设计指南[转]

    一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. RESTful AP ...

  6. 组件接口(API)设计指南-文件夹

    组件接口(API)设计指南-文件夹 组件接口(API)设计指南[1]-要考虑的问题 组件接口(API)设计指南[2]-类接口(class interface) 组件接口(API)设计指南[3]-托付( ...

  7. RESTful API 设计指南 (转)

    RESTful API 设计指南 2016-02-23 ImportNew (点击上方公号,可快速关注) 作者:阮一峰 链接:http://www.ruanyifeng.com/blog/2014/0 ...

  8. Flink入门——DataSet Api编程指南

    简介: Flink入门--DataSet Api编程指南 Apache Flink 是一个兼顾高吞吐.低延迟.高性能的分布式处理框架.在实时计算崛起的今天,Flink正在飞速发展.由于性能的优势和兼顾 ...

  9. 百度地图api开发详解(android版).pdf,百度地图API开发指南原版.pdf

    百度地图API开发指南原版 百度地图 API 开发指南 百度地图 API 开发指南 目录 简介 3 什么是百度地图 API 3 面向的读者 3 获取 API 3 开发移动平台上的地图应用 3 兼容性 ...

最新文章

  1. RDKit | 化合物芳香度分子描述符的计算与相关性比较
  2. Python 每次处理一个字符
  3. locate用主动还是被动_用英文形容地理位置lie、sit、locate、situate 怎样区别?
  4. Mysql 5.7.10以上版本安装大坑
  5. 基于IdentityServer4的OIDC实现单点登录(SSO)原理简析
  6. Rsync服务及搭建备份服务器
  7. 第十五章:进程间通信
  8. 【java与智能设备】01_1Android简介与环境搭建
  9. C#版TXT文本分割器
  10. linux oracle client 安装,linux服务器上 oracle instantclient 客户端的安装和配置
  11. matlab 固态 机械_忆捷固态硬盘怎么样(2款忆捷固态硬盘测评)
  12. Flash Builder4.7破解方法
  13. 产品升级 | 7月产品及解决方案升级来袭!
  14. charles安装教程--以及针对安装证书后https<unknown>爬坑
  15. Raft一致性算法逻辑详解
  16. 眼睛结构粗分离 - 巩膜 - 虹膜
  17. 135编辑器html点击图片播放音乐,怎么用135编辑器排版 公众号怎么做点击切换图片...
  18. 用OpenCV计算图像的亚像素值
  19. 如何获取京东推广的APPKEY
  20. 人工智能--决策树原理与代码实现、特征提取、回归决策树

热门文章

  1. AIX中一些常用的命令汇总
  2. 学会使用函数式编程的程序员(第2部分)
  3. 【深入Java虚拟机】二 类加载与双亲委派
  4. Spring Boot 中的容器配置
  5. 在浏览器中输入URL按下回车键后发生了什么
  6. Spring中property-placeholder的使用与解析
  7. 需求的推动力-网线啥的
  8. [转]verilog语法学习心得
  9. 《Verilog HDL那些事儿》PDF 3.0版本发布
  10. 前端里面如何进行搜索引擎优化(SEO)