Jens Oliver Meiert

Privacy Experiments: How to Auto-Generate Random Web Traffic

Post from December 15, 2017 (↻ December 31, 2019), filed under .

I believe that privacy, which has never been about “hiding something,” is a fundamental civil right, and as such worth defending and fighting for. I believe that freedom, in one part, rests on privacy. And I also believe that lack of privacy and freedom seriously harms us individually and endangers our communities.

The ever growing amount of surveillance—as I had once theorized, we totally f’ed up if the Snowden revelations had ever been about gauging public reaction—, together with attempts to topple net neutralityno!—are therefore, in my view, direct threats to our individual and collective rights and well-being.

This all holds particularly as there are foreign agencies like the United States and England who infringe on non-American and non-British people’s rights (or have they declared war on us yet so to continue spying on everyone?), and also particularly as it’s all a farce: cooperation, negotiation, regular police work all do work better than adversity, ignorance, and mass surveillance.

Before we go even deeper into the topic, and without actually commenting on my motivation—many people here know how I love experimenting with stuff—I was working on a basic script to randomize machine traffic patterns. Again, as I had done with the “New Tab Traffic Randomizer” Chrome extension.

Now, the result is actually “too random” as to seriously obscure traffic, and it’s set up to also be very easy on the network (one request every five minutes), but—it works, and it can be modified to suit people’s needs.

Important: This is from a test, and it should probably remain a test. Use at your own risk and discretion.

1. Extend .bashrc

If you also work with macOS and if your local setup is anything like mine, then you first need some functions set up for random strings and the generation of protocols and top-level domains.

Add the following to your .bashrc (on other UNIX distributions you may need to modify the cat command):

randomstring() {
  cat /dev/urandom | env LC_CTYPE=C tr -dc 'a-z' | fold -w ${1:-32} | head -n 1

randomprotocol() {
  rand=$[$RANDOM % ${#arr[@]}]
  echo ${arr[$rand]}

randomtld() {
  rand=$[$RANDOM % ${#arr[@]}]
  echo ${arr[$rand]}

I’m not an expert but rather a pragmatist in script matters, so please share suggestions here or through email. Thank you!

2. Test wget

Now, test whether you can use these functions together with wget (make sure that you’ve source’d your .bashrc, and installed wget if necessary):

wget -p -k $(randomprotocol)$(randomstring $(echo $[RANDOM%20+1]))$(randomtld) --tries=3

In this setup we grab a random number that’s at least 1 to generate a hostname; we limit the number of wget tries to three to avoid excessive guessing and traffic.

An a bit more advanced version and test of this may add a few HTTP headers; for example:

wget -p -k $(randomprotocol)$(randomstring $(echo $[RANDOM%20+1]))$(randomtld) --tries=3 --header="User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0" --header="Accept: image/png,image/*;q=0.8,*/*;q=0.5" --header="Accept-Language: en-US,en;q=0.5" --header="Accept-Encoding: gzip, deflate" --header="Referer: http://www.$(randomstring).com/"

3. Set up a Cronjob

To run this on a regular basis, but in a lightweight fashion, create a cronjob (crontab -e):

*/5 * * * * cd ~/.Trash; wget -p -k $(randomprotocol)$(randomstring $(echo $[RANDOM%20+1]))$(randomtld) --tries=3 &> /dev/null

This runs the command every five minutes, from the trash, and sends all output to /dev/null—any more advanced setup can be done in like fashion.


There are a couple of things implied in this how-to, like how to find and edit the different files, how to install, also how to fix any other glitches. I hope it works for you (and please let me know about improvements for the setup described here).

The only trouble-shooting notes I can make, off the top of my head, is that if your commands don’t work, check whether using the full path helps (as with referring to /usr/local/bin/wget). Also, eventually you need to “source” your .bashrc in the cronjob (as with starting it with source /Users/johndoe/.bashrc) in order to make the function calls possible (I’m not sure whether that step is needed in any case; if it is I’ll rewrite things here).

Voilà, then, for a basic setup that fetches a random web page every x minutes. It’s been a test; and as such I document it here. As I said, use this at your own risk and discretion, and please share any thoughts for improvements in the comments or through mail. ✌️

About Me

Jens Oliver Meiert, on April 29, 2020.

I’m Jens Oliver Meiert, and I’m a web developer and author. I love trying things (sometimes involving philosophy, art, or adventure). Here on I share some of my views and experiences.

If you have a question or suggestion about what I write, please leave a comment or a message.

Read More

Have a look at the most popular posts, possibly including:

Cover: The Web Development Glossary.

Perhaps my most comprehensive book: The Web Development Glossary (2020). With explanations and definitions for literally thousands of terms from Web Development and related fields, building on Wikipedia as well as the MDN Web Docs.

Stay up-to-date? Follow me by feed or on Twitter.

Looking for a way to comment? Comments have been disabled, unfortunately.

Found a mistake? Email me,

You are here: HomeArchive2017 → Privacy Experiments: How to Auto-Generate Random Web Traffic

Last update: December 31, 2019

“Work is love made visible.”