子域名收集方式

FOFA

FOFA 是白帽汇推出的一款网络空间搜索引擎,它通过进行网络空间测绘,能够帮助研究人员或者企业迅速进行网络 资产匹配,例如进行漏洞影响范围分析、应用分布统计、应用流行度排名统计等。

https://fofa.info/ domain="hetianlab.com"

底下附带一个做python作业的爬虫代码,但用多了cookie会被ban....T-T

环境:

Request库:Requests库是一个简单而强大的第三方库,它提供了简洁的API,同时支持HTTP和HTTPS请求的发送。可以自动处理cookies和会话,使得在处理Web服务器时更加方便和安全。Requests库的使用方式与urllib库类似,但更加简单和灵活。

Lxml库:lxml是XML和HTML的解析器,其主要功能是解析和提取XML和HTML中的数据;lxml和正则一样,也是用C语言实现的,是一款高性能的python HTML、XML解析器,也可以利用XPath语法,来定位特定的元素及节点信息。

tqdm库:用于构造直观的运行进度条。

Xlwt库:用于将数据放入excel表格中,便于处理整合

import requests
import base64
from lxml import etree
import time
import concurrent.futures
from tqdm import tqdm
import xlwt


# FOFA 搜索结果页面地址模板
fofaurl = 'https://fofa.info/result?qbase64='

# 搜索关键字
keyword = '"glassfish" && port="4848" && country="CN"'

# FOFA目前未登录用户只能查询一页信息(10个),为避免此情况需要cookie作为登陆身份认证信息
headers = {
    'cookie': 'refresh_token=1;'
              'fofa_token=eyJhbGciOiJIUzUxMiIsImtpZCI6Ik5XWTVZakF4TVRkalltSTJNRFZsWXpRM05EWXdaakF3TURVMlkyWTNZemd3TUdRd1pUTmpZUT09IiwidHlwIjoiSldUIn0.eyJpZCI6MzUxNTA0LCJtaWQiOjEwMDIwMTUyNiwidXNlcm5hbWUiOiLot6_ov4fnmoTljaHovablj7jmnLoiLCJleHAiOjE2OTU4OTkxNjR9.mWdk3izctQkSHQBwU8gySpydLBTgVBrNz2HqLioQ3BcLROj1rrS3dnspVxv3fheHQ5oGh-4vrsquf6MLGeGLug;;'
}

# 搜索结果页数
pg = 5

def excel():
    f = open('ip.txt', 'r', encoding='utf-8')  # 打开数据文本文档,注意编码格式的影响
    wb = xlwt.Workbook(encoding='utf-8')  # 新建一个excel文件
    ws1 = wb.add_sheet('ip')  # 添加一个新表,名字为ip
    ws1.write(0,0,'url')
    row = 1#行
    col = 0#列
    for lines in f:
        a = lines
        ws1.write(row, col, a)  # 向Excel文件中写入每一项
        row += 1
    wb.save("数据表.xls")#保存



def fofa_search(search_data: str, page: int):

    # 使用 with 语句创建一个最大可并发数为 5 的线程池
    with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
        ip_set = set()
        # 创建一个进度条对象
        pbar = tqdm(total=page, desc="正在爬取:", unit="页")
        for yeshu in range(1, page + 1):
            urls = fofaurl + base64.b64encode(search_data.encode('utf-8')).decode('utf-8')
            urls += f"&page={yeshu}&page_size=10"
            # 提交任务到线程池中并更新 IP 集合
            future = executor.submit(search, urls, headers)
            ip_set.update(future.result())
            # 更新进度条
            pbar.update(1)
        pbar.close()
    # 将所有 IP 写入文件

def search( url: str, headers: dict) -> set:
    # 加密搜索关键字

    ipdata_list = []
    result = requests.get(url, headers=headers).content
    soup = etree.HTML(result)

    # 提取页面中的 IP 地址(查找元素中具备@class=“....”/在a目录下/@href性质的信息)
    ipdata = soup.xpath('//span[@class="hsxa-host"]/a/@href')
    ipdata_list.extend(ipdata)
    with open('ip.txt', 'a+') as f:
        for ip in ipdata_list:
            f.write(ip + "\n")
    return ipdata_list

a1 = 0
a2 = 0
a3 = 0
a4 = 0
print('"————————欢迎使用fofa爬取工具————————"')
print('"————————+请根据提示进行操作+————————"')
print("请输入要查找的域名关键词(无需查找输入0,默认输入1):\n")
a1 = input(a1)
print("请输入要寻找的端口(无需查找输入0,默认输入1):\n")
a2 = input(a2)
print("请输入国家(中国CN,美国US,日本JP,无需限制输入0,默认输入1):\n")
a3 = input(a3)
print("若用户切换主机操作,请重新输入cookie(默认输入1):\n")
a4 = input(a4)


if (a1 != '0') and (a1 != '1'):
    keyword = keyword.replace('glassfish',a1)
elif a1 == '0':
    keyword = keyword.replace('"glassfish" &&','')
if (a2 != '0') and (a2 != '1'):
    keyword = keyword.replace('4848',a2)
elif a2 == '0':
    keyword = keyword.replace('port="4848" &&','')
if (a3 != '0') and (a3 != '1'):
    keyword = keyword.replace('CN',a3)
elif a3 == '0':
    keyword = keyword.replace('country="CN"','')
if (a4 != '0') and (a4 != '1'):



start_time = time.time()
fofa_search(keyword,pg)
# 计算爬取耗时,并打印爬取结果
times = time.time() - start_time
with open('ip.txt') as f:
    num_lines = len(f.readlines())
print(f"爬取结束,'ip.txt' 文件中共写入 {num_lines} 个 IP,耗时:{times:.2f} 秒。")

if __name__ == "__main__":
    excel()
    print("表格已构建完成")

print(keyword)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值