Mapea relaciones ocultas para detectar cuentas duplicadas o posibles fraudes corporativos.
Map hidden relationships to detect duplicate accounts or potential corporate fraud.
Este ejercicio es solo para aprendizaje y pruebas. No ejecutes scripts contra datos reales, ambientes de producción, APIs externas, portales con login, datos sensibles, sistemas críticos o repositorios empresariales sin autorización, respaldos, pruebas previas, permisos mínimos, control de cambios y cumplimiento de los protocolos de ciberseguridad de tu organización.
This exercise is for learning and testing only. Do not run scripts against real data, production environments, external APIs, login portals, sensitive data, critical systems, or enterprise repositories without authorization, backups, prior testing, least-privilege permissions, change control, and compliance with your organization's cybersecurity protocols.
Usar NetworkX para representar conexiones entre usuarios, dispositivos o IPs y encontrar relaciones compartidas.
Use NetworkX to represent connections among users, devices, or IPs and find shared relationships.
| usuario | ip |
|---|---|
| Usuario_A | IP_192.168.1.5 |
| Usuario_B | IP_192.168.1.5 |
| Usuario_C | IP_192.168.1.8 |
import networkx as nx
G = nx.Graph()
G.add_edge("Usuario_A", "IP_192.168.1.5")
G.add_edge("Usuario_B", "IP_192.168.1.5")
# NetworkX detecta relaciones | NetworkX detects relationships| ip | usuarios_conectados | riesgo |
|---|---|---|
| IP_192.168.1.5 | Usuario_A, Usuario_B | review |
| IP_192.168.1.8 | Usuario_C | normal |
# ==========================================================
# Python Advanced Topic 14
# Connection Graph Analysis with NetworkX
# ==========================================================
# pip install networkx pandas
import networkx as nx
import pandas as pd
df = pd.DataFrame({
"usuario": ["Usuario_A", "Usuario_B", "Usuario_C", "Usuario_D"],
"ip": ["IP_192.168.1.5", "IP_192.168.1.5", "IP_192.168.1.8", "IP_192.168.1.9"]
})
G = nx.Graph()
for _, row in df.iterrows():
G.add_edge(row["usuario"], row["ip"])
summary = []
for ip in df["ip"].unique():
users = list(G.neighbors(ip))
summary.append({
"ip": ip,
"usuarios_conectados": ", ".join(users),
"cantidad_usuarios": len(users),
"riesgo": "review" if len(users) > 1 else "normal"
})
out = pd.DataFrame(summary)
out.to_csv("connection_graph_summary.csv", index=False)
print(out)ip usuarios_conectados cantidad_usuarios riesgo 0 IP_192.168.1.5 Usuario_A, Usuario_B 2 review 1 IP_192.168.1.8 Usuario_C 1 normal 2 IP_192.168.1.9 Usuario_D 1 normal
Los grafos permiten ver relaciones que una tabla plana oculta, especialmente cuando la señal aparece en conexiones compartidas.
Graphs reveal relationships hidden by flat tables, especially when the signal appears in shared connections.