92 lines
2.3 KiB
Python
92 lines
2.3 KiB
Python
#!/usr/bin/python3
|
|
# Benjamyn Love
|
|
# 2018/2019
|
|
# bip (Bulk IP lookup)
|
|
|
|
import dns.resolver
|
|
import ipwhois
|
|
from dns import reversename
|
|
from ipwhois.net import Net
|
|
from ipwhois.asn import IPASN
|
|
import warnings
|
|
|
|
ipList = []
|
|
|
|
def loadBlacklist():
|
|
with open('blacklist.txt') as handle:
|
|
blacklist = handle.readlines()
|
|
for i in range(len(blacklist)):
|
|
blacklist[i] = blacklist[i].strip()
|
|
return blacklist
|
|
|
|
def lookupIP(inData):
|
|
try:
|
|
with warnings.catch_warnings():
|
|
warnings.filterwarnings("ignore", category=UserWarning)
|
|
ipnet = Net(inData)
|
|
ipobj = IPASN(ipnet)
|
|
results = ipobj.lookup()
|
|
# print(results)
|
|
return results
|
|
|
|
except ipwhois.exceptions.IPDefinedError:
|
|
pass # We do not care about local/invalid IPs
|
|
except Exception as e:
|
|
pass # Garbage data was given lol
|
|
|
|
|
|
def parseIPS():
|
|
global countIncluded
|
|
with open("ips.txt", 'r') as f:
|
|
ipData = f.read()
|
|
|
|
data = ipData.split('\n')
|
|
for ip in data:
|
|
ip = ip.strip()
|
|
ipAddr = ip.split()
|
|
if len(ipAddr) == 2:
|
|
countIncluded = True
|
|
ipList.append(ipAddr)
|
|
else:
|
|
if len(ipAddr) == 0:
|
|
pass
|
|
else:
|
|
countIncluded = False
|
|
ipList.append(ipAddr)
|
|
|
|
|
|
blacklist = loadBlacklist()
|
|
parseIPS()
|
|
|
|
for ips in ipList:
|
|
# ccode = ipCheck(lookupIP(ips[1]))
|
|
if countIncluded == True:
|
|
ret = lookupIP(ips[1])
|
|
reverseName = reversename.from_address(ips[1])
|
|
else:
|
|
ret = lookupIP(ips[0])
|
|
reverseName = reversename.from_address(ips[0])
|
|
|
|
if ret == None:
|
|
continue
|
|
|
|
cc = ret["asn_country_code"]
|
|
desc = ret["asn_description"]
|
|
if cc in blacklist:
|
|
continue
|
|
|
|
try:
|
|
ptr = str(dns.resolver.query(reverseName, "PTR")[0])
|
|
except dns.resolver.NoAnswer as E:
|
|
ptr = reverseName
|
|
except dns.resolver.NoNameservers as E:
|
|
ptr = reverseName
|
|
except dns.resolver.NXDOMAIN as E:
|
|
ptr = reverseName
|
|
|
|
if countIncluded == True:
|
|
print("IP: {}\t\tCountry: {}\tDesc: {}\tPTR: {}\tCount: {}".format(ips[1], cc, desc, ptr, ips[0]))
|
|
else:
|
|
print("IP: {}\t\tCountry: {}\tDesc: {}\tPTR: {}".format(ips[0], cc, desc, ptr))
|
|
|