fofa api

import requests
import base64
import json
import csv

# Fofa API Key
key = "*******"  # 替换为有效Key

# 搜索语法
query = '*******'

# 设置 API 请求参数
url = "https://fofa.info/api/v1/search/all"
payload = {
    "key": key,
    "qbase64": base64.b64encode(query.encode()).decode(),
    "size": "10000",
    "fields": "ip,port,host,icp,cert.subject.org,protocol,base_protocol,link,country_name,region,city",
    "full": "True"
}

# 发送请求
response = requests.get(url, params=payload)

if response.status_code == 200:
    data = json.loads(response.text)
    fields = ["ip", "port", "host", "icp", "cert.subject.org", "protocol", "base_protocol", "link", "country_name",
              "region", "city"]
    results = data.get("results", [])

    if not results:
        print("未找到匹配结果。")
    else:
        with open("fofa_results.csv", "w", newline="", encoding="utf-8") as csvfile:
            writer = csv.writer(csvfile)
            writer.writerow(
                ["IP", "Port", "Host", "ICP", "Cert_Subject_Org", "Protocol", "Base_Protocol", "Link", "Country_Name",
                 "Region", "City", "Company_Name"])

            for result in results:
                # 将列表转换为字典(字段名 → 值)
                result_dict = dict(zip(fields, result))
                ip = result_dict.get("ip", "")
                port = result_dict.get("port", "")
                host = result_dict.get("host", "")
                icp = result_dict.get("icp", "")
                cert_subject_org = result_dict.get("cert.subject.org", "")
                protocol = result_dict.get("protocol", "")
                base_protocol = result_dict.get("base_protocol", "")
                link = result_dict.get("link", "")
                country_name = result_dict.get("country_name", "")
                region = result_dict.get("region", "")
                city = result_dict.get("city", "")

                # 判断 company_name
                company_name = icp or cert_subject_org or "未知"

                # 写入 CSV
                writer.writerow(
                    [ip, port, host, icp, cert_subject_org, protocol, base_protocol, link, country_name, region, city,
                     company_name])

        print(f"数据已保存到 fofa_results.csv,共 {len(results)} 条记录。")
else:
    print("API请求失败:", response.text)

### FOFA API 配置方法 要成功配置 FOFA API 并使其正常工作,需按照以下说明完成必要的设置: #### 1. 获取 FOFA API 密钥 在使用 FOFA API 前,必须申请一个有效的 API 密钥。登录到 [FOFA 官网](https://fofa.so/) 后,在个人中心页面可以找到 API 密钥的相关选项。API 密钥是访问 FOFA 数据接口的身份验证凭证。 #### 2. 编辑配置文件 创建或编辑一个配置文件来存储 API 密钥和其他必要参数。以下是示例配置文件的内容[^1]: ```properties # FOFA API Key fofa.api.key=your_fofa_api_key # FOFA API URL fofa.api.url=https://fofa.so/api/v1/search/all ``` - `fofa.api.key` 替换为你从官网获取的实际密钥。 - `fofa.api.url` 是固定的 API 请求地址,通常无需更改。 #### 3. 调用 FOFA API 接口 通过 HTTP GET 或 POST 方法调用 FOFA 提供的数据查询接口。下面是一个 Python 实现的例子,展示如何利用上述配置文件中的数据发起请求: ```python import requests def fetch_data_from_fofa(query, page=1, fields="host"): config = { 'api_url': 'https://fofa.so/api/v1/search/all', 'email': '', # 如果需要邮箱认证,则填写此处 'key': 'your_fofa_api_key' # 将此替换为实际的 API 密钥 } params = { 'qbase64': query, 'page': page, 'fields': fields } headers = {'Accept': 'application/json'} response = requests.get(config['api_url'], params=params, headers=headers) if response.status_code == 200: data = response.json() return data else: raise Exception(f"Error fetching data from FOFA: {response.text}") query_base64 = "cG9ydDoxMjUzOA==" # Base64编码后的查询条件 (port:"12538") result = fetch_data_from_fofa(query=query_base64) print(result) ``` 注意:以上代码片段中使用的 `your_fofa_api_key` 应该被替换成真实的 API 密钥值。 --- #### 可能遇到的问题及解决办法 如果在配置过程中出现问题,请检查以下几点: - **API 密钥是否有效?** 确认已正确输入官方分配给用户的唯一密钥。 - **网络连接状态良好吗?** 若存在防火墙或其他安全策略阻止外部服务通信,可能导致失败。 - **查询语句格式无误?** 查询字符串可能需要用特定方式编码(如 base64),具体参见文档指南。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值