byfranke/sheep-feeds-cli
GitHub: byfranke/sheep-feeds-cli
一个命令行客户端,用于从Sheep威胁情报API拉取JSON格式数据,简化安全情报在SIEM、SOAR和脚本中的集成与监控。
Stars: 0 | Forks: 0
# Sheep Feeds 命令行界面
**Sheep 威胁情报 feeds API** 的命令行客户端,地址为
[sheep.byfranke.com](https://sheep.byfranke.com)。用于拉取经过整理的 feeds
(CVE、勒索软件受害者、IOC、APT 基础设施、ICS/SCADA
公告、威胁情报文章),并输出为 JSON 格式,供 SIEM、SOAR
剧本、脚本和临时终端查询使用。
```
sheep-feeds list # list every feed with last update
sheep-feeds latest cve --count 20 # 20 most recent CVE entries
sheep-feeds get ransomware --since 2026-05-01 --json # raw JSON
sheep-feeds stats cve # per-feed statistics
sheep-feeds summary # dashboard-style overview
sheep-feeds plan # show your plan, quota and active token
# 监视 — 当信息源匹配时通知您的本地规则引擎
sheep-feeds watch add nginx-high --feed cve --contains nginx --severity high --notify desktop
sheep-feeds watch run --once # one scan (cron / systemd timer)
sheep-feeds watch run # loop in the foreground / inside a service
```
## 存在的意义
我们已提供给客户的一些使用示例:
- **SIEM 摄取:** 定时任务调用
`sheep-feeds get cve --since "$LAST" --json | jq …` 并将新行推送到
Wazuh / Splunk / Elastic。
- **SOAR 剧本:** 工作流节点(Tines、Shuffle 或您自己的
Python worker 等)轮询
`sheep-feeds latest ransomware --count 50 --json` 并按
国家/行业过滤后,呼叫事件响应团队。
- **每日摘要:** 定时任务(cron、Kubernetes CronJob、计划的 GitHub
Actions)运行 `sheep-feeds summary` 并将结果打印到
SOC 的共享终端。
- **终端快速检查:** `sheep-feeds get cve --severity high`
在站会前快速查看高严重性漏洞。
## 安装
### 快速安装
```
curl -fsSL https://raw.githubusercontent.com/byfranke/sheep-feeds-cli/main/install.sh | bash
```
### 手动安装
```
git clone https://github.com/byfranke/sheep-feeds-cli.git ~/.sheep-feeds-cli
cd ~/.sheep-feeds-cli
pip install -r requirements.txt
python3 setup.py
```
### 卸载
```
~/.sheep-feeds-cli/uninstall.sh
```
## 配置
安装向导 (`setup.py`) 完成三件事:
1. 要求输入您的 API 令牌(以 `shp_` 开头)。
2. 使用主密码(PBKDF2-HMAC-SHA256,60万次迭代)对其加密并存储在 `~/.sheep-feeds-cli/config.ini`(权限 0600)。
3. 可选地全局安装 `sheep-feeds`。
您**每次终端会话只需输入一次主密码** — CLI 会将解密后的令牌缓存在 `/tmp/` 下的会话专用文件中(权限 0600,仅所有者可访问),后续命令无需提示即可运行。
### 令牌解析顺序
```
$SHEEP_API_TOKEN (env var, highest priority — useful for CI/CD)
system keyring (when populated by setup.py and available)
encrypted config (config.ini decrypted with master password)
--token (one-shot override, never persisted)
```
您**无需**使用 CLI 来管理密钥链 — setup.py 默认只将加密后的数据块存储在配置文件中。密钥链路径用于无法输入主密码的非交互式工作流。
### 如何获取令牌
- Sheep Pro / Pro Max / Enterprise — 在
[sheep.byfranke.com/pages/store](https://sheep.byfranke.com/pages/store) 注册,
令牌将通过电子邮件发送给您。
- Black Sheep 礼品卡 — 在 Discord 上使用 `/token` 兑换。
## 命令
### `sheep-feeds list`
列出每个 feed 及其最后更新时间戳。
### `sheep-feeds categories`
按类别对 feeds 进行分组。
### `sheep-feeds summary`
所有 feeds 的紧凑、仪表板式概览,包含项目计数和
状态。适用于 cron 驱动的监控。
### `sheep-feeds get ` *(主力命令)*
从单个 feed 拉取项目。
选项:
| 标志 | 默认值 | 备注 |
|---|---|---|
| `--limit` | 50 | 每次调用的最大项目数(1-500)。 |
| `--offset` | 0 | 分页偏移量。 |
| `--last` | 无 | 时间窗口快捷方式:`24h`、`3d`、`2w`,或别名 `today` / `yesterday` / `week` / `month`。上限为 30 天(服务器保留期限)。与 `--since` 互斥。 |
| `--since` | 无 | ISO-8601 时间戳;获取严格晚于此时间的项目。当您不需要精确到秒时,请使用 `--last`。 |
| `--severity` | 无 | 对 `severity` 进行子字符串匹配(不区分大小写)。 |
| `--category` | 无 | 对 `category` 进行子字符串匹配。 |
| `--json` | 关闭 | 打印原始 API JSON 而非表格。 |
示例:
```
# 过去24小时的所有内容
sheep-feeds get cve --last 24h
# 三天内的勒索软件泄露数据,以JSON格式准备好通过管道传输到jq
sheep-feeds get ransomware --last 3d --json | jq '.items[].title'
# 上周的高严重性公告
sheep-feeds get cve --last week --severity high
# ICS公告的第3页(无时间窗口)
sheep-feeds get ics_scada --limit 25 --offset 50
```
### `sheep-feeds latest `
获取最新 N 个项目的快捷方式。可与 `--last` 结合使用,在选取最新项之前限定搜索时间窗口。
```
sheep-feeds latest cve --count 20
sheep-feeds latest ioc_stream --count 5 --last 24h --json
```
### `sheep-feeds stats `
每个 feed 的统计信息(按严重性/类别/来源计数)。
### `sheep-feeds plan`
显示您的计划、状态、计费周期结束日期、当前周期令牌使用量以及绑定到同一邮箱的任何并行令牌。在调度大量摄取任务前,可用作预检查。添加 `--json` 以获得机器可读输出。
```
sheep-feeds plan
sheep-feeds plan --json | jq '.usage.tokens_remaining'
```
## Watch — 当 feeds 匹配时发出本地警报
Watch 将 CLI 变成一个安静的哨兵:为您关心的 feeds 定义规则,让代理保持运行,当有新的匹配项时立即收到桌面或 webhook 警报。
Watch **不消耗任何 AI 令牌** — 它仅读取 feeds(已在所有付费计划中免费提供)并在本地应用您的规则。
### 构建规则
```
# 提及nginx且严重性为高的CVE
sheep-feeds watch add nginx-high --feed cve --contains nginx --severity high --notify desktop
# 来自特定攻击者的任何勒索软件相关内容,在Slack中发出警报
sheep-feeds watch add lockbit-radar --feed ransomware --contains lockbit \
--notify "https://hooks.slack.com/services/AAA/BBB/CCC"
# 跨所有信息源的严重项目,两个频道
sheep-feeds watch add crit-fanout --feed '*' --severity critical \
--notify desktop \
--notify "https://your-soar.example/sheep-hook"
# 在标题和内容上使用正则表达式
sheep-feeds watch add cisco-asa --feed cve --regex "cisco\\s+asa" --notify desktop
```
规则字段:
| 标志 | 行为 |
|---|---|
| `--feed ` | `cve`、`ransomware`、`threat_intel`、`apt_infrastructure`、`data_leak`、`ics_scada`、`kaspersky`、`ioc_stream`、`rss_news` 中的一个,或 `*` 表示所有 feeds。 |
| `--severity` | `low`、`medium`、`high`、`critical` 中的一个。作为不区分大小写的子字符串与项目的 `severity` 匹配。 |
| `--category` | 对项目的 `category` 进行不区分大小写的子字符串匹配。 |
| `--contains` | 对 `title` + `content` 进行不区分大小写的子字符串匹配。 |
| `--regex` | 对 `title` + `content` 应用 Python 正则表达式。仅编译一次;输入长度有上限以限制最坏情况的回溯。 |
| `--notify` | 可为每个通道重复指定。值:`desktop`(使用 libnotify / osascript / PowerShell BurntToast,stderr 作为回退),或任何 `https://` webhook URL(POST JSON,10秒超时,无重试)。 |
规则上的所有匹配条件都是 AND 关系。包含**零**个匹配过滤器的规则将被拒绝(否则会触发每个项目)。
### 列出和管理
```
sheep-feeds watch list # table
sheep-feeds watch list --json # machine-readable
sheep-feeds watch pause nginx-high # disable without removing
sheep-feeds watch resume nginx-high
sheep-feeds watch remove nginx-high # delete the rule
```
### 检查命中记录
```
sheep-feeds watch hits # last 24h
sheep-feeds watch hits --last 7d
sheep-feeds watch hits --rule nginx-high
sheep-feeds watch hits --json --limit 500 # SIEM ingest
```
命中记录按 `(rule, feed, item_id)` 去重 — 同一项目不会触发同一规则两次。
### 运行 watcher
```
# 一次性扫描(适用于cron / systemd计时器)
sheep-feeds watch run --once
# 前台循环 — 每N秒轮询一次(默认900)
sheep-feeds watch run
sheep-feeds watch run --interval 600 # every 10 minutes
```
### systemd 用户单元(推荐)
将以下内容放入 `~/.config/systemd/user/sheep-feeds-watch.service`:
```
[Unit]
Description=Sheep Feeds Watch
After=network-online.target
[Service]
Type=simple
ExecStart=%h/.local/bin/sheep-feeds watch run --interval 900
Restart=on-failure
RestartSec=30s
[Install]
WantedBy=default.target
```
```
systemctl --user daemon-reload
systemctl --user enable --now sheep-feeds-watch
systemctl --user status sheep-feeds-watch
journalctl --user -u sheep-feeds-watch -f
```
### cron 替代方案
```
*/15 * * * * /usr/local/bin/sheep-feeds watch run --once >> ~/.sheep-feeds-cli/watch/cron.log 2>&1
```
### 文件位置
| 路径 | 内容 |
|---|---|
| `~/.sheep-feeds-cli/watch/rules.yml` | 您的规则(权限 0600,可手动编辑)。 |
| `~/.sheep-feeds-cli/watch/hits.db` | 每个触发事件的 SQLite 日志(权限 0600)。 |
| `~/.sheep-feeds-cli/watch/state.json` | 每个 feed 的游标,确保每个周期只获取新项目。 |
watch 目录在首次使用时以权限 0700 创建。
### 限制和默认值
- 每次安装最多 50 条规则(防止本地代理遭受 DoS 攻击)。
- 每个周期每个 feed 获取 100 个项目。
- 间隔:最小 60 秒,最大 6 小时(默认 900 秒 = 15 分钟)。
- Webhook 超时:10 秒,无重试 — 下一个周期会自然重试尚未确认为命中的项目。
## 维护
```
sheep-feeds --about # Product info, links, features
sheep-feeds --version # Print the installed version
sheep-feeds --init # Create an empty config.ini with mode 0600
sheep-feeds --setup # Re-run the interactive setup wizard
sheep-feeds --update # git pull + pip upgrade
sheep-feeds --logout # Clear the per-session decrypted-token cache
```
在不触碰您令牌的情况下完全清除 Watch 状态:
```
rm -rf ~/.sheep-feeds-cli/watch/
```
`--logout` 仅移除 `/tmp/` 下的每会话缓存。`~/.sheep-feeds-cli/` 下的加密配置文件不受影响;下次调用时会再次要求输入主密码。
## 可用 feeds
| `feed_id` | 内容 | 类别 |
|---|---|---|
| `cve` | 关键漏洞(NVD) | vulnerabilities |
| `ransomware` | 来自泄密网站的勒索软件受害者 | ransomware |
| `threat_intel` | APT 报告、恶意软件分析 | threat_intelligence |
| `apt_infrastructure` | C2 / 恶意软件基础设施 | infrastructure |
| `data_leak` | 数据泄露和转储 | data_breach |
| `ics_scada` | ICS/SCADA 公告 | ics |
| `kaspersky` | 卡巴斯基 SecureList 文章 | threat_intelligence |
| `ioc_stream` | 恶意 IP/URL/哈希的实时流 | iocs |
| `rss_news` | 来自供应商 RSS 源的聚合安全新闻 | news |
服务器端是权威来源 — CLI 维护一个本地允许列表以防止输入错误,但如果您传递一个它无法识别的 feed,仍会调用 API。运行 `sheep-feeds list` 获取规范的、服务器端列表。
## 输出
### 人类可读(默认)
富文本渲染的表格和面板。自动截断长字段以保持终端可读性。默认限制为 30 个项目;使用 `--limit` 和 `--json` 获取更多。
### JSON(`--json`)
原始 API 响应,格式化后输出,可直接管道传输到 `jq`、重定向到文件或馈送到下游工具。这是集成模式 — 用于 cron、您的 SOAR / SIEM 或任何管道工具。
## 退出代码
| 代码 | 含义 |
|---|---|
| 0 | 成功 |
| 1 | API 错误(速率限制、网络、服务器、验证) |
| 2 | CLI 用法错误(缺少令牌、参数错误) |
| 130 | 被中断(Ctrl-C) |
这些代码是稳定的 — 自动化脚本可以基于它们进行分支。
## 安全模型
- 令牌永远不会出现在命令行参数中,除非您使用 `--token`(即使如此,也会从任何错误输出中剥离)。
- 服务器字段在渲染前会被清理掉 ASCII 控制字符和富文本标记元字符 — 恶意的 API 响应无法伪造可点击链接或重写您的终端。
- 配置文件权限为 0600;向导拒绝加载权限宽松的配置(会警告您使用 `chmod 600`)。
- 加密令牌使用 PBKDF2-HMAC-SHA256,60万次迭代(OWASP 2023 推荐)和随机的每安装盐。
- 每会话解密令牌缓存(`/tmp/sheep-feeds-cli-sess--`)使用 `O_NOFOLLOW` 以防止符号链接指向预植攻击。
## 隐私与法律
- **隐私政策:** https://sheep.byfranke.com/pages/privacy.html
- **服务条款:** https://sheep.byfranke.com/pages/terms.html
- **支持:** support@byfranke.com
- **许可证:** byFranke 许可证(见 `LICENSE`)。
## 路线图
- 面向长生命周期集成的流式模式(Server-Sent Events)。
- OpenIOC / STIX 2.1 / MISP 的输出适配器。
- 针对每个 feed 的、模式感知的输出(为 `cve` 带 CVSS 颜色的表格,为 `ransomware` 带国家旗帜表情符号等)。
问题和功能请求:https://github.com/byfranke/sheep-feeds-cli/issues
标签:API客户端, APT情报, Homebrew安装, ICS/SCADA安全, JSON数据, masscan, meg, SIEM集成, SOAR自动化, 云计算, 信息安全, 勒索软件情报, 威胁情报, 威胁情报平台, 安全运营, 安装脚本, 应用安全, 开发者工具, 情报feed, 扫描框架, 数据摘要, 终端查询, 网络安全, 脚本工具, 自动化监控, 规则引擎, 逆向工具, 隐私保护