ZyXEL Armor Z2 AC2600 is the best router I've owned

I recently reviewed this router on Amazon and thought I'd post it on here as well. I set out to thoroughly test router and push it to its maximum capabilities. As everyone else, I want a router the "just works" without having to constantly reboot it, click through tons of pages, but still be able to have control over more granular features when needed. Well, the good news is that this router exceeded all my expectations!

The Zyxel router comes packaged with everything you need: cables, adapters, etc. It operates on both the 2.4 Ghz and 5 Ghz ISO spectrum at the latest maximum speeds the 802.11 standard supports.

When you first plug in the route and start configuring it, it comes with the latest high-encryption standards enabled. There is no chance that you could accidentally leave this router misconfigured for any hacker to penetrate. The default supplied password is a long random string of characters that would take all the computers in the world a thousand years to crack…

Tracking migraines and the world of the Internet of Things

I recently read a post by Ted Benson titled, How I Hacked Amazon’s $5 WiFi Button to track Baby Data, where he sniffs for the ARP request of an Amazon Dash Button to log data. The Amazon Elements Dash button cost only $4.99 so I ordered one immediately.

My idea is to use it to track when I have migraines to better pinpoint things that trigger it. Usually when I get a migraine I am not keen on trying to write it down (although I should) so I thought this may be an easy way to do it. Just press a button!

Once I received my button I started adapting Ted's code. The CloudStich service is incredibly easy to use! I signed up for an account, got a personal URL, and was ready to log information to Google spreadsheets!

Getting the Code to Run:
My biggest hurdle was getting requisite Python libraries installed on my Macbook Pro. To intercept network traffic for the Dash button, Python uses the the Scapy library.

from scapy.all import *
Even after installing scapy, when I tried to import it, I…

Temperatures and Prime Numbers

While driving the other day, I wondered what combinations of numbers will be prime in both degrees C and degrees F. I could only find one and so wondered if there are any others. From what I can tell, in the first million degrees C, there is only one set. Here is the code I used to check with. It relies on a handy module named pyprimes to ease in finding prime numbers. Answer at very bottom.

# python 
5 degC, 41 degF 


How To Make Your Browser A Little More Secure

I searched high and low on the internet for a guide to secure my browsing session and disable web servers from preferring insecure SSL sessions. Many websites, such as, in an effort to gain better performance, will prefer slightly more insecure methods for establishing a secure SSL session. Unfortunately, I have not found a way to override that preference with the client (browser) preference instead. However, it's probably a better idea to disable any and all weak encryption algorithms in any ways. Two very useful link to verify both a browser and web server's security stance is given below:

Browser accepted security protocols:

Web Server accepted security protocols:

Step 1: 
Stop using browsers that do not support SSL encryption algorithm configuration. (Sorry Chrome)

Step 2: 
Download Firefox, which does allow one to

Step 3: 
Go To: about:config

Step 4: 
Search: security.ssl3.

Step 5: 
Set all t…

Store Script Passwords Securely in Mac OS X

I frequently use scripts that contain passwords. Since storing these pose somewhat of a security risk, I started researching ways to not store any passwords in my scripts, but rather in my Mac OS X keychain or some other keychain such as Ubuntu's keychain. Since most of my scripts are python based these days, the following two lines of Python code rely on Mac OS X's 'security' command to read and print a password from your keychain:

1: import subprocess as sub 2: password_cmd= ['security','find-generic-password','-s','booger','-g'] 3: password_dcrypt = sub.Popen(password_cmd,stdout=sub.PIPE,stderr=sub.PIPE).communicate()[1].rstrip().split(':')[1].lstrip().lstrip('"').rstrip('"')
This can of course be done in shell scripts just as easily:

1: password_dcrypt=$(security find-generic-password -s booger -g 2>&1|perl -lne 'print $1 if m/password: \"(.+?)\"/g')
Of course, …

Ping utility that targets a specific port

Frequently I reboot servers and while I wait for them to come back up, I ping them to see when they are "back up" However, even after I receie a positive ping response back from the server, it still takes a while before SSH is initialized.

I wrote my own python-based ping utility that allows one to ping a specific port on a remote host. The utility has three modes: (1) One time, (2) Infinite, and (3) Set number of times.

 ./ hostname port #(one time)
./ hostname port -n inf #(indefinitely)
./ hostname port -n num #(num times)

(NB: I'm still in the process of cleaning this up and making it pretty. In the future, I am considering making it mimic the standard GNU ping utility's syntax.)


Checking your final grades at Auburn...automatically!!!

During finals week, I found myself constantly checking the Auburn University site to see if new grades are posted. At the time, I did not know that they actually only post grades at midnight. I ended up using Python, BeautifulSoup, and other tools to log in and grab the final grades site, parse for new classes, and then send a push notification if new ones were found. Prowl is the only good push notification app for iOS that I'm aware of. If you are using Android, there exists numerous ones and you can modify as needed. To get this script running, put it in a python (.py) file, and run it through your favorite scheduler. I use launchd on my Mac and cron on Linux. Happy finals and may the curve be ever in your favor! 1: #!/usr/bin/env python 2: from BeautifulSoup import BeautifulSoup 3: import mechanize, sys, re, time, shelve 4: import prowlpy 5: 6: shelve_file = 'grades.pyshelf' 7: apikey = '123khlkjh1l23kjh12l3kjh13lk12hj3lk12jh31lkj3h213lkjh123…