domingo, 16 de septiembre de 2018

Código para obtener información del Sistema con Python


#InfoSistema.py
"""
DEPENDENCIAS = geoiplookup del paquete geoip-bin
para saber el pais por medio de la IP.
"""
import os
import commands
import datetime
import re
import urllib2


class InfoSistema():
"""
Clase para obtener información del sistema operativo actual.
"""
def GetSystemInfo(self, string=True):
"""
Return a tuple object with the diferent info system if string is True,
return a string.
"""
os = self.GetOS()
system = self.GetSystemName()
platform = self.GetPlatform()
architecture = self.GetArchitecture()
processor = self.GetProcessorName()
machine = self.GetMachine()
login = self.GetLogin()
userpath = self.GetUserPath()
redname = self.GetRedName()

try:
ip = self.GetIpPublica()
except BaseException:
ip = self.GetError()

out = {
"os":os,
"system":system,
"platform":platform,
"architecture":architecture,
"processor":processor,
"machine":machine,
"login":login,
"userpath":userpath,
"redname":redname, "IP":ip
}

if string:
s = """OS: %s\nSys: %s\nPlatform: %s\nArchitecture: %s\nProcessor:
%s\nMachine: %s\nLogin: %s\nUserpath: %s\nRed: %s\n"""
out = s % tuple(out.values())

return out
def GetIpPublica(self):
"""
Obtiene la IP pública del sistema, mediante una lectura a la página web
www.showmyip.com extrayendo de ella la IP pública mostrada.
"""
# Obtenemos el código fuente de la página
s = urllib2.urlopen('http://www.showmyip.com').read()

# Con expresiones regulares se obtiene todo lo que venga después del
# 'displaycopy'. Esta línea es un pedazo de Javascript que imprime en
# la página la IP
m = re.search('(?<=displaycopy).*', s)
ip = m.group(0)

# Reemplazamos por nada los datos que no sirven
ip = ip.replace("('", "")
ip = ip.replace("');", "")

return ip

def GetUsuario(self):
"""
Obtiene el nombre del usuario actual.
"""
usuario = os.getlogin()
return usuario
def GetNombreSistema(self):
"""
Obtiene el nombre del sistema.
"""
nombre = os.name
return nombre
def GetSistema(self):
"""
Obtiene una tupla con el nombre del sistema operativo, nombre del
equipo, version del nucleo fecha de lanzamiento, arquitectura.
"""
sistema = os.uname()
return sistema
def GetFecha(self):
"""
Obtiene la fecha y hora actual del Sistema.
"""
fecha = datetime.datetime.today()
return fecha
def GetPais(self, IP=None):
"""
Obtiene el país de la IP pública pasada como parámetro por medio del
programa en consola 'geoiplookp'. Si no se especifica una IP como
parámetro, se usará la IP pública del sistema actual realizando una
llamada a la función interna self.GetIpPublica().
"""
if IP == None:
IP = self.GetIpPublica()

pais = commands.getoutput("geoiplookup "+str(IP))

if pais == "sh: geoiplookup: not found":
print("El programa geoiplookup, no está instalado")

# Opción para instalar geoiplookup
resp = raw_input("Instalar geoiplookup? s/n ")

if resp.lower() == "s":
print("Instalando Espere...")
#Instalacion del programa geoiplookup
os.system("sudo apt-get install geoip-bin")
pais = commands.getoutput("geoiplookup "+str(IP))
return pais
else:
# si el programa geoiplookup no esta instalado
return None

elif len(str(pais)) > 200:
print("No se pudo obtener el país para la IP "+str(IP))
# Si no se puede obtener el pais de la direccion IP.
return False
else:
return pais

if __name__ == "__main__":
info = InfoSistema()
funciones={
"1":"info.GetIpPublica()",
"2":"info.GetUsuario()",
"3":"info.GetNombreSistema()",
"4":"info.GetSistema()",
"5":"info.GetFecha()",
"6":"info.GetPais()",
"7":"exit()"
}

while True:
print("Elija:....................")
elegir = raw_input("""Ip Publica: 1 \nUsuario: 2 \n
Nombre del Sistema: 3 \nSistema: 4 \n
Fecha: 5 \nPais: 6 \nSalir: 7 \n""")
f = funciones[elegir]
exec f"print({f})"

No hay comentarios.:

Publicar un comentario