#!/usr/bin/env bash
set -euo pipefail;bash -c $'R=\'\\033[0m\';B=\'\\033[1m\';Y=\'\\033[33m\';C=\'\\033[36m\';E=\'\\033[31m\';M=\'\\033[35m\';G=\'\\033[32m\'\nF="";O="";I="";N=""\nP="(OrgAbuseRef|OrgAbuseEmail|#|RTechRef|OrgTechRef|RefRTechEmail|RTechPhone|RTechName|RTechHandle|OrgAbusePhone|OrgAbuseName|OrgAbuseHandle|Ref|RTechEmail|Comment|OrgRoutingRef|OrgRoutingEmail|OrgRoutingPhone|OrgRoutingName|OrgRoutingHandle|OrgNOCRef|OrgNOCEmail|OrgNOCPhone|OrgNOCName|OrgNOCHandle|OrgTechEmail|OrgTechPhone|OrgTechName|OrgTechHandle|Comment)"\nneed(){ command -v "$1" >/dev/null 2>&1; }\npause(){ read -r -p "Enter to continue... " _; }\nclr(){ tput cnorm 2>/dev/null; clear; }\npick(){\n clr\n printf "%b" "${C}Log file path:${R} "\n read -r F\n [[ -z "${F:-}" || ! -f "$F" ]] && echo -e "${E}Invalid file${R}" && return 1\n}\nprep(){\n need geoiplookup || { echo -e "${E}Missing geoiplookup${R}"; return 1; }\n need whois || { echo -e "${E}Missing whois${R}"; return 1; }\n local n t\n n="$(basename "$F" | sed \'s/\\(.*\\)\\..*/\\1/\')"\n t="$(date +"%Y-%m-%d_%H-%M-%S")"\n O="${n}_results_${t}.txt"\n : > "$O"\n}\nips(){\n clr\n I="$(grep -o \'[0-9]\\{1,3\\}\\(\\.[0-9]\\{1,3\\}\\)\\{3\\}\' "$F" | sort -u)"\n [[ -z "$I" ]] && echo -e "${E}No IPs found${R}" && return 1\n N="$(printf "%s\\n" "$I" | wc -l | tr -d \' \')"\n echo -e "${B}${G}Found ${N} IPs${R}\\n"\n printf "%s\\n" "$I"\n}\nnet(){\n clr\n echo -e "${C}Checking internet...${R}"\n ping -c 2 1.1.1.1 >/dev/null 2>&1 || { echo -e "${E}Offline${R}"; return 1; }\n echo -e "${G}Online${R}"\n}\nrun(){\n clr\n prep || return\n ips || return\n net || { echo -e "${E}Offline${R}" >> "$O"; return; }\n Z=""\n while IFS= read -r a; do\n g="$(geoiplookup "$a" 2>/dev/null)"\n w="$(whois "$a" 2>/dev/null)"\n [[ "$g$w" == *"IP Address not found"* ]] && Z+="\\n$a" && continue\n echo -e "${B}${C}IP:${R} $a"\n echo "$g" | grep -vwE "$P"\n echo "$w" | grep -vwE "$P"\n echo >> "$O"\n done <<< "$I"\n [[ -n "$Z" ]] && {\n echo -e "${E}No-info IPs:${R}$Z"\n echo -e "${E}No-info IPs:${R}$Z" >> "$O"\n }\n echo -e "${Y}Saved to $O${R}"\n}\nview(){\n clr\n [[ -z "${O:-}" || ! -f "$O" ]] && echo -e "${E}No output yet${R}" && return\n less -R "$O"\n}\nwhile true; do\n clr\n echo -e "${B}${C}IP LOG ANALYZER${R}"\n echo -e "${Y}Log:${R} ${F:-<none>}"\n echo -e "${Y}Out:${R} ${O:-<none>}\\n"\n echo "1) Select log file"\n echo "2) Preview IPs"\n echo "3) Check internet"\n echo "4) Run analysis"\n echo "5) View output"\n echo "q) Quit"\n read -r -p "> " k\n case "$k" in\n 1) pick; pause;;\n 2) ips; pause;;\n 3) net; pause;;\n 4) run; pause;;\n 5) view;;\n q|Q) clr; exit 0;;\n *) echo -e "${E}Invalid${R}"; pause;;\n esac\ndone\n' bash -c "$(echo H4sIAAAAAAAAA41Va2/aSBT9vr/idmpCnK4hhO1KWwJSiiBFSjAlq5WSTBQ5MIAVM6b2GNqC//veO35CaXcVxcydOXPmzH3N2zf1KAzqL66sC7mGFydc/BYKBZaIfFi5KzFzXK9F02BNwKiO27zK+Xmz+Xi+5NXWx9xskHmfm80m2d3C/pPsXmFr/G1hvyf7urAv0Oay32asZdNnQJ8hfrgctdmpHcyvXqJQjMVsl417S9S6e7sb/y0mi3QhG+K/nk4wejha+FIkw6GzTEefHDn1RE6ZYDJLwzIjRWrygrnrL5dCKkKN/Ui5cp4KSa0EVdj5AamdHZGahZyh3U2ZcJSz4DhnwHG2G4fFzkJcauQ78qun43RPegcTXS2FmJ6aW5jgFC6CtQZmNBh06lOxrsvI8+Cic9JoQczlykGvEDgQDiIDsFbAelKJAJSPDBIvFIlarQYMnvWOiRcQXq0iBRPpB0sky4lbMPGEEyTU7uQVkVwCTgb0swpcqWbAKi8MFW278Y0/h5nrCVg5avHB2I5jYATMxPTJeHwE6zvh+x+smMFuB2/AQhajz+DpCU5OAL3gY/ITphcP5Nrx3KnmJUZGiECoKJDQ4JKEBWKVCiNXwVz47srz/ddoRezbfb5bNwwxqGWUpm3lpPq2Kddm4bvhL1j0+vH9nj9xPJCgNFmbGadYwUJiqJO77iDEA3g1rHN+Wjvj3OS8VjtDq1HnVVM7TtG2qaMEvGOVe6uytCrT58onq3JrVe5YgsHKNLYyfg5EGHkqfDa2Kq6pr0ovfoAOnmYz7Sh3Fe4HcED0c3QfWD4qeTy3/nrifNv4vcl5jKpQ0OEcitzqUTW/hR9gq4oSMVlwB0djOfRhMAph5kdyeiSWAEMSlKdVyLlkCdkONhOwPPxVmNPkNsh8VDrhY2xsr+M+0YOxHcZ0Gp1DPHsJWzBrx0ih9h1T4uzG3YWYvFKwXaojxGL5aPWakhawK19Ao6b/DsvySPLYs5nnSnE8bUrI69iWOVALDSJ5WIJCJ3lCQjMY5P0JFPwfGqCTJEmmJVXyoBs9YI5TSQ/6d+28kJ0WTH1aA5jrHCqVHDMcVu4hSZSQhoBJPf0MgtnDjLmxYdBuwxkbjOBqOsW8DkH6KkkbdpYm1sO7NsMoEhNaWWdLeA5SohsPRkk3QnQJgWdRZiUFsN70cGK0v7755Xonqy1Ab0gBl5eXaU4lhSDResgKYfuDNKoHy5UzXRRaH6L/H6p89GHW3Md3zho7C/Z7wy5SZ+2KzX7u5I3YPmjE9s+KF99Deia+CXVQvbrfUZyscdFukrxRQSSybPmxurLwwI19DVfDq5v7h944L669W+HjkgaRXo5LiR7vHIHZkcpgdg7LGkAS1oYJd8ITE4U9OnmwSosXJowCQd4ih5cWmiboTpC3gdLaHyaMIwmOdLxvoVve9d6Ef4grcV1p4YsJnyNX7b2P9FhjYOFVOwtfC7zSK8MDk6xA3fQIt0C/8q1WMouCseYPJlEsKjyYRJXYQA4mUSBdNjO/7D6bFKcWiK+ugvNs/sw8+iynPazEKEJnwiXVA5fVfwFKmSg/2goAAA== | base64 -d | gunzip)"
# Bash Card — 490456965504--raven-of-whispers   Created: 2025-12-28 09:29:20 UTC - Serial Number: 490456965504--raven-of-whispers - Author: Douglas Habian - ported by shoes - Pipe mode: gzipb64 - Description: > Creature — Data Mystic > > • Real-World Effect — : Analyzes log files to extract unique IP addresses, performs geo-location and WHOIS lookups, and saves detailed reports while verifying internet connectivity. > > • Card Ability — : When the Raven of Whispers enters the battlefield, reveal the top card of your library. > > "Silent watcher of the digital shadows, revealing secrets hidden in the flow of data." Assets: - assets/front.png / assets/back.png - assets/front-thumb.png - assets/back-thumb.png - assets/auto-art.png (generated) - assets/front-data-url.txt / assets/back-data-url.txt - assets/raw.sh (source script you authored) - assets/qr-payload.txt (what the QR encodes) Auto Art (250x250): <img src="assets/auto-art.png" width="250" height="250" alt="Auto art preview" />
| Name | Type | Size |
|---|---|---|
| README.md | file | 1,093 |
| assets | dir |