信息收集篇—用python判断目标网段开放端口号兼shodan基础使用

信息收集篇—用python判断目标网段开放端口号兼shodan基础使用,第1张

文章目录
  • 前言

  • 一、调用socket库的socket.connect_ex((ip, port))方法


  • 二、调用shodan API


  • 三、shodan介绍

    • 1.获取Shodan - API
    • 2.常用 Shodan 库函数


前言

服务和安全是相对应的,每开启一个端口,那么攻击面就大了一点,开启的端口越多,也就意味着服务器面临的威胁越大。


故对于网络安全而言,端口扫描也是资产探测的重要一环。


以下记录两种用python实现开放端口扫描的方案。



一、调用socket库的socket.connect_ex((ip, port))方法

import socket

def get_port(domain):
    ports = [21, 22, 23, 25, 53, 69, 79, 80, 88, 110, 113, 220, 443, 3306]
    open_list = []
    for port in ports:
        server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # ipv4,tcp通信
        server.settimeout(3)  # 超过3,断定端口关闭
        result = server.connect_ex((domain, port))  # 尝试连接
        if result == 0:  # 连接成功返回0
            print(str(port) + "-->open")
            open_list.append(port)
        else:
            print(str(port) + "-->close")
    return open_list

if __name__ == '__main__':
    get_port("192.168.137.129")

返回结果:


二、调用shodan API

import shodan

def shoda(domain):
    myaddr = socket.getaddrinfo(domain, 'http')
    dst_ip = myaddr[0][4][0]
    api = shodan.Shodan('4lqyZddnTpSdLGoQxnNNsW0ny0a9tALc')
    res = api.host(dst_ip, history=False)
    port = str(res['ports'])  # 返回该IP开放的端口号列表
    print(port)
  
if __name__ == '__main__':
    shoda("jd.com")

返回结果:


三、shodan介绍 1.获取Shodan - API

访问:account.shodan.io ,并复制API KEY

2.常用 Shodan 库函数

shodan.Shodan(key) :初始化连接API
Shodan.count(query, facets=None):返回查询结果数量
Shodan.host(ip, history=False):返回一个IP的详细信息
Shodan.ports():返回Shodan可查询的端口号
Shodan.protocols():返回Shodan可查询的协议
Shodan.services():返回Shodan可查询的服务
Shodan.queries(page=1, sort=‘timestamp’, order=‘desc’):查询其他用户分享的查询规则
Shodan.scan(ips, force=False):使用Shodan进行扫描,ips可以为字符或字典类型
Shodan.search(query, page=1, limit=None, offset=None, facets=None, minify=True):查询Shodan数据

Shodan.host(ip, history=False)部分返回结果:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/569340.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存