-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinfo_pc.py
More file actions
116 lines (106 loc) · 4.47 KB
/
info_pc.py
File metadata and controls
116 lines (106 loc) · 4.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import platform
import os
import socket
import psutil
import uuid
import json
import sys
import getpass
def get_system_info():
info = {}
info['Sistema'] = platform.system()
info['Nome do Host'] = socket.gethostname()
try:
info['IP Local'] = socket.gethostbyname(socket.gethostname())
except socket.error:
info['IP Local'] = 'Indisponível'
info['Release'] = platform.release()
info['Versão'] = platform.version()
info['Arquitetura'] = platform.machine()
info['Processador'] = platform.processor()
info['RAM Total (GB)'] = round(psutil.virtual_memory().total / (1024**3), 2)
info['RAM Disponível (GB)'] = round(psutil.virtual_memory().available / (1024**3), 2)
# Fixed: os.getlogin() fails in SSH/container environments
# Use getpass.getuser() as more reliable alternative
try:
info['Usuário'] = getpass.getuser()
except Exception as e:
info['Usuário'] = os.environ.get('USER', os.environ.get('USERNAME', 'Desconhecido'))
info['UUID'] = str(uuid.uuid1())
info['Discos'] = []
for part in psutil.disk_partitions():
# Improved error handling with specific error logging
try:
usage = psutil.disk_usage(part.mountpoint)
info['Discos'].append({
'Dispositivo': part.device,
'Montagem': part.mountpoint,
'Tipo': part.fstype,
'Total (GB)': round(usage.total / (1024**3), 2),
'Usado (GB)': round(usage.used / (1024**3), 2),
'Livre (GB)': round(usage.free / (1024**3), 2),
'Percentual Usado': usage.percent
})
except PermissionError:
print(f"[Aviso] Sem permissão para acessar: {part.mountpoint}", file=sys.stderr)
except Exception as e:
print(f"[Erro] Falha ao acessar disco {part.device}: {type(e).__name__}", file=sys.stderr)
info['Redes'] = {}
for iface, addrs in psutil.net_if_addrs().items():
info['Redes'][iface] = []
for addr in addrs:
info['Redes'][iface].append({
'Endereço': addr.address,
'Família': str(addr.family),
'Tipo': addr.__class__.__name__
})
info['Processos'] = []
try:
for proc in psutil.process_iter(['pid', 'name', 'username']):
info['Processos'].append(proc.info)
except (psutil.NoSuchProcess, psutil.AccessDenied):
pass # Expected for some system processes
return info
def main():
try:
# Security warning
print("[AVISO] Este programa coleta informações sensíveis do sistema.")
print("[AVISO] Não compartilhe a saída com terceiros não confiáveis.\n")
info = get_system_info()
print("-" * 40)
print(f"Sistema: {info['Sistema']}")
print(f"Usuário: {info['Usuário']}")
print(f"Host: {info['Nome do Host']}")
print(f"IP Local: {info['IP Local']}")
print(f"Release: {info['Release']}")
print(f"Versão: {info['Versão']}")
print(f"Arquitetura: {info['Arquitetura']}")
print(f"Processador: {info['Processador']}")
print(f"RAM Total: {info['RAM Total (GB)']} GB")
print(f"RAM Disponível: {info['RAM Disponível (GB)']} GB")
print(f"UUID: {info['UUID']}")
print("-" * 40)
print("Discos:")
for disco in info['Discos']:
print(f" {disco['Dispositivo']} ({disco['Montagem']}) [{disco['Tipo']}]: {disco['Usado (GB)']}GB usados / {disco['Total (GB)']}GB total ({disco['Percentual Usado']}% usado)")
print("-" * 40)
print("Redes:")
for iface, addrs in info['Redes'].items():
print(f" {iface}:")
for addr in addrs:
print(f" {addr['Tipo']} - {addr['Família']}: {addr['Endereço']}")
print("-" * 40)
print(f"Processos em execução: {len(info['Processos'])}")
for proc in info['Processos'][:10]:
print(f" PID {proc['pid']} - {proc['name']} (Usuário: {proc.get('username', '-')})")
if len(info['Processos']) > 10:
print(f" ... e mais {len(info['Processos'])-10} processos.")
print("-" * 40)
except KeyboardInterrupt:
print("\n[Info] Programa interrompido pelo usuário.")
sys.exit(0)
except Exception as e:
print(f"\n[Erro Fatal] {type(e).__name__}: {str(e)}", file=sys.stderr)
sys.exit(1)
if __name__ == '__main__':
main()