fix(device-test): contain tool processes and add reviewed preview
This commit is contained in:
1 parent
c98d7527a0
commit
7d31e09cb7
59 files changed
+23722
No files matched your search
@@ -0,0 +1,80 @@
|
||||
"""Read local Windows IPv4 interfaces without sending device discovery packets."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib.util
|
||||
import json
|
||||
from pathlib import Path
|
||||
import sys
|
||||
|
||||
|
||||
def discovery_helper():
|
||||
path = Path(__file__).resolve().parent / "skill" / "scripts" / "vendor" / "v2_discover.py"
|
||||
name = "artemis_device_test_network_discovery"
|
||||
spec = importlib.util.spec_from_file_location(name, path)
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
sys.modules[name] = module
|
||||
spec.loader.exec_module(module)
|
||||
return module
|
||||
|
||||
|
||||
def inventory() -> dict:
|
||||
helper = discovery_helper()
|
||||
interfaces = []
|
||||
eligible = []
|
||||
for interface in helper.powershell_interfaces():
|
||||
network = interface.network
|
||||
reason = helper.exclusion_reason(interface, include_virtual=False)
|
||||
if not reason and (
|
||||
network.prefixlen > 30
|
||||
or interface.address in {network.network_address, network.broadcast_address}
|
||||
):
|
||||
reason = "没有可用的 IPv4 广播主机地址"
|
||||
cidr = f"{interface.address}/{interface.prefix_length}"
|
||||
interfaces.append(
|
||||
{
|
||||
"alias": interface.alias,
|
||||
"description": interface.description,
|
||||
"ipv4_interface": cidr,
|
||||
"network": str(network),
|
||||
"broadcast": str(network.broadcast_address),
|
||||
"hardware": interface.hardware,
|
||||
"eligible": reason is None,
|
||||
"exclusion_reason": reason,
|
||||
}
|
||||
)
|
||||
if reason is None and cidr not in eligible:
|
||||
eligible.append(cidr)
|
||||
return {
|
||||
"status": "INTERFACES_ENUMERATED",
|
||||
"interfaces": interfaces,
|
||||
"eligible_interfaces": eligible,
|
||||
"device_discovery_executed": False,
|
||||
}
|
||||
|
||||
|
||||
def main() -> int:
|
||||
for stream in (sys.stdout, sys.stderr):
|
||||
if hasattr(stream, "reconfigure"):
|
||||
stream.reconfigure(encoding="utf-8", errors="backslashreplace")
|
||||
try:
|
||||
result = inventory()
|
||||
except (OSError, RuntimeError, ValueError, TypeError):
|
||||
print(
|
||||
json.dumps(
|
||||
{
|
||||
"execution_status": "configuration_error",
|
||||
"error_code": "network_interface_query_failed",
|
||||
"message": "本机 IPv4 网卡枚举失败;未执行设备发现,请检查 Windows 网络查询权限。",
|
||||
"device_discovery_executed": False,
|
||||
},
|
||||
ensure_ascii=False,
|
||||
)
|
||||
)
|
||||
return 2
|
||||
print(json.dumps(result, ensure_ascii=False))
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in new issue
Block a user