--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app.py Thu Jun 22 12:14:31 2023 +0100 @@ -0,0 +1,53 @@ +from ipwhois import IPWhois + +from flask import Flask +app = Flask(__name__) + +@app.route('/ip/<ip_str>') +def ip(ip_str): + whois = IPWhois(ip_str).lookup_rdap(depth=1,get_asn_description=False) + + contacts = [] + existing_contacts = set() + + for name in whois["objects"]: + org = whois["objects"][name] + email_contacts = org["contact"]["email"] + if email_contacts: + candidate_contacts = [] + found_abuse_contact = False + for contact in email_contacts: + if contact["value"] in existing_contacts: + continue + elif contact["type"] == "abuse" or ("abuse" in contact["value"]): + found_abuse_contact = True + existing_contacts.add(contact["value"]) + contacts.append({ + "name": org["contact"]["name"], + "email": contact["value"] + }) + elif org["roles"] is not None and ("abuse" in org["roles"]): + candidate_contacts.append({ + "name": org["contact"]["name"], + "email": contact["value"] + }) + if not found_abuse_contact: + contacts.extend(candidate_contacts) + + return { + "asn": whois["asn"], + "asn_info": { + "cidr": whois["asn_cidr"], + "country_code": whois["asn_country_code"], + }, + "abuse_contacts": contacts, + } + + +@app.route('/ip-raw/<ip_str>') +def ip_raw(ip_str): + whois = IPWhois(ip_str).lookup_rdap(depth=1,get_asn_description=False) + return whois + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=8008)