Amazon EC2 IP Detector for Python
The other day I need to be able to detect if an IP address was an Amazon EC2 IP address for a project I was working on. I couldn’t find any code but I did find this: https://forums.aws.amazon.com/ann.jspa?annID=1701 Which is a list of all the ip ranges for Amazon EC2 servers. So first a wrote a parser to parse all these ip ranges. Then I wrote this function in order to detect if a specific ip is in one of those ranges:
def amazon_ip(incoming_ip): pieces = incoming_ip.split('.') ip2int = '' for num in pieces: ip2int = ip2int + num.zfill(3) ip2int = int(ip2int) ranges = [['107020000000','107023255255'], ['174129000000','174129255255'], ['184072128000','184072255255'], ['184072064000','184072127255'], ['184073000000','184073255255'], ['204236192000','204236255255'], ['216182224000','216182239255'], ['023020000000','023023255255'], ['050016000000','050017255255'], ['050019000000','050019255255'], ['054144000000','054147255255'], ['054156000000','054159255255'], ['054160000000','054167255255'], ['054172000000','054173255255'], ['054174000000','054175255255'], ['054196000000','054197255255'], ['054198000000','054198255255'], ['054204000000','054205255255'], ['054208000000','054209255255'], ['054210000000','054211255255'], ['054221000000','054221255255'], ['054224000000','054225255255'], ['054226000000','054227255255'], ['054234000000','054235255255'], ['054236000000','054237255255'], ['054242000000','054243255255'], ['054080000000','054087255255'], ['054088000000','054091255255'], ['054092128000','054092255255'], ['067202000000','067202063255'], ['072044032000','072044063255'], ['075101128000','075101255255'], ['050112000000','050112255255'], ['054245000000','054245255255'], ['054244000000','054244255255'], ['054214000000','054214255255'], ['054212000000','054213255255'], ['054218000000','054218255255'], ['054200000000','054201255255'], ['054202000000','054203255255'], ['054184000000','054191255255'], ['054068000000','054071255255'], ['054148000000','054149255255'], ['204236128000','204236191255'], ['184072000000','184072063255'], ['050018000000','050018255255'], ['184169128000','184169255255'], ['054241000000','054241255255'], ['054215000000','054215255255'], ['054219000000','054219255255'], ['054193000000','054193255255'], ['054176000000','054177255255'], ['054183000000','054183255255'], ['054067000000','054067255255'], ['079125000000','079125127255'], ['046051128000','046051191255'], ['046051192000','046051207255'], ['046137000000','046137127255'], ['046137128000','046137191255'], ['176034128000','176034255255'], ['176034064000','176034127255'], ['054247000000','054247255255'], ['054246000000','054246255255'], ['054228000000','054228255255'], ['054216000000','054217255255'], ['054229000000','054229255255'], ['054220000000','054220255255'], ['054194000000','054195255255'], ['054072000000','054075255255'], ['054076000000','054077255255'], ['054078000000','054078255255'], ['054074000000','054075255255'], ['185048120000','185048123255'], ['054170000000','054171255255'], ['054154000000','054155255255'], ['175041128000','175041191255'], ['122248192000','122248255255'], ['046137192000','046137255255'], ['046051216000','046051223255'], ['054251000000','054251255255'], ['054254000000','054254255255'], ['054255000000','054255255255'], ['054179000000','054179255255'], ['054169000000','054169255255'], ['054151128000','054151255255'], ['054252000000','054252255255'], ['054253000000','054253255255'], ['054206000000','054206255255'], ['054079000000','054079255255'], ['054066000000','054066255255'], ['175041192000','175041255255'], ['046051224000','046051255255'], ['176032064000','176032095255'], ['103004008000','103004015255'], ['176034000000','176034063255'], ['054248000000','054249255255'], ['054250000000','054250255255'], ['054238000000','054238255255'], ['054199000000','054199255255'], ['054178000000','054178255255'], ['054095000000','054095255255'], ['054092000000','054092127255'], ['054168000000','054168255255'], ['054064000000','054065255255'], ['054150000000','054150255255'], ['177071128000','177071255255'], ['054232000000','054232255255'], ['054233000000','054233063255'], ['054207000000','054207255255'], ['054094000000','054094255255'], ['054223000000','054223255255'], ['054093000000','054093255255'], ['096127000000','096127063255'], ['096127064000','096127127255']] is_amazon = False for range in ranges: rangeMin = int(range[0]) rangeMax = int(range[1]) if(ip2int >= rangeMin and ip2int <= rangeMax): #print 'Found in this range' #print range is_amazon = True return is_amazon
Hopefully someone else can find this useful.