bump to 0.1.4

This commit is contained in:
Golumpa 2026-06-17 15:23:02 +01:00
parent 20bf0d4459
commit 21dcbdcd13
8 changed files with 72 additions and 24 deletions

View file

@ -29,14 +29,38 @@ The exporter decodes Permanent Board, Limited Character Board, and Arc Miracle B
## Requirements ## Requirements
- Python 3.10 or newer. - Python 3.10 or newer when running from source. Release binaries include the Python runtime.
- Packet-capture permission: Administrator on Windows, or root/capture capabilities on Linux and macOS. - Packet-capture permission. On Windows, Npcap can usually capture without running this tool as Administrator; the raw-socket fallback may need Administrator. On Linux and macOS, use root or capture capabilities as required by your system.
- **Windows:** [Npcap](https://npcap.com/) is recommended. Install it normally; WinPcap API-compatible mode is not required. If Npcap is unavailable or cannot be initialized, `auto` falls back to the Windows built-in raw-socket backend. - **Windows:** [Npcap](https://npcap.com/) is recommended. Install it normally; WinPcap API-compatible mode is not required. If Npcap is unavailable or cannot be initialized, `auto` falls back to the Windows built-in raw-socket backend.
- **Linux:** install the system **libpcap** runtime if it is not already present. Package names commonly include `libpcap0.8` on Debian/Ubuntu and `libpcap` on Fedora, Arch, and similar distributions. - **Linux:** install the system **libpcap** runtime if it is not already present. Package names commonly include `libpcap0.8` on Debian/Ubuntu and `libpcap` on Fedora, Arch, and similar distributions.
- **macOS:** the system normally includes **libpcap**, so no separate Npcap installation is needed. - **macOS:** the system normally includes **libpcap**, so no separate Npcap installation is needed.
Npcap is Windows-only and is not bundled with this project. Linux and macOS use libpcap, the cross-platform capture library on which Npcap is based. Npcap is Windows-only and is not bundled with this project. Linux and macOS use libpcap, the cross-platform capture library on which Npcap is based.
## Downloads
Compiled command-line builds are published from GitHub Actions as release assets:
- `nte-history-exporter.exe` for Windows
- `nte-history-exporter-linux` for Linux
- `nte-history-exporter-macos` for macOS
- Versioned `.zip` archives for each platform
The Windows executable is a single console app. Start it from a terminal:
```powershell
.\nte-history-exporter.exe
```
On Linux and macOS, make the downloaded binary executable before running it. Use `sudo` only when your system requires elevated capture permission:
```bash
chmod +x ./nte-history-exporter-linux
sudo ./nte-history-exporter-linux
```
Use `nte-history-exporter-macos` in the same way on macOS. If your browser or OS blocks a downloaded macOS binary, allow it from the system security prompt before running it again.
## Usage ## Usage
### Live capture ### Live capture
@ -48,13 +72,21 @@ The default `auto` capture backend uses:
Use `--capture-backend libpcap` to require Npcap/libpcap without fallback, or `--capture-backend raw` to require the Windows raw-socket backend. Use `--capture-backend libpcap` to require Npcap/libpcap without fallback, or `--capture-backend raw` to require the Windows raw-socket backend.
#### Windows (requires Administrator) #### Windows
Downloaded executable:
```powershell ```powershell
.\run-exporter.ps1 --live .\nte-history-exporter.exe
``` ```
Or simply double-click **`run-exporter.cmd`** — it asks for confirmation before requesting Administrator privileges, and does nothing until you agree. From source:
```powershell
.\run-exporter.ps1
```
Or simply double-click **`run-exporter.cmd`**.
> [!IMPORTANT] > [!IMPORTANT]
> For automatic user UID detection, launch the tool **before pressing Start on the game's main menu**. If you are already in game, history capture can still work; the tool will ask for your UID before saving if it cannot detect it automatically. > For automatic user UID detection, launch the tool **before pressing Start on the game's main menu**. If you are already in game, history capture can still work; the tool will ask for your UID before saving if it cannot detect it automatically.
@ -73,19 +105,34 @@ If a page response is missed, the exporter reports the missing page number while
#### Linux/macOS #### Linux/macOS
Install the project and ensure the system libpcap runtime is available: Downloaded executable, using `sudo` when your system requires elevated capture permission:
```bash
chmod +x ./nte-history-exporter-linux
sudo ./nte-history-exporter-linux
```
From source, install the project and ensure the system libpcap runtime is available:
```bash ```bash
python3 -m venv .venv python3 -m venv .venv
source .venv/bin/activate source .venv/bin/activate
python -m pip install -e . python -m pip install -e .
sudo .venv/bin/nte-history-exporter --live sudo .venv/bin/nte-history-exporter
``` ```
macOS normally includes libpcap. On Linux, install the distribution's libpcap runtime package if it is not already present. Capture can also be granted through platform-specific capabilities instead of running the whole exporter with `sudo`. macOS normally includes libpcap. On Linux, install the distribution's libpcap runtime package if it is not already present. Capture can also be granted through platform-specific capabilities instead of running the whole exporter with `sudo`.
### File replay ### File replay
Downloaded executable:
```powershell
.\nte-history-exporter.exe capture.flows
```
From source:
```powershell ```powershell
.\run-exporter.ps1 capture.flows .\run-exporter.ps1 capture.flows
``` ```

View file

@ -11,7 +11,7 @@ The sanitized JSON export uses:
"capture_source": "npcap", "capture_source": "npcap",
"exporter": { "exporter": {
"name": "nte-history-exporter", "name": "nte-history-exporter",
"version": "0.1.3" "version": "0.1.4"
}, },
"banner": { "banner": {
"id": "Lottery_Permanent", "id": "Lottery_Permanent",

View file

@ -1,6 +1,6 @@
[project] [project]
name = "nte-history-exporter" name = "nte-history-exporter"
version = "0.1.3" version = "0.1.4"
description = "Cross-platform Neverness to Everness pull-history exporter." description = "Cross-platform Neverness to Everness pull-history exporter."
requires-python = ">=3.10" requires-python = ">=3.10"
dependencies = [] dependencies = []

View file

@ -14,27 +14,25 @@ function ConvertTo-QuotedArgument {
function Test-RequiresAdministrator { function Test-RequiresAdministrator {
param([string[]]$Arguments) param([string[]]$Arguments)
if ($Arguments.Count -eq 0) {
return $true
}
if ($Arguments -contains '--help' -or $Arguments -contains '-h') { if ($Arguments -contains '--help' -or $Arguments -contains '-h') {
return $false return $false
} }
if ($Arguments -contains '--live') {
return $true
}
foreach ($arg in $Arguments) { for ($i = 0; $i -lt $Arguments.Count; $i++) {
if (-not $arg.StartsWith('-')) { $arg = $Arguments[$i]
return $false if ($arg -eq '--capture-backend' -and $i + 1 -lt $Arguments.Count) {
} return $Arguments[$i + 1] -eq 'raw'
} }
if ($arg -eq '--capture-backend=raw') {
return $true return $true
}
}
return $false
} }
if ((Test-RequiresAdministrator -Arguments $args) -and -not (Test-IsAdministrator)) { if ((Test-RequiresAdministrator -Arguments $args) -and -not (Test-IsAdministrator)) {
Write-Host 'Administrator permission is required for live packet capture.' Write-Host 'Administrator permission may be required for the Windows raw capture backend.'
Write-Host 'Windows will show a UAC prompt so the exporter can listen to game network traffic.' Write-Host 'Windows will show a UAC prompt so the exporter can use raw sockets.'
Write-Host '' Write-Host ''
$answer = Read-Host 'Continue and request administrator access? (Y/N)' $answer = Read-Host 'Continue and request administrator access? (Y/N)'
if ($answer -notin @('Y', 'y', 'Yes', 'yes')) { if ($answer -notin @('Y', 'y', 'Yes', 'yes')) {

View file

@ -1 +1 @@
__version__ = "0.1.3" __version__ = "0.1.4"

View file

@ -50,7 +50,9 @@ def main(argv: list[str] | None = None) -> int:
return 0 return 0
except (LibpcapUnavailable, PermissionError) as exc: except (LibpcapUnavailable, PermissionError) as exc:
console.print_problem(str(exc)) console.print_problem(str(exc))
console.print_note("Install/enable Npcap or libpcap and run with packet-capture permissions.") console.print_note(
"Install/enable Npcap or libpcap. If using raw capture on Windows, right-click and run as Administrator; on Linux/macOS, try sudo."
)
return 1 return 1
decoded = decode_mitmproxy_flows(args.capture_source, args.flow_index) decoded = decode_mitmproxy_flows(args.capture_source, args.flow_index)

View file

@ -122,6 +122,7 @@ def print_capture_stats(received: int, dropped: int, interface_dropped: int) ->
def print_capture_fallback(reason: str) -> None: def print_capture_fallback(reason: str) -> None:
print(style(" ! Npcap unavailable; using Windows raw capture.", YELLOW)) print(style(" ! Npcap unavailable; using Windows raw capture.", YELLOW))
print(style(f" {reason}", DIM)) print(style(f" {reason}", DIM))
print(style(" Raw capture may require running this terminal as Administrator.", DIM))
def print_results_header() -> None: def print_results_header() -> None:

View file

@ -11,7 +11,7 @@ LIMITED_CHARACTER_BANNER_NAME = "Limited Character Board"
ARC_BANNER_ID = "Arc_MiracleBox" ARC_BANNER_ID = "Arc_MiracleBox"
ARC_BANNER_NAME = "Arc Miracle Box" ARC_BANNER_NAME = "Arc Miracle Box"
EXPORTER_NAME = "nte-history-exporter" EXPORTER_NAME = "nte-history-exporter"
EXPORTER_VERSION = "0.1.3" EXPORTER_VERSION = "0.1.4"
HISTORY_REQUEST_BANNER = 4220 HISTORY_REQUEST_BANNER = 4220
HISTORY_REQUEST_LENGTH = 45 HISTORY_REQUEST_LENGTH = 45