This commit is contained in:
Albert S. 2017-04-15 16:24:28 +02:00
commit c257c13816
3 changed files with 75 additions and 0 deletions

34
README Normal file
View File

@ -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]

5
TODO Normal file
View File

@ -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?

36
randrss Executable file
View File

@ -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