#!/usr/bin/env python3 # v0.3 - 2024-01-28 - Additional check for revDNS resolution # v0.2 - 2022-08-28 - Added Python 3.9 compatibility # v0.1 - 2021-10-14 # config IFNAME = "eth0" SLEEP = 0.15 # code from itertools import chain from progressbar import * from time import sleep import netifaces as ni import socket import sys class Vhosts: def __init__(self): ipv4_l = ni.ifaddresses(IFNAME)[ni.AF_INET] ipv6_l = [ af_inet6 for af_inet6 in ni.ifaddresses(IFNAME)[ni.AF_INET6] if not af_inet6.get("addr").startswith("fe80::") ] ip_l = list(chain(ipv4_l[::-1], ipv6_l[::-1])) ip_l_len = len(ip_l) vhosts_l = [] widgets = [ RotatingMarker(), " ", FormatLabel("resolving hosts..."), " ", Bar(), " ", Percentage(), " ", Counter(format=f"[%d/{ip_l_len}]"), ] bar = ProgressBar(widgets=widgets, maxval=ip_l_len).start() for i, ip in enumerate(ip_l, 1): in_ptr = socket.gethostbyaddr(ip.get("addr")) # check if revDNS is resolved if len(in_ptr[2]) == 1: vhosts_l.append((in_ptr[0], ip.get("addr"))) else: vhosts_l.append(("-", ip.get("addr"))) bar.update(i) sleep(SLEEP) sys.stdout.write("\r\033[K") for vhost in vhosts_l: sys.stdout.write(f"* {vhost[0]}\r\t\t\t\t{vhost[1]}\n") def main(): vhosts = Vhosts() if __name__ == "__main__": main()