zoukankan      html  css  js  c++  java
  • python重新利用shodan API

     前言:

     之前写过一个shodan的API调用

    感觉写的不这么好。然后现在重新写一个

    shodan介绍:

     shodan是互联网上最可怕的搜索引擎。
    CNNMoney的一篇文章写道,虽然目前人们都认为谷歌是最强劲的搜索引擎,但Shodan才是互联网上最可怕的搜索引擎。
    与谷歌不同的是,Shodan不是在网上搜索网址,而是直接进入互联网的背后通道。Shodan可以说是一款“黑暗”谷歌,一刻不停的在寻找着所有和互联网关联的服务器、摄像头、打印机、路由器等等。每个月Shodan都会在大约5亿个服务器上日夜不停地搜集信息。
    Shodan所搜集到的信息是极其惊人的。凡是链接到互联网的红绿灯、安全摄像头、家庭自动化设备以及加热系统等等都会被轻易的搜索到。Shodan的使用者曾发现过一个水上公园的控制系统,一个加油站,甚至一个酒店的葡萄酒冷却器。而网站的研究者也曾使用Shodan定位到了核电站的指挥和控制系统及一个粒子回旋加速器。
    Shodan真正值得注意的能力就是能找到几乎所有和互联网相关联的东西。而Shodan真正的可怕之处就是这些设备几乎都没有安装安全防御措施,其可以随意进入。
    Rapid 7 的首席安全官HD Moore,表示:你可以用一个默认密码登陆几乎一半的互联网。就安全而言,这是一个巨大的失误。
    如果你搜索“默认密码”的话,你会发现无数的打印机,服务器及系统的用户名都是“admin”,密码全都是“1234”。还有很多系统根本不需要认证,你所需要做的就是用浏览器进行链接。所以如果你在使用默认密码的话,请现在就改换新的密码。
    如果Shodan落入坏人之手的话,那真是一个可怕的东西。
    而更大的问题是很多设备根本不需要链接到互联网。很多公司常常会买一些他们能够控制的系统,比如说一个电脑控制的热力系统。而他们又是如何把热力系统链接到网上的呢?为什么不直接控制呢?很多IT部门就直接把这些系统插入到网络服务器上,殊不知,这样就和世界分享这些系统了。
    Shodan的研发者Matherly表示,这些链接到网上的设备根本没有安全防御措施,他们根本就不应该出现在互联网上。
    而好消息就是Shodan几乎都是用在了好的方面。
    Matherly对搜索数量也进行了限制。比如没有账户的用户最多提供10个搜索结果,而有账户的用户则可以享受50个搜索结果。如果你想要Shodan提供的所有信息,那Matherly会就你所要搜索的内容,要求你提供更多的信息且付费。
    同时,Matherly也承认坏蛋会使用Shodan,但到目前为止,大多数网络攻击都集中在窃取财物和知识产权上。坏蛋们还没有试图摧毁一栋大楼或毁坏市内的红绿灯。
    安全防御措施的专业人士们都不希望使用Shodan时搜索到这些没有防御措施的设备及系统。但同时,互联网上有太多可怕的东西,那些没有防御措施的设备只能等着被攻击。。。。

    引用百度百科

     shodan文档:http://shodan.readthedocs.io/en/latest/tutorial.html

    shodan:https://www.shodan.io/

    key的获取方法:请自己上shodan官网进行注册获取key

    代码:

    import optparse
    import shodan
    import requests
    def main():
        usage='[usage: -j Type what you want]' 
              '        [-i IP to search]' 
              '        [-s Todays camera equipment]'
        parser=optparse.OptionParser(usage)
        parser.add_option('-j',dest='jost',help='Type what you want')
        parser.add_option('-i',dest='host',help='IP to search')
        parser.add_option('-s',action='store_true',dest='query',help='Todays camera equipment')
        (options,args)=parser.parse_args()
        if options.jost:
            jost=options.jost
            Jost(jost)
        elif options.host:
            host=options.host
            Host(host)
        elif options.query:
            query()
        else:
            parser.print_help()
            exit()
    
    def Jost(jost):
        SHODAN_API_KEY='ZmgQ9FZf1rnRuR0MLhT5SXw0xBE8LDLc'
        api=shodan.Shodan(SHODAN_API_KEY)
        try:
            result=api.search('{}'.format(jost))
            print('[*]Results found:{}'.format(result['total']))
            for x in result['matches']:
                print('IP{}'.format(x['ip_str']))
                print(x['data'])
                with open('shodan.txt','a') as p:
                    p.write(x['ip_str']+'
    ')
                    p.write(x['data']+'
    ')
        except shodan.APIError as e:
            print('[-]Error:',e)
    
    def Host(host):
        SHODAN_API_KEY='ZmgQ9FZf1rnRuR0MLhT5SXw0xBE8LDLc'
        try:
          api=shodan.Shodan(SHODAN_API_KEY)
          hx=api.host('{}'.format(host))
          print("IP:{}".format(hx['ip_str']))
          print('Organization:{}'.format(hx.get('org','n/a')))
          print('Operating System:{}'.format(hx.get('os','n/a')))
          for item in hx['data']:
              print("Port:{}".format(hx['port']))
              print('Banner:{}'.format(hx['data']))
        except shodan.APIError as g:
            print('[-]Error:',g)
    
    def query():
        header = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
        url = "https://api.shodan.io/shodan/query?key=ZmgQ9FZf1rnRuR0MLhT5SXw0xBE8LDLc"
        r = requests.get(url, headers=header)
        sd = r.json()
        sg = sd['matches'][0:]
        for b in sg:
            print("描述:", b['description'])
            print('标签:', b['tags'])
            print('时间戳:', b['timestamp'])
            print('标题:', b['title'])
            print('服务:', b['query'])
            print('---------------------------------')
    
    if __name__ == '__main__':
        main()
    

    实现了3个 参数

    -j shodan里面搜索

    -i 搜索IP

    -s 搜索弱口令摄像头

    -j 搜有ssh服务的主机,并写入到shodan.txt

     

    -i IP搜索 没目标- -

    -s 弱口令摄像头查询

    距离上学还有2天...

  • 相关阅读:
    Redis学习笔记
    RedisTemplate操作命令
    RedisTemplate操作命令
    RedisTemplate操作命令
    RedisTemplate操作命令
    将chrome储存的密码转为MarkDown表格
    使用redisson做redis分布式锁
    RocketMQ 整合SpringBoot发送事务消息
    关于java读写锁的测试
    java8 stream记录
  • 原文地址:https://www.cnblogs.com/haq5201314/p/8463211.html
Copyright © 2011-2022 走看看