Conexion entrantes + whois en Python

Written by

Hace varias semanas que no publico nada por aquí, y aprovechando que escribí un pequeño script en python para hacer un whois a todas las conexiones entrantes en una maquina con Linux, voy a publicarlo aquí por si a alguien le resulta útil.

Es un script muy sencillo así que no tiene mucha explicación tampoco.

#!/usr/bin/python
import socket
import sys

class Netstat(object):

    def __init__ (self):
        with open('/proc/net/tcp','r') as f:
            self.content = f.readlines()
            self.content.pop(0)

    def _whois(self, address):
        try:
            data = socket.gethostbyaddr(address[0])[0]
        except Exception, ex:
            data = ex

        return data

    def _get_address(self):
        result = []
        sys.stdout.write( '\r' + ( '#' * 0 ) + ' get address')
        sys.stdout.flush()
        for line in self.content:
            line_array = [x for x in line.split(' ') if x !='']
            if line_array[2] != '00000000:0000':
                host,port = line_array[2].split(':')
                r_host = '.'.join([(str(int(host[6:8],16))),
                                   (str(int(host[4:6],16))),
                                   (str(int(host[2:4],16))),
                                   (str(int(host[0:2],16)))])
                result.append(r_host)

        return result

    def execute(self, interactive=False):
        self.final = []
        list_address = self._get_address()
        if interactive:
            self.interactive(list_address)
        else:
            self.non_interactive(list_address)

    def non_interactive(self, list_address):
        final = []
        count = 0
        for address in list_address:
            count = count + 1
            sys.stdout.write( '\r' + ( '#' * count ) + ' Scan Address:'\
             + address)
            final.append((self._whois(address), address))
            sys.stdout.flush()

        return final

    def interactive(self, list_address):
        for address in list_address:
            print address, self._whois(address)

if __name__ == '__main__':
    nestat = Netstat()
    nestat.execute(interactive=False)
    # ó para modo interactivo, esto es, te va mostrando por pantalla
    # el resultado del whois.
    nestat.execute(interactive=True)

Para cualquier duda, y/o explicación puedes escribirme un comentario :D

Espero sea de utilidad!