Python: 3.x Credits: cmiN Date: 23.01.2011 Python code by cmiN - 93 lines - codepad #! /usr/bin/env python3.2 # Ip Tracer # 23.01.2011 cmiN import sys, urllib.request class IPScan: def __init__(self, iplist, timeout): self.ipdetailslist = list() self.link = "http://whatismyipaddress.com/ip/" self.iplist = iplist self.timeout = timeout self.headers = {"User-Agent": "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.04 (hardy) Firefox/3.0.6"} def parse(self, source): if source.find(b"Invalid IP address.") != -1: return ["invalid", "invalid", "invalid", "invalid"] index = source.find(b"ISP:</th><td>") + len(b"ISP:</th><td>") source = source[index:] isp = source[:source.find(b"</td>")] index = source.find(b"Country:</th><td>") + len(b"Country:</th><td>") source = source[index:] country = source[:source.find(b"</td>")] index = source.find(b"State/Region:</th><td>") + len(b"State/Region:</th><td>") source = source[index:] state = source[:source.find(b"</td>")] index = source.find(b"City:</th><td>") + len(b"City:</th><td>") source = source[index:] city = source[:source.find(b"</td>")] if country.find(b" <img") != -1: country = country[:country.find(b" <img")] datain = [country, state, city, isp] dataout = list() for word in datain: if word == b"": dataout.append("None") else: string = str() for char in word: string += chr(char) dataout.append(string) return dataout def scan(self): for ip in self.iplist: print(ip + "...") urlrequest = urllib.request.Request(self.link + ip, headers=self.headers) urlobj = urllib.request.urlopen(urlrequest, timeout=self.timeout) self.ipdetailslist.append([ip] + self.parse(urlobj.read())) urlobj.close() print() def process(inp, outp, verbose, timeout): iplist = list() if inp.count(".") == 3: iplist.append(inp) else: fobj = open(inp, "rt") iplist.extend(fobj.read().split()) fobj.close() if outp == "stdout": fobj = sys.stdout flag = False else: fobj = open(outp, "wt") flag = True rangelist = [0] for char in verbose: rangelist.append(int(char)) scanobj = IPScan(iplist, float(timeout)) scanobj.scan() for ipdetails in scanobj.ipdetailslist: string = " ".join([ipdetails[i] for i in rangelist]) print(string, file=fobj) if flag: fobj.close() def main(args): usage = "iptr.py input output verbose timeout\n\ input - stdin or a file (91.202.90.81 or ips.txt)\n\ output - stdout or a file (stdout or loc.txt)\n\ verbose - country, state, city, ISP (1, 2, 3, 4)\n\ timeout - float\n\ Example: iptr.py ips.txt stdout 342 5\n" if len(args) != 5: print(usage) return 1 else: process(args[1], args[2], args[3], args[4]) return 0 if __name__ == "__main__": main(sys.argv) 1. start, run, cmd 2. cd in locatia unde aveti sursa in Python 3. iptr.py 4. cititi usage 5. enjoy