Practical Python projects are the best python projects right? I came up with a simple script that makes a common work task much faster and easier.
In the course of my daily activities as a VoIP technician I am frequently visiting different customer sites each with a server that has a unique static IP address. In order to access these sites from the network I need to make sure I find a switch port with the correct vlan and assign my laptops Ethernet port to a static IP in the same range as the server.
With over 300 sites 30-40 of which have IP based pbx systems it’s not practical to remember all these IP addresses. I wanted a simple way to type a short command into a command prompt and have my devices static IP changed easily. Much like the way DNS allows us to type in a domain name to access a web site without having to actually know the server’s IP address.
I began by doing some research on how I could modify my static IP in Python by importing the subprocess library I was able to achieve this. I then set about writing a function that takes user input, strips the capitalization and assigns an IP address based on the user input. I did this with a series of conditional elif statements. I’ll include a link to a redacted version of the script on GitHub for anyone interested in reading the code. But the pseudo code goes something like:
If user_input = “site1”:
Set static IP x.x.x.1 subnet x.x.x.x gateway x.x.x.1
Elif user_input = “site2”:
Set static IP x.x.x.2 subnet x.x.x.x gateway x.x.x.1
Etc etc….
While functional, this code is not considered very “pythonic” as it has a lot of unnecessary “hard coded” if statements that can be abstracted away with a for loop and a dictionary. This will bring the overall lines of code way down and increase the speed and efficiency the script executes. While the gains in speed are basically imperceptible with a data set this size it is still always a good idea to follow best practices. So I decided to make a version 2 of this script that takes user input and loops over a dictionary.
Leave a Reply