2011-03-30 22:28:58 +00:00
|
|
|
|
|
|
|
My local cafe is serviced by a rickety and unreliable wireless network,
|
|
|
|
generously sponsored with ratepayers' money by our city council. After
|
|
|
|
connecting, you are redirected to an SSL-protected page that prompts you for a
|
|
|
|
username and password. Once you've entered your details, you are free to enjoy
|
|
|
|
the intermittent dropouts, treacle-like speeds and incorrectly configured
|
|
|
|
transparent proxy.
|
|
|
|
|
|
|
|
I tend to automate this kind of thing at the first opportunity, on the theory
|
|
|
|
that time spent now will be more than made up in the long run. In this case, I
|
|
|
|
might use [Firebug](http://getfirebug.com/) to ferret out the form post
|
|
|
|
parameters and target URL, then fire up an editor to write a little script
|
|
|
|
using Python's [urllib](http://docs.python.org/library/urllib.html) to simulate
|
|
|
|
a submission. That's a lot of futzing about. With mitmproxy we can do the job
|
|
|
|
in literally 30 seconds, without having to worry about any of the details.
|
|
|
|
Here's how.
|
|
|
|
|
|
|
|
## 1. Run mitmdump to record our HTTP conversation to a file.
|
|
|
|
|
|
|
|
<pre class="terminal">
|
|
|
|
> mitmdump -w wireless-login
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
## 2. Point your browser at the mitmdump instance.
|
|
|
|
|
|
|
|
I use a tiny Firefox addon called [Toggle
|
|
|
|
Proxy](https://addons.mozilla.org/en-us/firefox/addon/toggle-proxy-51740/) to
|
|
|
|
switch quickly to and from mitmproxy. I'm assuming you've already [configured
|
|
|
|
your browser with mitmproxy's SSL certificate
|
|
|
|
authority](http://mitmproxy.org/doc/ssl.html).
|
|
|
|
|
|
|
|
## 3. Log in as usual.
|
|
|
|
|
|
|
|
|
|
|
|
And that's it! You now have a serialized version of the login process in the
|
|
|
|
file wireless-login, and you can replay it at any time like this:
|
|
|
|
|
|
|
|
<pre class="terminal">
|
|
|
|
> mitmdump -c wireless-login
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
## Embellishments
|
|
|
|
|
|
|
|
We're really done at this point, but there are a couple of embellishments we
|
|
|
|
could make if we wanted. I use [wicd](http://wicd.sourceforge.net/) to
|
|
|
|
automatically join wireless networks I frequent, and it lets me specify a
|
|
|
|
command to run after connecting. I used the client replay command above and
|
|
|
|
voila! - totally hands-free wireless network startup.
|
|
|
|
|
|
|
|
We might also want to prune requests that download CSS, JS, images and so
|
|
|
|
forth. These add only a few moments to the time it takes to replay, but they're
|
2012-02-24 04:56:59 +00:00
|
|
|
not really needed and I somehow feel compelled to trim them anyway. So, we fire up
|
2011-03-30 22:28:58 +00:00
|
|
|
the mitmproxy console tool on our serialized conversation, like so:
|
|
|
|
|
|
|
|
<pre class="terminal">
|
2012-02-24 04:56:59 +00:00
|
|
|
> mitmproxy -r wireless-login
|
2011-03-30 22:28:58 +00:00
|
|
|
</pre>
|
|
|
|
|
|
|
|
We can now go through and manually delete (using the __d__ keyboard shortcut)
|
2012-02-24 04:56:59 +00:00
|
|
|
everything we want to trim. When we're done, we use __w__ to save the
|
2011-03-30 22:28:58 +00:00
|
|
|
conversation back to the file.
|