Metadata-Version: 2.1
Name: FOFA-py
Version: 2.0.2
Summary: Python library for FOFA (https://fofa.info)
Home-page: https://github.com/fofapro/fofa-py
Author: Fofa
Author-email: fofabot@baimaohui.net
License: MIT
Keywords: fofa,security,network
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Description-Content-Type: text/markdown
Requires-Dist: click
Requires-Dist: requests (>=2.2.1)
Requires-Dist: retry
Requires-Dist: XlsxWriter
Requires-Dist: tqdm
Requires-Dist: tabulate

# FOFA SDK 使用说明

## 简介
  基于 [`FOFA API`](https://fofa.info/api) 编写的 `python` 版 `SDK`, 方便 `python` 开发者快速将 `FOFA` 集成到自己的项目中。

  [Api Documentation](https://fofapro.github.io/fofa-py/index.html)

## FOFA 命令行工具
  基于FOFA python SDK实现的简单命令行工具，用于简单的FOFA数据查询

## 安装
```shell
pip install fofa-py
```

## 用法

 显示所有支持的命令
```shell
fofa
```
### 设置fofa api key
  通过环境变量设置认证信息

| 环境变量Key  | Value                                                      |
|--------------|:----------------------------------------------------------:|
| `FOFA_EMAIL` | 用户登陆 `FOFA` 使用的 `Email`                             |
| `FOFA_KEY`   | 前往 [个人中心](https://fofa.info/userInfo) 查看 `API Key` |


### search
搜索子命令，从fofa搜索数据，

#### 搜索数据
搜索数据并展示结果
```shell
fofa search domain=bing.com --size 1000 -f ip,port,domain,title,certs_match,certs_expired
```

#### 统计搜索结果数量
```shell
fofa search domain=bing.com --count
382128
```

#### 查询聚合信息
```shell
fofa search domain=bing.com -f port,domain,protocol,title --stats --size 10
```

#### 保存结果数据
保存结果数据为csv或xls格式，示例:

```shell
# 保存数据为csv文件
fofa search domain=bing.com -f ip,port,domain,link,title,certs_match,certs_expired --size 50000 --save bing.csv

# 搜索证书匹配的数据
fofa search 'domain="bing.com" && cert.is_match=true' -f ip,port,domain,link,title,certs_match,certs_expired --size 50000 --save bing_cert_expired.xls
```

### host
查看一个域名或ip的host信息，示例

```shell
fofa host www.bing.com
{
    "asn": 59067,
    "category": [
        "其他企业应用"
    ],
    "consumed_fpoint": 0,
    "country_code": "CN",
    "country_name": "China",
    "domain": [
        "tuzhiji.com",
        "61.129.255.240:8080"
    ],
    "error": false,
    "host": "www.bing.com",
    "ip": "202.89.233.101",
    "org": "Microsoft Mobile Alliance Internet Services Co., Ltd",
    "port": [
        443,
        80,
        8080
    ],
    "product": [
        "Microsoft-RSA-TLS-CA",
        "Microsoft-RSA-TLS-CA-02"
    ],
    "protocol": [
        "https",
        "http"
    ],
    "required_fpoints": 0,
    "update_time": "2023-06-27 08:00:00"
}
```

### 代码使用sdk

``` python
# -*- coding: utf-8 -*-
import fofa

if __name__ == "__main__":
    email, key = ('test@test.com', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')  # 输入email和key
    client = fofa.Client(email, key)                # 将email和key传入fofa.Client类进行初始化和验证，并得到一个fofa client对象
    query_str = 'header="thinkphp" || header="think_template"'
    for page in range(1, 51):                       # 从第1页查到第50页
        fpoint = client.get_userinfo()["fofa_point"]      # 查询F点剩余数量
        if fpoint < 100:
            break                                   # 当F点小于100时，不再获取数据
        data = client.search(query_str, size=100, page=page, fields="ip,city")  # 查询第page页数据的ip和城市
        for ip, city in data["results"]:
            print "%s,%s" % (ip, city)              # 打印出每条数据的ip和城市

```


## 协议
`FOFA SDK` 遵循 `MIT` 协议，查看 [协议文件](https://opensource.org/licenses/mit)


