· 5 years ago · Aug 19, 2020, 06:36 AM
1# getinfo.py
2# my first shodan script
3# @darkmage evildojo.com
4
5from shodan import Shodan
6from sys import argv
7
8apikey = ""
9api = None
10
11def load_api_key(api_key_file):
12 global apikey
13 global api
14 with open(api_key_file) as f:
15 apikey = f.readline()
16 api = Shodan(apikey[0:len(apikey)-1])
17
18def get_all(ipinfo):
19 for key in ipinfo:
20 value = ipinfo[key]
21 if key != "data":
22 print(f'\t{key}: {value}')
23 else:
24 print(f'\t{key}: {type(value)}')
25 for item in value:
26 for key2 in item:
27 value2 = item[key2]
28 if str(type(value2))=="<class 'list'>":
29 print(f'\t\t{key2}:')
30 for item2 in value2:
31 print(f'\t\t\t{item2}')
32 elif str(type(value2))=="<class 'dict'>":
33 print(f'\t\t{key2}:')
34 for key3 in value2:
35 print(f'\t\t\t{key3}')
36 elif str(type(value2))=="<class 'NoneType'>":
37 print(f'\t\t{key2}: none')
38 else:
39 print(f'\t\t{key2}: {value2}')
40
41def get_info(ipinfo):
42 ip = ipinfo['ip']
43 last_update = ipinfo['last_update']
44 hostnames = ",".join(ipinfo['hostnames'])
45 org = ipinfo['org']
46 asn = ipinfo['asn']
47 isp = ipinfo['isp']
48 domains = ",".join(ipinfo['domains'])
49 print(f"ip: {ip}")
50 print(f"last_update: {last_update}")
51 if len(hostnames)>0:
52 print(f"hostnames: {hostnames}")
53 print(f"org: {org}")
54 print(f"asn: {asn}")
55 print(f"isp: {isp}")
56 if len(domains)>0:
57 print(f"domains: {domains}")
58
59def main():
60 global api
61 load_api_key("apikey.txt")
62 ip = argv[1]
63 try:
64 ipinfo = api.host(ip)
65 print(ip)
66 get_info(ipinfo)
67 except Exception as e:
68 #print(e)
69 pass
70
71if __name__ == "__main__":
72 main()