commit c257c138161f0d32f43408a1972a8edc6eb668c1 Author: Albert S Date: Sat Apr 15 16:24:28 2017 +0200 init diff --git a/README b/README new file mode 100644 index 0000000..f757a53 --- /dev/null +++ b/README @@ -0,0 +1,34 @@ +What is randrss? +================ +Normal RSS readers usually fetch all feeds more or less at the same time +at constant intervals. This leaves a signature for anyone who observes +internet traffic. By looking for this pattern, you are more easily +identified. + +randrss fetches all your feeds at random intervals at an random order +over a certain period of time. The feeds will be downloaded and all +you need is a local webserver. The added benefits of this approach are +that you don't have to worry about how your client deals with cookies +etc. + +Also, by having only one client fetching the feeds and your readers +pointed to the randrss's downloaded feeds, you avoid certain trackers +that may identify you across devices (google's feed proxy, cloudflare), +because it's very likely that the combination of feeds you read are +unique. + +randrss fetches the feed using Tor. + +Usage +===== +First, tweak the shellscript a bit, if you like +The input file has the following format per line: +url:output file:(optional paramater for the sleep time, in format x-y) + +An optional user agent file contains the user agents we will randomly +use per feed. One user agent per line. + +randrss [input file] [user agent file] + + + diff --git a/TODO b/TODO new file mode 100644 index 0000000..d60d85b --- /dev/null +++ b/TODO @@ -0,0 +1,5 @@ +-cert pinning option +-Causing more harm than good because do not match exactly the headers +sent by the user agents we use. +-how random is "shuf" and is it a problem? +-update random default on every loop? diff --git a/randrss b/randrss new file mode 100755 index 0000000..da39bf8 --- /dev/null +++ b/randrss @@ -0,0 +1,36 @@ +#!/bin/bash +set -x +set -e +random_default=$( shuf -n 1 -i7200-7523) +DEFAULT_PER_ITEM="1-$random_default" + +echo "Current default sleep seconds range: $DEFAULT_PER_ITEM" +if [ $# -lt 1 ] ; then +echo "Usage: $0 [input feeds]" +exit +fi +inputfile="$1" +useragentsfile="$2" +if [ ! -f "$inputfile" ] ; then +echo "inputfile does not exist or is not readable" +fi +while true ; do + shuf "$inputfile" | while read line ; do + url=$( echo "$line" | cut -d":" -f1,2 ) + output=$( echo "$line" | cut -d":" -f3) + range=$( echo "$line" | cut -d":" -f4) + sleepfor=0 + if [ -n "$range" ] ; then + sleepfor=$( shuf -i "$range" -n 1) + else + sleepfor=$( shuf -i "$DEFAULT_PER_ITEM" -n 1) + fi + useragent="" + if [ -n "$useragentsfile" ] ; then + useragent=$( shuffle -n 1 "$useragentsfile" ) + fi + echo "Sleeping for $sleepfor seconds for $url" + sleep "$sleepfor" + torsocks wget "$url" -U "$useragent" -O "$output" + done +done