Network analysis

On the Linux command line

For the purposes of this exercise we’re not employing any nefarious means to gain access to packets. Generally Ethernet switches attempt to intelligently direct packets to only the intended host so an ordinary machine sat on a subnet will only receive its own packets and broadcasts. But unsolicited broadcasts will at least show you some other active IPs on the network. You want to get “in the way” of as much data as possible so if you can run these tests on the router then even better. [Read More]

Cloud computing

Play With Docker Amazon Web Services Digital Ocean Google Cloud Hybrid Cloud Cloud9 versus Google Cloud SSH Google’s is slightly slicker, more tightly integrated with the instance browser. The Google web SSH client is so close to the real thing that you quickly forget what’s going on. Cloud9 IDE is quite nice, Sublime-style editor. But slightly odd ctrl codes remind you that you’re not actually typing into a real terminal. [Read More]

Create a Twitter bot

Using twurl and Google Cloud

Prerequisites: a Twitter account, moderate command line and Google Cloud experience. Time to complete: a couple of hours. Alternatively you might consider GitLab hosting. Developer account Apply for a Twitter dev account, create an app and make a note of the two API keys. Keep them to yourself. Google Cloud hosting Create the smallest (and cheapest) Linux instance on Google Cloud. Installation Connect to your instance and install the essentials. [Read More]


A Linux JUCE application that extracts the peak FTT bin from a live audio recording and reports the closest note

Screenshot is highlighting the major 3rd of an A chord: 440, 550 and 660Hz. Note the FFT bin is not a precise pitch so the closest concert pitch is displayed. See the source on GitHub. Note mapping #include <iostream> #include <map> #include <vector> const std::map<double, std::string> notes{ // Catch all for lower bound search {0.0, "Bx"}, // All the notes we're interested in. At the low end a single Fourier bin // will map to multiple notes. [Read More]

Generate a network topology

From a hosts file

tracehost is a bash script that parses a standard hosts files and generates an SVG. The script accepts a standard system hosts file format but actually it only cares about the first host or IP on a line. In fact any line format may be used as long as each line begins with something that can be pinged. localhost # for local people - google # Zero waste The image below is generated as a daily GitLab cron job. [Read More]

Ghost blog

Install Ghost in a Google Cloud instance

Prerequisites: basic knowledge of the Linux command line, domain names and DNS. Time to complete: one hour. Google Cloud actually offer pre-built Ghost images but unfortunately they deploy a woefully antique revision. So I built my own using Ghost’s GitHub instructions as a reference. Before we proceed it must be remembered that if you’re hosting it yourself you are in control of the backups. You can casually delete entire VMs in as few as three slipshod strikes of the mouse button. [Read More]

Turbo charge your bash prompt

Bash prompt variables The escape characters that can appear in the bash prompt are well-documented so let’s not cover that in any detail. But a good starting point is the “user@host:dir” combo, which conveniently is also the scp syntax. PS1="\u@\h:\w $ " root@kali:/tmp $ Variables described in the bash documentation: PS1 - The primary prompt string. The default value is ‘\s-\v\$ ’. PS0 - The value of this parameter is expanded like PS1 and displayed by interactive shells after reading a command and before the command is executed. [Read More]

Parsing WAV files

In alternative languages

What does a WAV header look like? Inspect the hex with xxd, a WAV header is 42 bytes and is then followed by the sample data. xxd example.wav | head -10 00000000: 5249 4646 2400 0080 5741 5645 666d 7420 RIFF$...WAVEfmt 00000010: 1000 0000 0100 0100 d007 0000 a00f 0000 ................ 00000020: 0100 1000 6461 7461 0000 0080 0000 4582 00000030: e2d0 126c 9e57 c4b4 308c d41f be7f 0a10 . [Read More]