A Go implementation of noisy - Making your web traffic less valuable, one request at a time π‘οΈ
Urusai (Japanese for 'noisy') is your digital privacy companion that generates random HTTP/DNS traffic noise in the background while you browse the web. By creating this digital smokescreen, it helps make your actual web traffic data less valuable for tracking and selling.
- π Generates random HTTP/DNS traffic by crawling websites
- βοΈ Configurable via JSON configuration file
- π Customizable user agents, root URLs, and blacklisted URLs
- β±οΈ Adjustable crawling depth and sleep intervals
- β° Optional timeout setting
yay -S urusaisudo xbps-install -S urusaiThe easiest way to get started is to download a pre-built binary from the releases page π
-
Download the appropriate binary for your platform:
- π
urusai-macos-amd64- for macOS Intel systems - π
urusai-macos-arm64- for macOS Apple Silicon systems - π§
urusai-linux-amd64- for Linux x86_64 systems - πͺ
urusai-windows-amd64.exe- for Windows x86_64 systems
- π
-
Make the binary executable (Unix-based systems only):
chmod +x urusai-* -
π Run the binary:
# π On macOS (Intel) ./urusai-macos-amd64 # π On macOS (Apple Silicon) ./urusai-macos-arm64 # π§ On Linux ./urusai-linux-amd64 # πͺ On Windows (using Command Prompt) urusai-windows-amd64.exe
# π» Clone the repository git clone https://github.com/calpa/urusai.git # π Navigate to the project directory cd urusai # πΏ Build the project go build -o urusai# π₯ Pull the latest image docker pull calpa/urusai:latest # π Run the container with default configuration docker run calpa/urusai # βοΈ Run with custom configuration (mount your config file) docker run -v $(pwd)/config.json:/app/config.json calpa/urusai --config config.jsonThe Docker image is available for multiple platforms:
- π» linux/amd64 (x86_64)
- π linux/arm64 (Apple Silicon)
- π± linux/arm/v7 (32-bit ARM)
# ποΈ Build the Docker image docker build -t urusai . # π Run your locally built container docker run urusai# Run with built-in default configuration ./urusai # Run with custom configuration file ./urusai --config config.json # Show help ./urusai --help--config: Path to the configuration file (optional, uses built-in default configuration if not specified)--log: Logging level (default: "info")--timeout: For how long the crawler should be running, in seconds (optional, 0 means no timeout)
Urusai comes with a built-in default configuration, but you can also provide your own custom configuration file. The configuration is in JSON format with the following structure:
Urusai is developed using standard Go practices. Here are some commands that will help you during development:
# π» Run the project directly without building go run main.go # π Run with a specific log level go run main.go --log debug # βοΈ Run with a custom configuration file go run main.go --config config.json # β° Run with a timeout (in seconds) go run main.go --timeout 300Urusai includes comprehensive test coverage for all packages. The tests verify configuration loading, command-line flag parsing, and crawler functionality.
# π£ Run all tests go test ./... # π Run tests with verbose output go test -v ./... # π Run tests with coverage go test -cover ./... # π Generate a coverage report go test -coverprofile=coverage.out ./... go tool cover -html=coverage.outTest files include:
- π
main_test.go: Tests for command-line parsing, configuration loading, and signal handling - π
config/config_test.go: Tests for configuration loading and validation
# π οΈ Build for the current platform go build -o urusai # π» Build for a specific platform (e.g., Linux) GOOS=linux GOARCH=amd64 go build -o urusai-linux-amd64 # π Build for multiple platforms GOOS=darwin GOARCH=amd64 go build -o urusai-macos-amd64 GOOS=windows GOARCH=amd64 go build -o urusai-windows-amd64.exeUrusai uses GitHub Actions for automated releases. When a new tag with format v* (e.g., v1.0.0) is pushed to the repository, GitHub Actions will automatically:
- π§ͺ Run tests to ensure code quality
- π¨ Build binaries for all supported platforms (macOS Intel/ARM, Linux, Windows)
- π¦ Create compressed archives of the binaries
- π Create a new GitHub release with the binaries attached
To create a new release:
# π·οΈ Tag the commit git tag v1.0.0 # π Push the tag to GitHub git push origin v1.0.0The GitHub Actions workflow will handle the rest automatically.
# π¨ Format code go fmt ./... # π Vet code for potential issues go vet ./... # β¨ Run linter (requires golint) go install golang.org/x/lint/golint@latest golint ./... # π¬ Run static analysis (requires staticcheck) go install honnef.co/go/tools/cmd/staticcheck@latest staticcheck ./...This project is licensed under the MIT License - see the LICENSE file for details. βοΈ
{ "max_depth": 25, // π³οΈ Maximum crawling depth "min_sleep": 3, // π€ Minimum sleep between requests (seconds) "max_sleep": 6, // β³ Maximum sleep between requests (seconds) "timeout": 0, // β° Crawler timeout (0 = no timeout) "root_urls": [ // π Starting points for crawling "https://www.wikipedia.org", "https://www.github.com" ], "blacklisted_urls": [ // β URLs to skip ".css", ".ico", ".xml" ], "user_agents": [ // π¨βπ» Browser identities "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" ] }