Skip to main content

Install cyprobe

System requirements​

Cyprobe captures raw network frames in passive mode and crafts protocol-level packets in active mode. Both require elevated privileges:

  • Linux: run as root, or grant the binary CAP_NET_RAW + CAP_NET_ADMIN:
    sudo setcap cap_net_raw,cap_net_admin=eip /usr/local/bin/cyprobe
  • macOS: run with sudo. BPF device access is required for packet capture.
  • Windows: not supported. OT networks overwhelmingly run Linux-based appliances.

Minimum: 64 MB RAM, 10 MB disk. No runtime dependencies beyond libc.

Cargo (from source)​

Requires Rust 1.75+.

cargo install --git https://github.com/cybrium-ai/cyprobe cyprobe

Clone the rule pack separately -- cargo does not bundle it:

git clone https://github.com/cybrium-ai/cyprobe /tmp/cyprobe
export CYPROBE_RULES=/tmp/cyprobe/rules

Add the export to your shell rc file.

Build from source​

git clone https://github.com/cybrium-ai/cyprobe
cd cyprobe
cargo build --release

The binary lands at target/release/cyprobe. Copy it and the rules/ directory to your target machine.

Cross-compile for ARM​

OT gateways (Moxa, Advantech, generic ARM SBCs) typically run aarch64-unknown-linux-gnu or armv7-unknown-linux-gnueabihf.

# Install the cross-compilation toolchain
rustup target add aarch64-unknown-linux-gnu
sudo apt install gcc-aarch64-linux-gnu

# Build
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc \
cargo build --release --target aarch64-unknown-linux-gnu

The resulting binary is statically linked against musl if you prefer:

rustup target add aarch64-unknown-linux-musl
cargo build --release --target aarch64-unknown-linux-musl

Raw binary​

Release archives are published at github.com/cybrium-ai/cyprobe/releases for:

  • aarch64-unknown-linux-gnu / x86_64-unknown-linux-gnu
  • aarch64-apple-darwin / x86_64-apple-darwin

Each archive contains the cyprobe binary + the rules/ directory.

VERSION=0.1.0
TARGET=x86_64-unknown-linux-gnu
curl -L "https://github.com/cybrium-ai/cyprobe/releases/download/v${VERSION}/cyprobe_${VERSION}_${TARGET}.tar.gz" \
-o cyprobe.tar.gz
tar xzf cyprobe.tar.gz
sudo mv cyprobe_*/cyprobe /usr/local/bin/
sudo mv cyprobe_*/rules /usr/local/share/cyprobe/rules
sudo setcap cap_net_raw,cap_net_admin=eip /usr/local/bin/cyprobe

Verify your install​

cyprobe --version
cyprobe rules list

The first command should print cyprobe 0.1.0. The second should list the 10 seed rules.

Troubleshooting​

Permission denied or Operation not permitted​

You need raw socket access. Either run with sudo or set capabilities:

sudo setcap cap_net_raw,cap_net_admin=eip $(which cyprobe)

Rules: 0​

Cyprobe searches for rules in this order:

  1. $CYPROBE_RULES env var
  2. <exe_dir>/rules
  3. <exe_dir>/../share/cyprobe/rules

Point $CYPROBE_RULES at the rules/ directory from the repo if none of these match.

Next step​