{"id":15290617,"url":"https://github.com/znailnetem/znail","last_synced_at":"2025-04-13T10:12:24.593Z","repository":{"id":47399506,"uuid":"207292069","full_name":"znailnetem/znail","owner":"znailnetem","description":"Network emulator intended to run on a Raspberry Pi.","archived":false,"fork":false,"pushed_at":"2023-05-01T21:37:28.000Z","size":6177,"stargazers_count":16,"open_issues_count":7,"forks_count":4,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-08T22:35:09.480Z","etag":null,"topics":["emulation","netem","networking","qdisc","raspberry-pi","tc"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/znailnetem.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-09-09T11:20:38.000Z","updated_at":"2022-11-17T08:19:18.000Z","dependencies_parsed_at":"2023-10-21T07:15:27.058Z","dependency_job_id":null,"html_url":"https://github.com/znailnetem/znail","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/znailnetem%2Fznail","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/znailnetem%2Fznail/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/znailnetem%2Fznail/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/znailnetem%2Fznail/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/znailnetem","download_url":"https://codeload.github.com/znailnetem/znail/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247941721,"owners_count":21022035,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["emulation","netem","networking","qdisc","raspberry-pi","tc"],"created_at":"2024-09-30T16:08:48.093Z","updated_at":"2025-04-13T10:12:24.568Z","avatar_url":"https://github.com/znailnetem.png","language":"Python","readme":"# Znail\n\n![Znail Logo](/artwork/znail_x10.png)\n\nZnail is a network emulator inteded to run on a computer with two network interfaces.\nEquipped with two network interfaces, Znail acts as a network bridge.\nZnail can then control network traffic passing through the bridge.\n\nWith a system under test connected to the network through this bridge,\nZnail can help you answer question about how that system behaves under various network conditions.\n\n# Features\n\n* Emulate packet delay\n* Emulate packet loss\n* Emulate packet duplication\n* Emulate packet reordering\n* Emulate packet corruption\n* Control packet rate\n* Capture network packets\n* Emulate a disconnect (by powering down one of its network interfaces)\n* Override answers to DNS queries (by redirecting DNS traffic to its internal DNS server)\n* Redirect IP traffic from one host to another\n* Not apply any of the above for certain hosts using a whitelist\n\nZnail can be managed in one of two ways, using its web interface or its REST API.\n\n# Getting Started\n\nThe easiest way to get started with Znail is to [download](https://github.com/znailnetem/znail/releases/latest) an image with Znail pre-installed.\n\nThe image can then be installed on a suitable target system, for example a [Raspberry Pi](https://www.raspberrypi.org/documentation/installation/installing-images/README.md)\nor a [NanoPi R2S](https://docs.armbian.com/User-Guide_Getting-Started/#how-to-prepare-a-sd-card).\n\n## Raspberry Pi\n\nThe default SSH username for the pre-built image is `pi` and the password is `raspberry`.\n\n## NanoPi R2S\n\nThe default SSH username for the pre-built image is `root` and the password is `1234`.\n\n# Generating Custom Images\n\nTo set up the environment on an Ubuntu 20.04 system, run the following commands:\n\n    sudo apt update\n    sudo apt install -y coreutils quilt parted qemu-user-static debootstrap zerofree zip dosfstools bsdtar libcap2-bin grep rsync xz-utils file git curl\n\nTo generate an image:\n\n    make image\n\nThe resulting images can be found in the `dist/image` directory.\n\nGenerating the different images can take quite some time.\nIf you are looking to only build one specific kind of image more narrow `make` targets are available.\nSee `make help` for more information.\n\n# Development\n\nThe Python environment requires that the `pip` tool is installed.\n\nTo set up the development environment on an Ubuntu 20.04 system, run the following commands:\n\n    sudo apt update\n    sudo apt install -y python3-pip python3-venv\n\nTo build and activate the virtual Python environment:\n\n    source ./activate\n\nTo automatically format the code:\n\n    make format\n\nTo run tests and static code analysis:\n\n    make check\n\nMore information about what targets the build system provides:\n\n    make help\n\n# Special Thanks\n\nSpecial thanks to Alice Persson for contributing the Znail logotype.\n\n# License\n\nDistributed under the terms of the Apache License 2.0.\n","funding_links":[],"categories":["Python"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fznailnetem%2Fznail","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fznailnetem%2Fznail","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fznailnetem%2Fznail/lists"}