Package: pythonfofa
pythonfofa - 一个方便你在Python中使用fofa的库FOFA APIFOFA API是资产搜索引擎FOFA为开发者提供的 RESTful API接口, 允许开发者在自己的项目中集成 FOFA 的功能。Pythonfofa以Pyfofa构建的Python包，命名为pythonfofa调用方法安装pipinstallpythonfofa使用importpythonfofahandle=pythonfofa.Client('email','key')# 如果需要定义代理，则需要使用pythonfofa.Client('email','key'，p,proxy)print(handle.userinfo())Email用户登陆FOFA使用的EmailKey前往个人中心查看API Keyapi_url没有事情请不要修改哦，这里是FOFA的API请求地址proxy用户定义的代理，格式为127.0.0.1:8080，如无需代理，请设置为空检查Fofa配置importpythonfofahandle=pythonfofa.Client('email','key')print(handle.check_fofa_config())只需要按照上述方法配置，即可检查配置信息。会在控制台输出你当前的email、key和proxy。当然，每次执行前都会自动执行一次get_userinfo()，会根据您在config.json中填写的email和key进行获取信息。调用示例读取用户信息代码示例importpythonfofahandle=pythonfofa.Client('email','key')print(handle.userinfo())返回信息{"error":false,"email":"****@qq.com","username":"***","fcoin":48,"isvip":true,"vip_level":2,"is_verified":false,"avatar":"https://i.nosec.org/avatar/system/****","message":"","fofacli_ver":"4.0.3","fofa_server":true}查询接口提供搜索主机、获取详细信息的方法，使开发更容易。代码示例importpythonfofahandle=pythonfofa.Client('email','key')print(handle.search('title="bing"'))返回信息{"error":false,"size":8683,"page":1,"mode":"extended","query":"title\u003d\"bing\"","results":[["46.101.204.107","hotel-bing.hotels-rimini-it.com","80"],["104.21.32.129","https://peapix.com","443"],["193.8.37.83","https://www.thorsmindecamping.dk","443"]]}注意：这里因为返回结果过多，所以修改了一下说明handle.search(query_text)中，可以指定的传参如下：handle.search(query_text,field,page,size,full)参数名是否可空默认值传参类型解释query_text否无string需要进行查询的语句,即输入的查询内容field是['ip', 'host', 'port']list可选字段，默认host,ip,port，详见附录1或文末附录page是1int是否翻页，默认为第一页，按照更新时间排序size是100int每页查询数量，默认为100条，最大支持10,000条/页full是Falseboolean默认搜索一年内的数据，指定为true即可搜索全部数据注意：这里的field参数需要使用list传参哦，query_text无需再base64编码。演示1.查询域名“qq.com”handle.search('domain="qq.com"')演示2.查询域名“qq.com”的第二页handle.search('domain="qq.com"',page=2)演示3.查询10个域名有关“qq.com”的资产handle.search('domain="qq.com"',size=10)演示4.查询10个域名有关“qq.com”的资产，并且获取其IP、端口、标题和ICP备案号field=['ip','port','title','icp']handle.search('domain="qq.com"',field=field,size=10)注意：handle为handle = fofa.Client()，在环境中请不要忘了加上他哦！统计聚合根据当前的查询内容，生成全球统计信息，当前可统计每个字段的前5排名。该接口限制请求并发为 5秒/次。代码示例importpythonfofahandle=pythonfofa.Client('email','key')print(handle.search_stats('ip="103.35.168.38"'))返回信息{"error":false,"distinct":{"ip":1,"title":1},"aggs":{"countries":[],"title":[{"count":1,"name":"RouterOS router configuration page"}]},"lastupdatetime":"2022-06-11 07:00:00"}字段名描述distinct唯一计数 支持字段: ip, server, icp, domain,title,host,fidaggs聚合信息说明handle.search_stats(query_text)中，可以指定的传参如下：handle.search(query_text,field)参数名是否可空默认值传参类型解释query_text否无string需要进行查询的语句,即输入的查询内容field是['ip', 'host', 'port']list可选字段，默认title，详见附录2或文末附录Host聚合根据当前的查询内容，生成聚合信息，host通常是ip，包含基础信息和IP标签。该接口限制请求并发为 1s/次。代码示例importpythonfofahandle=pythonfofa.Client('email','key')print(handle.search_host('78.48.50.249'))返回信息{"error":false,"host":"78.48.50.249","ip":"78.48.50.249","asn":6805,"org":"Telefonica Germany","country_name":"Germany","country_code":"DE","protocol":["http","sip","https"],"port":[8089,5060,7170,80,443],"category":["CMS"],"product":["Synology-WebStation"],"update_time":"2022-12-29 05:00:00"}当detail=false时，默认为普通模式，返回结果如下：字段名描述port端口列表protocol协议列表domain域名列表categor分类标签product产品标签当detail=true时，默认为详情模式，返回结果如下：字段名描述products产品详情列表product产品名category产品分类level产品分层： 5 应用层， 4 支持层， 3 服务层，2 系统层， 1 硬件层， 0 无组件分层soft_hard_code产品是否为硬件；值为 1 是硬件，否则为非硬件说明handle.search_stats(query_text)中，可以指定的传参如下：handle.search_host(host,detail=False)参数名是否可空默认值传参类型解释host否无stringhost名，通常是ipdetail是falseboolean显示端口详情获取用户名代码示例importpythonfofahandle=pythonfofa.Client('email','key')print(handle.username)返回信息Moxin(具体会返回用户名)获取F币数量代码示例importpythonfofahandle=pythonfofa.Client('email','key')print(handle.fcoin)返回信息48（这里是整数型哦）获取VIP状态代码示例importpythonfofahandle=pythonfofa.Client('email','key')print(handle.isvip)返回信息true（这里是布尔型）获取VIP等级代码示例importpythonfofahandle=pythonfofa.Client('email','key')print(handle.viplevel)返回信息2（这里是整数型哦）获取头像链接代码示例importpythonfofahandle=pythonfofa.Client('email','key')print(handle.avatar)返回信息https://i.nosec.org/avatar/system/users/avatars/100/083/883/medium/3774a8c7500fc0a110aa957a1a3040c2_1.jpg?1671089293（这里是String哦）声明：通过上述方法进行获取用户名、获取F币数量、获取VIP状态、获取VIP等级、获取头像链接均不需要再次请求，变量是在初始化Client中默认进行并存储的，所以不会再次产生资源消耗。使用依赖需要安装的库pipinstallrequests一般不需要安装的库json、base64、urllib环境开发环境Win11 + Python3.10 + PyCharm 2022.2.3 (Professional Edition)使用环境支持python2.7+、Python 3.x环境附录查询接口（FOFA附录1）序号字段名描述权限1ipip地址无2port端口无3protocol协议名无4country国家代码无5country_name国家名无6region区域无7city城市无8longitude地理位置 经度无9latitude地理位置 纬度无10as_numberasn编号无11as_organizationasn组织无12host主机名无13domain域名无14os操作系统无15server网站server无16icpicp备案号无17title网站标题无18jarmjarm 指纹无19header网站header无20banner协议 banner无21cert证书无22body网站正文内容企业会员23fidfid企业会员24structinfo结构化信息 (部分协议支持、比如elastic、mongodb)企业会员聚合接口统计（FOFA附录2）序号字段名描述权限1protocol协议无2domain域名无3port端口无4titlehttp 标题无5os操作系统无6serverhttp server信息无7country国家、城市统计无8as_numberasn编号无9as_organizationasn组织无10asset_type资产类型无11fidfid 统计无12icpicp备案信息无pythonfofapythonfofa是在PyPi中的一个库，与本仓库类似，但是只是定义email、key和proxy的方式不同，等待更新。