connected.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #!/usr/bin/env python3
  2. import subprocess
  3. def get_connected() -> list:
  4. ret = []
  5. IGNORED_PREFIXES = ("lo", "docker", "br-", "veth", "virbr")
  6. IGNORED_TYPES = {"loopback", "bridge"}
  7. cmd = r"""
  8. nmcli -t -f DEVICE,TYPE,STATE,NAME connection show --active
  9. """
  10. connected = subprocess.run(
  11. cmd,
  12. shell = True,
  13. text = True,
  14. capture_output = True,
  15. check = True,
  16. )
  17. if connected.check_returncode():
  18. return
  19. for line in connected.stdout.strip().split("\n"):
  20. parts = line.split(":")
  21. device = parts[0]
  22. conn_type = parts[1]
  23. state = parts[2]
  24. name = parts[3]
  25. if conn_type in IGNORED_TYPES:
  26. continue
  27. if any(device.startswith(prefix) for prefix in IGNORED_PREFIXES):
  28. continue
  29. ret.append({
  30. "device": device,
  31. "type": conn_type,
  32. "state": state,
  33. "name": name,
  34. })
  35. return ret
  36. def yuck() -> str:
  37. return get_connected()
  38. if __name__ == "__main__":
  39. print(yuck())