diff --git a/.all-contributorsrc b/.all-contributorsrc
index 87342cd8..e56df8da 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -630,6 +630,15 @@
"design",
"a11y"
]
+ },
+ {
+ "login": "domcyrus",
+ "name": "Marco Cadetg",
+ "avatar_url": "https://avatars.githubusercontent.com/u/884083?v=4",
+ "profile": "https://github.com/domcyrus",
+ "contributions": [
+ "platform"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 00000000..50d4dff2
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,16 @@
+# Ignore everything
+*
+
+# Explicitly allow files
+!src/**/*.rs
+!build.rs
+!Cargo.toml
+!Cargo.lock
+!Dockerfile
+!services.txt
+!resources/countries_flags/**/*.svg
+!resources/DB/*.mmdb
+!resources/fonts/subset/*.ttf
+!resources/logos/raw/icon.png
+!resources/packaging/windows/graphics/sniffnet.ico
+!resources/sounds/*.mp3
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
new file mode 100644
index 00000000..35afb8d6
--- /dev/null
+++ b/.github/workflows/docker.yml
@@ -0,0 +1,42 @@
+name: Docker
+
+on:
+ workflow_dispatch:
+
+jobs:
+ docker:
+ name: Docker Build
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Extract version from Cargo.toml
+ id: cargo-version
+ run: |
+ VERSION=v$(grep -m1 "^version" Cargo.toml | cut -d'"' -f2)
+ echo "VERSION=$VERSION" >> $GITHUB_ENV
+ echo "version=$VERSION" >> $GITHUB_OUTPUT
+
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v3
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+
+ - name: Login to GitHub Container Registry
+ uses: docker/login-action@v3
+ with:
+ registry: ghcr.io
+ username: GyulyVGC
+ password: ${{ secrets.GHCR_TOKEN }}
+
+ - name: Build and push
+ uses: docker/build-push-action@v5
+ with:
+ context: .
+ platforms: linux/amd64,linux/arm64
+ push: true
+ tags: |
+ ghcr.io/gyulyvgc/sniffnet:latest
+ ghcr.io/gyulyvgc/sniffnet:${{ env.VERSION }}
diff --git a/.gitignore b/.gitignore
index 05386a8f..fe36f504 100644
--- a/.gitignore
+++ b/.gitignore
@@ -55,6 +55,5 @@ $RECYCLE.BIN/
*.lnk
### Custom... ###
-Dockerfile
lcov.info
-*.pcap
\ No newline at end of file
+*.pcap
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 15bf1df7..3425ac85 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@ All Sniffnet releases with the relative changes are documented in this file.
- Show data agglomerates in _Inspect_ page table ([#684](https://github.com/GyulyVGC/sniffnet/pull/684) โ fixes [#601](https://github.com/GyulyVGC/sniffnet/issues/601))
- Added Traditional Chinese (Taiwan) translation ๐น๐ผ ([#774](https://github.com/GyulyVGC/sniffnet/pull/774))
- Added Indonesian translation ๐ฎ๐ฉ ([#611](https://github.com/GyulyVGC/sniffnet/pull/611))
+- A Docker image of Sniffnet is now available ([#735](https://github.com/GyulyVGC/sniffnet/pull/735))
- Updated some of the existing translations to v1.3:
- Portuguese ([#690](https://github.com/GyulyVGC/sniffnet/pull/690))
- Ukrainian ([#692](https://github.com/GyulyVGC/sniffnet/pull/692))
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index 47fc150f..6ff792aa 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -51,42 +51,43 @@ A big shout-out to all the contributors of Sniffnet ([emoji key](https://allcont
 Marc Gavilรกn ๐ |
+  Marco Cadetg ๐ฆ |
 Matthias Braun ๐ |
 Michel Hansma ๐จ ๏ธ๏ธ๏ธ๏ธโฟ๏ธ |
 Morgan Hill ๐ก๏ธ |
 Muhammadali Hakimov ๐ |
 Oleksii Filonenko ๐ |
 Orhun Parmaksฤฑz ๐ ๐ฆ ๐ต |
-  Peter Dave Hello ๐ |
+  Peter Dave Hello ๐ |
 Phil Clifford ๐ฆ |
 Quetzal-coalt ๐ |
 Safaraliev Maxim ๐ |
 Shawn Yeager ๐ต |
 The Artifex ๐ ๐ฆ |
 Trแปnh Duy Hฦฐng ๐ |
-  TyseEX ๐ |
+  TyseEX ๐ |
 Victor Nilsson ๐ |
 Wang Zishi ๐ |
 Yevhen ๐ |
 ZEROF ๐ต |
 ZeroDot1 ๐จ ๏ธ๏ธ๏ธ๏ธโฟ๏ธ |
 clr ๐ ๐ |
-  ervinpopescu ๐ |
+  ervinpopescu ๐ |
 glitsj16 ๐ฆ |
 guilherme-demarchi ๐ |
 hirotake111 ๐ |
 luca3s ๐ |
 pia ๐ |
 pin ๐ฆ |
-  shu-kitamura ๐ป |
+  shu-kitamura ๐ป |
 starccy ๐ป |
 tiansheng li ๐ต |
 vtiinanen ๐ |
diff --git a/Cargo.lock b/Cargo.lock
index 7abf03a6..e2d5e6ec 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -647,9 +647,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
[[package]]
name = "chrono"
-version = "0.4.40"
+version = "0.4.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c"
+checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d"
dependencies = [
"android-tzdata",
"iana-time-zone",
@@ -828,7 +828,7 @@ dependencies = [
"directories",
"serde",
"thiserror 1.0.69",
- "toml 0.8.20",
+ "toml 0.8.22",
]
[[package]]
@@ -4715,7 +4715,7 @@ dependencies = [
"serde_test",
"serial_test",
"splines",
- "toml 0.8.20",
+ "toml 0.8.22",
"winres",
]
@@ -5153,9 +5153,9 @@ dependencies = [
[[package]]
name = "toml"
-version = "0.8.20"
+version = "0.8.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148"
+checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae"
dependencies = [
"serde",
"serde_spanned",
@@ -5165,26 +5165,33 @@ dependencies = [
[[package]]
name = "toml_datetime"
-version = "0.6.8"
+version = "0.6.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41"
+checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3"
dependencies = [
"serde",
]
[[package]]
name = "toml_edit"
-version = "0.22.24"
+version = "0.22.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474"
+checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e"
dependencies = [
"indexmap",
"serde",
"serde_spanned",
"toml_datetime",
+ "toml_write",
"winnow",
]
+[[package]]
+name = "toml_write"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076"
+
[[package]]
name = "tower"
version = "0.5.2"
diff --git a/Cargo.toml b/Cargo.toml
index 6550c1f1..33f5d07a 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -39,7 +39,7 @@ strip = true
[dependencies]
pcap = "2.2.0"
etherparse = "0.18.0"
-chrono = { version = "0.4.40", default-features = false, features = ["clock"] }
+chrono = { version = "0.4.41", default-features = false, features = ["clock"] }
plotters = { version = "0.3.7", default-features = false, features = ["area_series", "line_series"] }
iced = { version = "0.13.1", features = ["tokio", "svg", "advanced", "lazy", "image"] }
plotters-iced = "0.11.0"
@@ -48,7 +48,7 @@ confy = "0.6.1"
serde = { version = "1.0.219", default-features = false, features = ["derive"] }
rodio = { version = "0.20.1", default-features = false, features = ["mp3"] }
dns-lookup = "2.0.4"
-toml = "0.8.20"
+toml = "0.8.22"
ctrlc = { version = "3.4.6", features = ["termination"] }
rfd = "0.15.3"
phf = "0.11.3"
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 00000000..ad96da93
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,34 @@
+FROM rust:1.85-slim AS builder
+
+# Install build dependencies for both X11 and Wayland
+RUN apt-get update && apt-get install -y \
+ libfreetype6-dev \
+ libexpat1-dev \
+ libpcap-dev \
+ libasound2-dev \
+ libfontconfig1-dev \
+ libgtk-3-dev \
+ pkg-config \
+ && rm -rf /var/lib/apt/lists/*
+
+WORKDIR /usr/src/sniffnet
+COPY . .
+
+RUN cargo build --release
+
+# Runtime stage
+FROM debian:bookworm-slim
+
+# Install runtime dependencies for both X11 and Wayland
+RUN apt-get update && apt-get install -y \
+ libfreetype6 \
+ libexpat1 \
+ libpcap0.8 \
+ libasound2 \
+ libfontconfig1 \
+ libgtk-3-0 \
+ && rm -rf /var/lib/apt/lists/*
+
+COPY --from=builder /usr/src/sniffnet/target/release/sniffnet /usr/local/bin/sniffnet
+
+ENTRYPOINT ["sniffnet"]
diff --git a/README.md b/README.md
index af0b231c..d8bb4c9a 100644
--- a/README.md
+++ b/README.md
@@ -64,113 +64,12 @@ Do you want to help the project in an alternative way? You can also head to the
| [64‑bit](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_Windows_64-bit.msi) \| [32‑bit](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_Windows_32-bit.msi) | [Intel](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_macOS_Intel.dmg) \| [Apple silicon](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_macOS_AppleSilicon.dmg) | [amd64](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_LinuxDEB_amd64.deb) \| [arm64](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_LinuxDEB_arm64.deb) \| [i386](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_LinuxDEB_i386.deb) \| [armhf](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_LinuxDEB_armhf.deb) | [x86_64](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_LinuxRPM_x86_64.rpm) \| [aarch64](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_LinuxRPM_aarch64.rpm) |
Links in the table above will download the latest version of Sniffnet directly from [GitHub releases](https://github.com/GyulyVGC/sniffnet/releases).
+Not what you're looking for? Check out [alternative installation methods](https://github.com/GyulyVGC/sniffnet/wiki/Alternative-installation-methods).
> [!NOTE]
>
> Remember to also install the [required dependencies](https://github.com/GyulyVGC/sniffnet/wiki/Required-dependencies) for your operating system.
-**Alternative installation methods** are reported in the following:
-
-
-
- from Crates.io
-
-Follow this method only if you have [Rust installed](https://www.rust-lang.org/tools/install) on your machine.
-In this case, the application binary can be built and installed with:
-
-```sh
-cargo install sniffnet --locked
-```
-
-
-
-
-
-
- from Homebrew
-
- You can install [Sniffnet Homebrew package](https://github.com/Homebrew/homebrew-core/pkgs/container/core%2Fsniffnet) with:
-
- ```sh
-brew install sniffnet
-```
-
-
-
-
-
- from Nixpkgs
-
- You can install [Sniffnet Nix package](https://search.nixos.org/packages?channel=23.05&show=sniffnet&from=0&size=50&sort=relevance&type=packages&query=sniffnet) adding the following Nix code to your NixOS Configuration, usually located in `/etc/nixos/configuration.nix`:
-
- ```nix
- environment.systemPackages = [
- pkgs.sniffnet
- ];
-```
-
- Alternatively, you can install it in your home using [Home Manager](https://github.com/nix-community/home-manager) with:
-
- ```nix
- home.packages = [
- pkgs.sniffnet
- ];
-```
-
- Alternatively, you can try it in a shell with:
- ```sh
-nix-shell -p sniffnet
-```
-
-
-
-
-
- on Arch Linux
-
- You can install Sniffnet community package via [pacman](https://wiki.archlinux.org/title/Pacman):
-
- ```sh
-pacman -S sniffnet
-```
-
-
-
-
-
- on FreeBSD
-
-You can install Sniffnet port with:
-
- ```sh
-pkg install sniffnet
-```
-
-
-
-
-
- on NetBSD
-
-You can install Sniffnet from the official repositories via [pkgin](https://pkgin.net):
-
- ```sh
-pkgin install sniffnet
-```
-
-
-
-
- on Tiny Core Linux
-
-You can install Sniffnet from the official repository with:
-
- ```
-tce-load -wi sniffnet
-```
-
-
-
## Features
- ๐ป choose a **network adapter** of your PC to inspect