tadd moar - scripts - random scripts HTML git clone git://parazyd.org/scripts.git DIR Log DIR Files DIR Refs --- DIR commit cddfc813b3536445c4689ee47710b54c1a4f8027 DIR parent 9bb66a8b42e50d5094d14abb3fecd1f37e834cac HTML Author: parazyd <parazyd@dyne.org> Date: Sun, 2 Apr 2017 14:25:05 +0200 add moar Diffstat: M autoup | 8 ++++++++ A blck | 6 ++++++ A define | 5 +++++ M dn | 2 +- A glyph | 6 ++++++ A gw | 6 ++++++ M macspoof.sh | 22 ++++++++-------------- A newifi | 41 +++++++++++++++++++++++++++++++ D obsolete/skrot | 16 ---------------- A parcimonie.sh | 227 +++++++++++++++++++++++++++++++ A portscan.py | 81 ++++++++++++++++++++++++++++++ A ptpb | 5 +++++ M record | 2 +- A rot47 | 2 ++ A skrot | 10 ++++++++++ M update-gits | 2 +- A wifi | 34 +++++++++++++++++++++++++++++++ A yell | 3 +++ 18 files changed, 445 insertions(+), 33 deletions(-) --- DIR diff --git a/autoup b/autoup t@@ -12,6 +12,14 @@ test "$1" = -n && { } test -z "$1" && exit 1 || filename=$(basename $1) + +case "$filename" in + *_scrot.png) + webdir=tmp/screenshots + filename="screenshot$(( $(basename $(lynx -dump https://pub.parazyd.cf/tmp/screenshots | tail -n1 | tr -d '[a-z]./:' | awk '{print $2}')) + 1 )).png" + ;; +esac + scp -i "$sshkey" "$1" "${sshuser}@${server}:${webroot}/${webdir}/${filename}" || exit 1 echo "https://$server/$webdir/$filename" | xclip -i echo "https://$server/$webdir/$filename" DIR diff --git a/blck b/blck t@@ -0,0 +1,6 @@ +#!/bin/sh +## shorten a url with blck.cf + +url="$1" + +curl -F "url=$url" https://blck.cf/ DIR diff --git a/define b/define t@@ -0,0 +1,5 @@ +#!/bin/dash + +[ -n "$TORIFY" ] && proxy="--proxy socks5://127.0.0.1:9050" + +curl -s ${proxy} dict://dict.org/d:${1} | grep -E -v '^[0-9]|\[*\]' | less DIR diff --git a/dn b/dn t@@ -27,7 +27,7 @@ use() { case "$1" in o) use "out" "127.0.0.1";; - h) use "fq" "10.0.2.1";; + h) use "fq" "10.66.66.1";; b) use "bridge" "10.11.11.1";; g) use "goog" "8.8.8.8";; dv) use "dvn" "10.8.0.1";; DIR diff --git a/glyph b/glyph t@@ -0,0 +1,6 @@ +#!/bin/dash + +glyphs="$HOME/glyphs" + +cat "$glyphs" | dmenu -l 20 | cut -d' ' -f1 | tr -d '\n' | xclip -i +xdotool key shift+Insert DIR diff --git a/gw b/gw t@@ -0,0 +1,6 @@ +#!/bin/dash + +#This prints random words from the linux dictionary. + +echo "$(shuf -n 32 /usr/share/dict/words --random-source=/dev/urandom | tr '\n' ' ')" + DIR diff --git a/macspoof.sh b/macspoof.sh t@@ -1,24 +1,18 @@ #!/bin/sh # -# parazyd - (c) wtfpl 2016 +# parazyd - (c) wtfpl 2017 # spoof or restore mac case "$1" in - random|rand|r) - echo "(*) randomizing $2's MAC" - ip link set dev $2 down - macchanger -r $2 - ip link set dev $2 up - echo "(*) done!" + -p) + sup net "$2" stop + sudo macchanger -A "$2" ;; - permanent|orig) - echo "(*) restoring $2's MAC" - ip link set dev $2 down - macchanger -p $2 - ip link set dev $2 up - echo "(*) done!" + -r) + sup net "$2" stop + sudo macchanger -p "$2" ;; *) - echo `basename $0` '{random|orig} {device}' + printf "usage: %s {-p [orig]|-r [random]} netdev\n" "$(basename $0)" ;; esac DIR diff --git a/newifi b/newifi t@@ -0,0 +1,41 @@ +#!/bin/sh + +usage() { + printf "usage: %s [essid] [bssid] [psk]\n" "$(basename $0)" + exit 1 +} + +wpasup=/etc/wpa_supplicant/wpa_supplicant.conf + +essid="$1" +bssid="$2" +psk="$3" + +[ -n "$essid" ] || usage +[ -n "$bssid" ] || usage + +printf "[essid]: %s\n[bssid]: %s\n[psk]: %s\n" \ + "$essid" "$bssid" "$psk" + +if [ -n "$psk" ]; then + cat <<EOF | sudo tee -a $wpasup + +network={ + ssid="${essid}" + disabled=0 + bssid=${bssid} + psk="${psk}" +} +EOF +else + cat <<EOF | sudo tee -a $wpasup + +network={ + ssid="${essid}" + disabled=0 + bssid=${bssid} + auth_alg=OPEN + key_mgmt=NONE +} +EOF +fi DIR diff --git a/obsolete/skrot b/obsolete/skrot t@@ -1,16 +0,0 @@ -#!/bin/sh - -shotdir="$HOME/screenshots" - -case "x$1" in - x-s) - import "$shotdir/last.png" && \ - ;; - x) - import -window root "$shotdir/$(date +%Y-%m-%d-%H-%M-%S)-1366x768.png" - ;; - *) - >&2 printf "skrot: internal error\n" - exit 1 - ;; -esac DIR diff --git a/parcimonie.sh b/parcimonie.sh t@@ -0,0 +1,227 @@ +#!/usr/bin/env bash + +# Copyright © 2015 Etienne Perot <etienne at perot dot me> +# This work is free. You can redistribute it and/or modify it under the +# terms of the Do What The Fuck You Want To Public License, Version 2, +# as published by Sam Hocevar. See http://www.wtfpl.net/ for more details. + +if [ -n "$PARCIMONIE_CONF" ]; then + source "$PARCIMONIE_CONF" || exit 'Bad configuration file.' + export PARCIMONIE_CONF='' # Children spawned by this script (if any) should not inherit those values +fi + +parcimonieUser="${PARCIMONIE_USER:-$(whoami)}" +gnupgBinary="${GNUPG_BINARY:-}" +torsocksBinary="${TORSOCKS_BINARY:-torsocks}" +gnupgHomedir="${GNUPG_HOMEDIR:-}" +gnupgKeyserver="${GNUPG_KEYSERVER:-}" +gnupgKeyserverOptions="${GNUPG_KEYSERVER_OPTIONS:-http-proxy=}" +torAddress="${TOR_ADDRESS:-127.0.0.1}" +torPort="${TOR_PORT:-9050}" +minWaitTime="${MIN_WAIT_TIME:-900}" # 15 minutes +targetRefreshTime="${TARGET_REFRESH_TIME:-604800}" # 1 week +computerOnlineFraction="${COMPUTER_ONLINE_FRACTION:-1.0}" # 100% of the time +useRandom="${USE_RANDOM:-false}" +dirmngrPath="${DIRMNGR_PATH-}" +dirmngrClientPath="${DIRMNGR_CLIENT_PATH-}" + +# ----------------------------------------------------------------------------- + +if [ "$(whoami)" != "$parcimonieUser" ]; then + if [ "$parcimonieUser" == '*' ]; then # If user requested the script to run for all users + if [ "$(id -u)" != 0 ]; then + echo 'Error: Must be run as root in order to support PARCIMONIE_USER="*".' + exit 1 + fi + gnupgUsers=() + for user in $(cut -d ':' -f 1 < /etc/passwd); do + if [ -d "$(eval "echo ~$user")/.gnupg" ]; then + gnupgUsers+=("$user") + fi + done + # If we have 0 users, error out + if [ "${#gnupgUsers[@]}" -eq 0 ]; then + echo 'Error: No users found with a ~/.gnupg directory.' + exit 1 + fi + # If we just have one user, just su to it + if [ "${#gnupgUsers[@]}" -eq 1 ]; then + export PARCIMONIE_USER="${gnupgUsers[0]}" + export GNUPG_HOMEDIR="$(eval "echo ~"${gnupgUsers[0]}"")/.gnupg" + exec su -c "$0" "${gnupgUsers[0]}" + fi + # If we have more than one, spawn children processes for each + childrenPids=() + for user in "${gnupgUsers[@]}"; do + PARCIMONIE_USER="$user" GNUPG_HOMEDIR="$(eval "echo ~$user")/.gnupg" su -c "$0" "$user" & + childrenPids+=("$!") + done + for childPid in "${childrenPids[@]}"; do + wait "$childPid" + done + exit 0 + else # If the user requested the script to run for a specific user which is not the current one + exec su -c "$0" "$parcimonieUser" + fi +fi + +# If we get here, we know that we are the right user. + +# Find the gpg binary. +if [ -n "$gnupgBinary" ]; then + if [ ! -x "$gnupgBinary" ]; then + echo "Error: GNUPG_BINARY '$GNUPG_BINARY' does not exist or is not executable." + exit 1 + fi +elif which gpg2 &> /dev/null; then + # Try to find it in $PATH. + gnupgBinary="$(which gpg2)" + echo "Detected gpg2 at '$gnupgBinary'." +elif which gpg &> /dev/null; then + gnupgBinary="$(which gpg)" + echo "Detected gpg at '$gnupgBinary'." +else + echo 'gpg not found. Please make sure you have installed GnuPG.' + echo 'You may manually specify the full path to gpg with GNUPG_BINARY.' + exit 1 +fi + +# Test for dirmngr, used in GnuPG >= 2.1 for keyserver communication. +if [ -n "$dirmngrPath" ]; then + if [ ! -x "$dirmngrPath" ]; then + echo "Error: DIRMNGR_PATH '$DIRMNGR_PATH' does not exist or is not executable." + exit 1 + fi +elif which dirmngr &> /dev/null; then + # Try to find dirmngr in $PATH. + dirmngrPath="$(which dirmngr)" + echo "Detected dirmngr at '$dirmngrPath'; assuming GnuPG >= 2.1." +else + echo 'dirmngr not specified, and not found in $PATH. Assuming GnuPG < 2.1.' +fi + +if [ -n "$dirmngrPath" ]; then + # If we are using dirmngr, we must also have dirmngr-client. + if [ -n "$dirmngrClientPath" ]; then + if [ ! -x "$dirmngrClientPath" ]; then + echo "Error: DIRMNGR_CLIENT_PATH '$DIRMNGR_CLIENT_PATH' does not exist or is not executable." + exit 1 + fi + elif which dirmngr-client &> /dev/null; then + # Try to find it in $PATH. Unlike dirmngr, it is a fatal error if we cannot find it, + # because we need it to handle dirmngr properly. + dirmngrClientPath="$(which dirmngr-client)" + echo "Detected dirmngr-client at '$dirmngrClientPath'." + else + echo "dirmngr-client not found, while dirmngr was found at '$dirmngrPath'." + echo 'Please make sure your installation of GnuPG is complete.' + echo 'You may manually specify the full path to dirmngr-client with DIRMNGR_CLIENT_PATH.' + exit 1 + fi +fi + +gnupgExec=("$gnupgBinary" --batch --with-colons) +if [ -n "$gnupgHomedir" ]; then + gnupgExec+=(--homedir "$gnupgHomedir") +fi +if [ -n "$gnupgKeyserver" ]; then + gnupgExec+=(--keyserver "$gnupgKeyserver") +fi +if [ -n "$gnupgKeyserverOptions" ]; then + gnupgExec+=(--keyserver-options "$gnupgKeyserverOptions") +fi + +# Test for GNU `sed`, or use a `sed` fallback in sedExtRegexp +sedExec=(sed) +if [ "$(echo 'abc' | sed -r 's/abc/def/' 2> /dev/null || true)" == 'def' ]; then + # GNU Linux sed + sedExec+=(-r) +else + # Mac OS X sed + sedExec+=(-E) +fi + +sedExtRegexp() { + "${sedExec[@]}" "$@" +} + +keepDigitsOnly() { + sedExtRegexp -e 's/[^[:digit:]]//g' -e '/^$/d' +} + +getRandom() { + if [ -z "$useRandom" -o "$useRandom" == 'false' ]; then + od -vAn -N4 -tu4 < /dev/urandom | keepDigitsOnly + else + od -vAn -N4 -tu4 < /dev/random | keepDigitsOnly + fi +} + +nontor_gnupg() { + "${gnupgExec[@]}" "$@" + return "$?" +} + +tor_gnupg() { + "$torsocksBinary" --isolate "${gnupgExec[@]}" "$@" +} + +getPublicKeys() { + nontor_gnupg --list-public-keys --with-colons --fixed-list-mode --with-fingerprint --with-fingerprint --with-key-data | + grep -a -A 1 '^pub:' | # only allow fingerprints of public keys (not subkeys) + grep -E '^fpr:+[0-9a-fA-F]{40,}:' | # only allow fingerprints of v4 pgp keys + # (v3 fingerprints consist of 32 hex characters) + sedExtRegexp 's/^fpr:+([0-9a-fA-F]+):+$/\1/' # extract the fingerprint +} + +getNumKeys() { + getPublicKeys | wc -l | keepDigitsOnly +} + +getRandomKey() { + local allPublicKeys fingerprint + allPublicKeys=() + for fingerprint in $(getPublicKeys); do + allPublicKeys+=("$fingerprint") + done + echo "${allPublicKeys[$(expr "$(getRandom)" % "${#allPublicKeys[@]}")]}" +} + +getTimeToWait() { + # The target refresh time is scaled by the fraction of time that the computer is expected to be online. + # expr or bash's $(()) don't support fractional math. Use awk. + local scaledRefreshTime + scaledRefreshTime="$targetRefreshTime" + if [ "$computerOnlineFraction" != '1.0' -a "$computerOnlineFraction" != '1' ]; then + scaledRefreshTime="$(echo "$scaledRefreshTime" "$computerOnlineFraction" | awk 'BEGIN {print sprintf("%.0f", $1 * $2)}')" + fi + # minimum wait time + rand(2 * (refresh time / number of pubkeys)) + # = $minWaitTime + $(getRandom) % (2 * $scaledRefreshTime / $(getNumKeys)) + # But if we have a lot of keys or a very short refresh time (2 * refresh time < number of keys), + # then we can encounter a modulo by zero. In this case, we use the following as fallback: + # minimum wait time + rand(minimum wait time) + # = $minWaitTime + $(getRandom) % $minWaitTime + if [ "$(expr '2' '*' "$scaledRefreshTime")" -le "$(getNumKeys)" ]; then + expr "$minWaitTime" '+' "$(getRandom)" '%' "$minWaitTime" + else + expr "$minWaitTime" '+' "$(getRandom)" '%' '(' '2' '*' "$scaledRefreshTime" '/' "$(getNumKeys)" ')' + fi +} + +if [ "$(getNumKeys)" -eq 0 ]; then + echo 'No GnuPG keys found.' + exit 1 +fi + +if [ "$(echo "$computerOnlineFraction" | awk '{ print ($1 < 0.1 || $1 > 1.0) ? "bad" : "good" }')" == 'bad' ]; then + echo 'COMPUTER_ONLINE_FRACTION must be between 0.1 and 1.0.' >&2 + exit 1 +fi + +while true; do + keyToRefresh="$(getRandomKey)" + timeToSleep="$(getTimeToWait)" + echo "> Sleeping $timeToSleep seconds before refreshing key $keyToRefresh..." + sleep "$timeToSleep" + tor_gnupg --recv-keys "$keyToRefresh" +done DIR diff --git a/portscan.py b/portscan.py t@@ -0,0 +1,81 @@ +#!/usr/bin/env python + +import socket +import sys +import threading +import time + +class counter(): + def __init__(self): + self.lock = threading.Lock() + self.port = 0 + + def nextport(self): + self.lock.acquire() + if self.port >= 0: + self.port += 1 + if self.port >= 65536: + self.port = -1 + port = self.port + self.lock.release() + return port + +class scanner(threading.Thread): + tlist = [] + pc = counter() + + def __init__(self): + threading.Thread.__init__(self) + self.port = scanner.pc.nextport() + + def run(self): + while (self.port > 0): + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.setblocking(0) + try: + print("(*) opening conn to %s:%s\r" % (host, self.port)) + s.connect((host, self.port)) + except socket.error, e: + if e[0] != 155: + raise + + try: + time.sleep(timo) + s.send("") + s.shutdown(socket.SHUT_RDWR) + print("- port %s is open" % (self.port)) + except socket.error: + #print("- port %s is probably closed" % (self.port)) + pass + finally: + s.close() + self.port = scanner.pc.nextport() + + def main(): + global host, timo + + if len(sys.argv) < 2: + print("usage: portscan.py [host] [maxthreads] [timeout]") + print("scans a host's TCP ports with conn attempts with a given") + print("response timeout (default 1s).") + sys.exit(1) + + host = sys.argv[1] + maxt = int(sys.argv[2]) if len(sys.argv) > 2 else 666 + timo = int(sys.argv[3]) if len(sys.argv) > 3 else 1 + start = time.time() + + print("(*) port scanning %s, %s ports at a time, timeout %s seconds" % (host, maxt, timo)) + + for i in range(0, maxt): + sc = scanner() + scanner.tlist.append(sc) + sc.start() + for sc in scanner.tlist: + sc.join() + + print("(*) scan completed in %s seconds!" % (time.time() - start)) + + if __name__=="__main__": + main() + DIR diff --git a/ptpb b/ptpb t@@ -0,0 +1,5 @@ +#!/bin/sh + +[ -n "$TORIFY" ] && proxy="--proxy socks5://127.0.0.1:9050" + +curl -F c=@- https://ptpb.pw/?u=1 DIR diff --git a/record b/record t@@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # parazyd - (c) wtfpl 2016 # screencast time DIR diff --git a/rot47 b/rot47 t@@ -0,0 +1,2 @@ +#!/bin/sh +tr '\!-~' 'P-~\!-O' DIR diff --git a/skrot b/skrot t@@ -0,0 +1,10 @@ +#!/bin/sh + +case "$1" in + -s) + exec scrot -s '%Y-%m-%d_%H-%M-%S_$wx$h_scrot.png' -e 'mv -f $f /home/parazyd/screenshots/' + ;; + *) + exec scrot '%Y-%m-%d_%H-%M-%S_$wx$h_scrot.png' -e 'mv -f $f /home/parazyd/screenshots/' + ;; +esac DIR diff --git a/update-gits b/update-gits t@@ -1,6 +1,6 @@ #!/bin/sh -[ -n "$TORIFY" ] && tor=torsocks +#[ -n "$TORIFY" ] && tor=torsocks for i in $(printf %s\\n */); do test -d "$i/.git" && { DIR diff --git a/wifi b/wifi t@@ -0,0 +1,34 @@ +#!/bin/sh + +dev=wlan0 +wpasup=/etc/wpa_supplicant/wpa_supplicant.conf + +usage() { + printf "usage: %s new|enable|disable|restart}\n" "$(basename $0)" + exit 1 +} + +ask() { + printf "(*) choose one of these:\n" + grep 'ssid="' $wpasup | sed 's/ssid=//' + printf "[essid]: " ; read net + [ -n "$net" ] || exit 1 + grep -q "$net" $wpasup || exit 1 +} + +en() { + [ -n "$net" ] || ask + sudo perl -i -0pe 's/disabled=0/disabled=1/g;s/(ssid="'$net'"\n.*)disabled=1/\1disabled=0/' $wpasup +} + +dis() { + sudo perl -i -0pe 's/disabled=0/disabled=1/g;' $wpasup +} + +case "$1" in + en|ena|enab*) net="$2" en;; + di|dis|disa*) net="$2" dis;; + d|down) sup net $dev stop;; + r|restart) sup net $dev restart;; + *) usage;; +esac DIR diff --git a/yell b/yell t@@ -0,0 +1,3 @@ +#!/bin/sh + +printf "%s" "$*" | sent