• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

fnds

[Python] Get Host IP by Hostname

1 mensagem neste tópico

Este programa permite obter o IP de um host a partir do seu nome (dns).

Pode se introduzir uma lista de hosts separada por virgulas, através de um ficheiro, ou ambos.

E pode-se obter a lista de IPs de x em x segundos.

#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Coded by Fábio André Domingues (fnds)

from time import sleep
from socket import gaierror, gethostbyname
from os import access as file_access

print u"""________________________________________________________________________________

--------------------------- Get Host IP by Hostname ----------------------------
________________________________________________________________________________

Coded by Fábio Domingues aka fnds <fnds3000@gmail.com>
________________________________________________________________________________
"""

def get_ips(hostnames):
   ips = []
   for hostname in hostnames:
       try:
           ip = gethostbyname(hostname)
       except gaierror:
           ip = 'Error'
       ips.append((hostname, ip))       
   return ips

while 1:
   input_data = raw_input('Hostname (hostname or filename[, ...]) [exit]? ')
   if input_data:
       while 1:
           cycle = raw_input('Cycle (yes/no) [no]? ')
           if cycle and cycle == 'yes':
               while 1:
                   time = raw_input('Time (+0s) [1]? ')
                   if time:
                       try:
                           if int(time) > 0:
                               cycle_time = int(time)
                               break
                           else:
                               print 'Sorry, value not valid.'
                       except ValueError:
                           print 'Sorry, value not valid.'
                   else:
                       cycle_time = 1
                       break
               break
           elif not cycle or cycle == 'no':
               cycle_time = False
               break
           else:
               print 'Sorry, value not valid.'

       hostnames = []       
       for data in input_data.split(','):
           data = data.strip()
           if data:
               if file_access(data, 0):
                   sep = raw_input('Seperator of file "%s" [\\n]? ' % data)
                   if not sep:
                       sep = '\n'
                   for file_data in open(data).read().replace('\r\n', '\n')\
                           .replace('\r', '\n').split(sep):
                       file_data = file_data.strip()
                       if file_data:
                           hostnames.append(file_data)
               else:
                   hostnames.append(data)

       print

       if cycle_time:
           print 'Cycle time: %d' % cycle_time
           print 'Type [Ctrl+C] to break.'
           print
           while 1:
               try:
                   for hostname, ip in get_ips(hostnames):
                       print 'IP of "%s": %s' % (hostname, ip)
                   print
                   sleep(cycle_time)
               except KeyboardInterrupt:
                   break
       else:
           for hostname, ip in get_ips(hostnames):
               print 'IP of "%s": %s' % (hostname, ip)
       print
   else:
       break
print '\nBye Bye! \n'

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora