misiektoja/psn_monitor
GitHub: misiektoja/psn_monitor
一个用于实时追踪 PlayStation Network 玩家游戏活动并支持邮件通知与数据导出的 Python 命令行监控工具。
Stars: 39 | Forks: 7
# psn_monitor
-n "your_psn_npsso_code"
```
或者,如果您是[手动安装](#manual-installation)的:
```
python3 psn_monitor.py -n "your_psn_npsso_code"
```
获取所有支持的命令行参数/标志列表:
```
psn_monitor --help
```
## 配置
### 配置文件
大多数设置可以通过命令行参数进行配置。
如果您想持久化存储配置,请生成一个默认的配置模板并将其保存到名为 `psn_monitor.conf` 的文件中:
```
psn_monitor --generate-config > psn_monitor.conf
```
编辑 `psn_monitor.conf` 文件并更改任何所需的配置选项(每个选项都提供了详细注释)。
### PSN NPSSO Code
登录您的 [My PlayStation](https://my.playstation.com/) 账号。
在另一个标签页中,前往:[https://ca.account.sony.com/api/v1/ssocookie](https://ca.account.sony.com/api/v1/ssocookie)
复制 `npsso` code 的值。
使用以下方法之一提供 `PSN_NPSSO` secret:
- 在运行时使用 `-n` / `--npsso-key` 传递
- 将其设置为[环境变量](#storing-secrets)(例如 `export PSN_NPSSO=...`)
- 将其添加到 [.env 文件](#storing-secrets)(`PSN_NPSSO=...`)中以供持久使用
后备方案:
- 将其硬编码在代码或配置文件中
Token 将在 2 个月后过期。该工具会在过期时发出警报。
如果您将 `PSN_NPSSO` 存储在 dotenv 文件中,您可以更新其值并向进程发送 `SIGHUP` 信号,以重新加载包含新 `npsso` 值的文件,而无需重启工具。更多信息请参见[存储 Secrets](#storing-secrets)和[信号控制 (macOS/Linux/Unix)](#signal-controls-macoslinuxunix)。
### 用户隐私设置
为了监控 PlayStation 用户活动,需要在受监控的用户账号上启用适当的隐私设置。
用户应前往 [PlayStation 账号管理](https://www.playstation.com/acct/management)。
**隐私设置 → 个人信息 | 消息 → 在线状态和正在游玩** 中的值应设置为**仅限好友**或**任何人**。
### 时区
默认情况下,使用 `tzlocal` 自动检测时区。您可以在 `psn_monitor.conf` 中手动设置:
```
LOCAL_TIMEZONE='Europe/Warsaw'
```
您可以像这样获取 pytz 支持的所有时区列表:
```
python3 -c "import pytz; print('\n'.join(pytz.all_timezones))"
```
### SMTP 设置
如果您想使用电子邮件通知功能,请在 `psn_monitor.conf` 文件中配置 SMTP 设置。
使用 `--send-test-email` 标志验证您的 SMTP 设置(该工具将尝试发送一封测试电子邮件通知):
```
psn_monitor --send-test-email
```
### 存储 Secrets
建议将 `PSN_NPSSO` 或 `SMTP_PASSWORD` 等 secrets 存储为环境变量或 dotenv 文件。
在 **Linux/Unix/macOS/WSL** 系统上使用 `export` 设置环境变量:
```
export PSN_NPSSO="your_psn_npsso_code"
export SMTP_PASSWORD="your_smtp_password"
```
在 **Windows 命令提示符**上使用 `set` 代替 `export`,在 **Windows PowerShell** 上使用 `$env`。
或者,将它们持久地存储在 dotenv 文件中(推荐):
```
PSN_NPSSO="your_psn_npsso_code"
SMTP_PASSWORD="your_smtp_password"
```
默认情况下,该工具会自动在当前目录及其上层目录中搜索名为 `.env` 的 dotenv 文件。
您可以使用 `DOTENV_FILE` 或 `--env-file` 标志指定自定义文件:
```
psn_monitor --env-file /path/.env-psn_monitor
```
您也可以使用 `DOTENV_FILE = "none"` 或 `--env-file none` 禁用 `.env` 自动搜索:
```
psn_monitor --env-file none
```
作为后备方案,您也可以将 secrets 存储在配置文件或源代码中。
## 用法
### 用户信息显示模式
该工具提供了一个详细的用户信息显示模式,可显示全面的 PlayStation 资料洞察。此模式显示一次信息然后退出(它不会运行持续监控)。
要获取 PlayStation (PSN) 用户 ID(在以下示例中为 `psn_user_id`)的详细用户信息,请使用 `-i` 或 `--info` 标志:
```
psn_monitor -i
```
如果您尚未设置 `PSN_NPSSO` secret,您可以使用 `-n` 标志:
```
psn_monitor -i -n "your_psn_npsso_code"
```
这将显示:
- PlayStation/PSN ID
- 在线状态和可游玩状态
- 平台信息
- PS+ 订阅状态
- 认证状态
- 关于我
- 语言
- 好友关系和共同好友数量
- 个人资料 URL
- 带有最后游玩日期和总游戏时间的最近游玩的游戏
要同时显示奖杯摘要和最近获得的奖杯列表,请添加 `--trophies` 标志:
```
psn_monitor -i --trophies
```
要禁用获取最近游玩的游戏列表(执行速度更快),请使用 `--no-recent-games` 标志:
```
psn_monitor -i --no-recent-games
```
您可以组合使用这两个标志:
```
psn_monitor -i --trophies --no-recent-games
```
```
如果您尚未设置 `PSN_NPSSO` secret,您可以使用 `-n` 标志:
```
psn_monitor -n "your_psn_npsso_code"
```
默认情况下,该工具会在以下位置查找名为 `psn_monitor.conf` 的配置文件:
- 当前目录
- 主目录 (`~`)
- 脚本目录
如果您按照[配置](#configuration)中的说明生成了配置文件,但以其他名称或保存在其他目录中,您可以使用 `--config-file` 标志指定其位置:
```
psn_monitor --config-file /path/psn_monitor_new.conf
```
该工具将一直运行直到被中断(`Ctrl+C`)。使用 `tmux` 或 `screen` 来保持持久化。
您可以通过运行多个脚本实例来监控多个 PSN 玩家。
该工具会自动将其输出保存到 `psn_monitor_.log` 文件中。可以通过 `PSN_LOGFILE` 配置选项在设置中进行更改,或者通过 `DISABLE_LOGGING` / `-d` 标志完全禁用。
该工具还会将时间戳和最后状态(每次更改后)保存到 `psn__last_status.json` 文件中,因此最后状态在工具重启后仍然可用。
### 电子邮件通知
要在用户上线或下线时启用电子邮件通知:
- 将 `ACTIVE_INACTIVE_NOTIFICATION` 设置为 `True`
- 或使用 `-a` 标志
```
psn_monitor -a
```
要在用户开始、停止或更改所玩的游戏时获得通知:
- 将 `GAME_CHANGE_NOTIFICATION` 设置为 `True`
- 或使用 `-g` 标志
```
psn_monitor -g
```
要在发生错误时禁用发送电子邮件(默认启用):
- 将 `ERROR_NOTIFICATION` 设置为 `False`
- 或使用 `-e` 标志
```
psn_monitor -e
```
请确保您之前已经定义了 SMTP 设置(请参见 [SMTP 设置](#smtp-settings))。
电子邮件示例:
-b psn_user_id.csv
```
如果该文件不存在,将会被自动创建。
### 检查间隔
如果您想自定义轮询间隔,请使用 `-k` 和 `-c` 标志(或相应的配置选项):
```
psn_monitor -k 30 -c 120
```
* `PSN_ACTIVE_CHECK_INTERVAL`、`-k`:用户在线时的检查间隔(秒)
* `PSN_CHECK_INTERVAL`、`-c`:用户离线时的检查间隔(秒)
### 信号控制 (macOS/Linux/Unix)
该工具实现了多个信号处理程序,允许在无需使用新的配置选项/标志重启工具的情况下更改工具的行为。
支持的信号列表:
| 信号 | 描述 |
| ----------- | ----------- |
| USR1 | 切换用户上线或下线时的电子邮件通知 (-a) |
| USR2 | 切换用户开始/停止/更换游戏时的电子邮件通知 (-g) |
| TRAP | 加用户在线时的玩家活动检查计时器(增加 30 秒) |
| ABRT | 减少用户在线时的玩家活动检查计时器(减少 30 秒) |
| HUP | 从 .env 文件重新加载 secrets |
使用 `kill` 或 `pkill` 发送信号,例如:
```
pkill -USR1 -f "psn_monitor "
```
由于 Windows 仅支持有限数量的信号,此功能仅在 Linux/Unix/macOS 上可用。
### 使用 GRC 为日志输出着色
您可以使用 [GRC](https://github.com/garabik/grc) 来为日志着色。
添加到您的 GRC 配置(`~/.grc/grc.conf`)中:
```
# 监控日志文件
.*_monitor_.*\.log
conf.monitor_logs
```
现在将 [conf.monitor_logs](https://raw.githubusercontent.com/misiektoja/psn_monitor/refs/heads/main/grc/conf.monitor_logs) 复制到您的 `~/.grc/` 目录中,当使用 `grc` 工具时,日志文件应该会有漂亮的颜色。
示例:
```
grc tail -F -n 100 psn_monitor_.log
```
## 更新日志
详情请参见 [RELEASE_NOTES.md](https://github.com/misiektoja/psn_monitor/blob/main/RELEASE_NOTES.md)。
## 许可证
在 GPLv3 许可下授权。请参见 [LICENSE](https://github.com/misiektoja/psn_monitor/blob/main/LICENSE)。
标签:ESC4, OSINT, PlayStation, Python, 二进制发布, 开源工具, 数据统计, 无后门, 状态监控, 端口扫描, 逆向工具