#! /usr/bin/env python
# -*- coding: utf-8 -*-

#==============================================================================
# arp2tex : ping ARP a una red y los resultados recogidos en una tabla LaTeX
#------------------------------------------------------------------------------
# FJA - fja@neocipres.com                                        Junio de 2017
#==============================================================================

import sys
import os
from scapy.all import srp, Ether, ARP, conf

__uso__ = '''
            ============================================================
              arp2tex <IP o dirección de red, ejemplo: 192.168.1.1/24>
            ============================================================
            \n'''

if os.geteuid() != 0:
    print '\n\t Debes ser usuario root \n'
    sys.exit(1)

if len(sys.argv) != 2:
    print __uso__
    sys.exit(1)

try:
    ips = sys.argv[1]
    conf.verb = 0
    ans, unans = srp(Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(pdst=ips),
                  timeout=2)

    archivo = open('eqa.tex', 'w')
    linea = r"\documentclass[11pt,spanish]{article}"
    archivo.write(linea + '\n')
    linea = r"\usepackage[T1]{fontenc}"
    archivo.write(linea + '\n')
    linea = r"\usepackage[latin1]{inputenc}"
    archivo.write(linea + '\n')
    linea = r"\usepackage{geometry}"
    archivo.write(linea + '\n')
    linea = r"\geometry{a4paper, margin=5cm}"
    archivo.write(linea + '\n')
    linea = r"\begin{document}"
    archivo.write(linea + '\n')
    linea = r"\section*{Equipos activos de la red: %s}" % ips
    archivo.write(linea + '\n')
    linea = r"\begin{center}"
    archivo.write(linea + '\n')
    linea = r"\begin{tabular}{|l|l|}"
    archivo.write(linea + '\n')
    linea = r"\hline"
    archivo.write(linea + '\n')
    linea = r"MAC & IP \\"
    archivo.write(linea + '\n')
    linea = r"\hline"
    archivo.write(linea + '\n')

    for snd, rcv in ans:
        linea = rcv.sprintf(r"%Ether.src% & %ARP.psrc%\\")
        archivo.write(linea + '\n')
        linea = r"\hline"
        archivo.write(linea + '\n')

    linea = r"\end{tabular}"
    archivo.write(linea + '\n')
    linea = r"\end{center}"
    archivo.write(linea + '\n')
    linea = r"\end{document}"
    archivo.write(linea + '\n')
    archivo.close()

    cmd = 'latex eqa.tex'
    os.system(cmd)
    cmd = 'dvipdfm eqa.dvi'
    os.system(cmd)

    la = raw_input('\n\t¿Limpiar archivos? (s/n): ')
    if la == 's':
        os.remove('eqa.tex')
        os.remove('eqa.dvi')
        os.remove('eqa.log')
        os.remove('eqa.aux')
        os.chmod('eqa.pdf', 0666)

except IOError as e:
    print "\t\n I/O error({0}): {1}".format(e.errno, e.strerror)

except KeyboardInterrupt:
    print '\n'
    print '\tScript interrumpido por el usuario...\n'
    print '\t Error: ', sys.exc_info()[0], '\n'
    sys.exit(1)

except Exception as e:
    print '\n\t'
    print '\t Error: ', e, sys.exc_info()[0], '\n'