diff --git a/devices.json b/devices.json new file mode 100644 index 0000000..be57d9d --- /dev/null +++ b/devices.json @@ -0,0 +1,3607 @@ +[ + { + "id": "172.16.8.8", + "ip": "172.16.8.8", + "type": "h3c", + "hostname": "BJ-Access08", + "os_version": "H3C Comware Software, Version 7.1.070, Release 6312P01", + "uptime": "16 weeks,", + "interfaces": [ + { + "name": "FortyGigE1/0/53", + "description": "FortyGigE1/0/53 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24e1", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "FortyGigE1/0/54", + "description": "FortyGigE1/0/54 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24e6", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/1", + "description": "GigabitEthernet1/0/1 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24ad", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/2", + "description": "GigabitEthernet1/0/2 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24ae", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/3", + "description": "GigabitEthernet1/0/3 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24af", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/4", + "description": "GigabitEthernet1/0/4 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24b0", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/5", + "description": "GigabitEthernet1/0/5 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24b1", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/6", + "description": "GigabitEthernet1/0/6 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24b2", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/7", + "description": "GigabitEthernet1/0/7 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24b3", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/8", + "description": "GigabitEthernet1/0/8 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24b4", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/9", + "description": "GigabitEthernet1/0/9 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24b5", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/10", + "description": "GigabitEthernet1/0/10 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24b6", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/11", + "description": "GigabitEthernet1/0/11 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24b7", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/12", + "description": "GigabitEthernet1/0/12 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24b8", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/13", + "description": "GigabitEthernet1/0/13 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24b9", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/14", + "description": "GigabitEthernet1/0/14 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24ba", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/15", + "description": "GigabitEthernet1/0/15 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24bb", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/16", + "description": "GigabitEthernet1/0/16 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24bc", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/17", + "description": "GigabitEthernet1/0/17 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24bd", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/18", + "description": "GigabitEthernet1/0/18 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24be", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/19", + "description": "GigabitEthernet1/0/19 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24bf", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/20", + "description": "GigabitEthernet1/0/20 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24c0", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/21", + "description": "GigabitEthernet1/0/21 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24c1", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/22", + "description": "GigabitEthernet1/0/22 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24c2", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/23", + "description": "GigabitEthernet1/0/23 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24c3", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/24", + "description": "GigabitEthernet1/0/24 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24c4", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/25", + "description": "GigabitEthernet1/0/25 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24c5", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/26", + "description": "GigabitEthernet1/0/26 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24c6", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/27", + "description": "GigabitEthernet1/0/27 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24c7", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/28", + "description": "GigabitEthernet1/0/28 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24c8", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/29", + "description": "GigabitEthernet1/0/29 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24c9", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/30", + "description": "GigabitEthernet1/0/30 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24ca", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/31", + "description": "GigabitEthernet1/0/31 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24cb", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/32", + "description": "GigabitEthernet1/0/32 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24cc", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/33", + "description": "GigabitEthernet1/0/33 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24cd", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/34", + "description": "GigabitEthernet1/0/34 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24ce", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/35", + "description": "GigabitEthernet1/0/35 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24cf", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/36", + "description": "GigabitEthernet1/0/36 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24d0", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/37", + "description": "GigabitEthernet1/0/37 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24d1", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/38", + "description": "GigabitEthernet1/0/38 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24d2", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/39", + "description": "GigabitEthernet1/0/39 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24d3", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/40", + "description": "GigabitEthernet1/0/40 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24d4", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/41", + "description": "GigabitEthernet1/0/41 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24d5", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/42", + "description": "GigabitEthernet1/0/42 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24d6", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/43", + "description": "GigabitEthernet1/0/43 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24d7", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/44", + "description": "GigabitEthernet1/0/44 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24d8", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/45", + "description": "GigabitEthernet1/0/45 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24d9", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/46", + "description": "GigabitEthernet1/0/46 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24da", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/47", + "description": "GigabitEthernet1/0/47 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24db", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/48", + "description": "GigabitEthernet1/0/48 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24dc", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/49", + "description": "GigabitEthernet1/0/49 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24dd", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/50", + "description": "M-GigabitEthernet0/0/0 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-2487", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "NULL0", + "description": "Register-Tunnel0 Interface", + "ip": "UP", + "mask": "", + "mac": "", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "Ten-GigabitEthernet1/0/51", + "description": "Ten-GigabitEthernet1/0/51 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-24df", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "Ten-GigabitEthernet1/0/52", + "description": "Vlan-interface16 Interface", + "ip": "10.16.16.8", + "mask": "255.255.252.0", + "mac": "642f-c7e0-249d", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + } + ], + "neighbors": [ + { + "local_interface": "Ten-GigabitEthernet1/0/51", + "remote_device": "642f-c7e0-02cb", + "remote_ip": "", + "remote_mac": "642f-c7e0-02cb", + "remote_interface": "Ten-GigabitEthernet1/0/52", + "protocol": "LLDP" + }, + { + "local_interface": "Ten-GigabitEthernet1/0/52", + "remote_device": "642f-c7df-f83b", + "remote_ip": "", + "remote_mac": "642f-c7df-f83b", + "remote_interface": "Ten-GigabitEthernet1/0/51", + "protocol": "LLDP" + } + ], + "mac_addresses": [ + "642f-c7e0-24df", + "642f-c7e0-249d", + "642f-c7e0-24b0", + "642f-c7e0-24be", + "642f-c7e0-24cf", + "642f-c7e0-24d0", + "642f-c7e0-24d5", + "642f-c7e0-2487", + "642f-c7e0-24ad", + "642f-c7e0-24b7", + "642f-c7e0-24ba", + "642f-c7e0-24c1", + "642f-c7e0-24c8", + "642f-c7e0-24cd", + "642f-c7e0-24ce", + "642f-c7e0-24d7", + "642f-c7e0-24b1", + "642f-c7e0-24b3", + "642f-c7e0-24c0", + "642f-c7e0-24c5", + "642f-c7e0-24c6", + "642f-c7e0-24c9", + "642f-c7e0-24ca", + "642f-c7e0-24cb", + "642f-c7e0-24b6", + "642f-c7e0-24bd", + "642f-c7e0-24cc", + "642f-c7e0-24d1", + "642f-c7e0-24dc", + "642f-c7e0-24af", + "642f-c7e0-24b5", + "642f-c7e0-24bb", + "642f-c7e0-24d2", + "642f-c7e0-24d4", + "642f-c7e0-24c4", + "642f-c7e0-24e1", + "642f-c7e0-24e6", + "642f-c7e0-24b2", + "642f-c7e0-24b4", + "642f-c7e0-24d3", + "642f-c7e0-24d8", + "642f-c7e0-24da", + "642f-c7e0-24ae", + "642f-c7e0-24b8", + "642f-c7e0-24b9", + "642f-c7e0-24bc", + "642f-c7e0-24bf", + "642f-c7e0-24d9", + "642f-c7e0-24db", + "642f-c7e0-24dd", + "642f-c7e0-24c2", + "642f-c7e0-24c3", + "642f-c7e0-24c7", + "642f-c7e0-24d6" + ], + "last_scanned": "2026-04-26T05:07:07.6098313+08:00", + "scan_status": "success" + }, + { + "id": "172.16.8.9", + "ip": "172.16.8.9", + "type": "h3c", + "hostname": "BJ-Access09", + "os_version": "H3C Comware Software, Version 7.1.070, Release 6312P01", + "uptime": "16 weeks,", + "interfaces": [ + { + "name": "FortyGigE1/0/53", + "description": "FortyGigE1/0/53 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0329", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "FortyGigE1/0/54", + "description": "FortyGigE1/0/54 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-032e", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/1", + "description": "GigabitEthernet1/0/1 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-02f5", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/2", + "description": "GigabitEthernet1/0/2 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-02f6", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/3", + "description": "GigabitEthernet1/0/3 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-02f7", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/4", + "description": "GigabitEthernet1/0/4 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-02f8", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/5", + "description": "GigabitEthernet1/0/5 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-02f9", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/6", + "description": "GigabitEthernet1/0/6 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-02fa", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/7", + "description": "Printer", + "ip": "", + "mask": "", + "mac": "642f-c7e0-02fb", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/8", + "description": "GigabitEthernet1/0/8 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-02fc", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/9", + "description": "GigabitEthernet1/0/9 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-02fd", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/10", + "description": "GigabitEthernet1/0/10 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-02fe", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/11", + "description": "GigabitEthernet1/0/11 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-02ff", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/12", + "description": "GigabitEthernet1/0/12 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0300", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/13", + "description": "GigabitEthernet1/0/13 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0301", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/14", + "description": "GigabitEthernet1/0/14 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0302", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/15", + "description": "GigabitEthernet1/0/15 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0303", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/16", + "description": "GigabitEthernet1/0/16 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0304", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/17", + "description": "GigabitEthernet1/0/17 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0305", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/18", + "description": "GigabitEthernet1/0/18 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0306", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/19", + "description": "GigabitEthernet1/0/19 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0307", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/20", + "description": "GigabitEthernet1/0/20 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0308", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/21", + "description": "GigabitEthernet1/0/21 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0309", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/22", + "description": "GigabitEthernet1/0/22 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-030a", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/23", + "description": "GigabitEthernet1/0/23 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-030b", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/24", + "description": "GigabitEthernet1/0/24 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-030c", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/25", + "description": "GigabitEthernet1/0/25 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-030d", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/26", + "description": "GigabitEthernet1/0/26 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-030e", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/27", + "description": "GigabitEthernet1/0/27 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-030f", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/28", + "description": "GigabitEthernet1/0/28 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0310", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/29", + "description": "GigabitEthernet1/0/29 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0311", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/30", + "description": "GigabitEthernet1/0/30 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0312", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/31", + "description": "GigabitEthernet1/0/31 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0313", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/32", + "description": "GigabitEthernet1/0/32 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0314", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/33", + "description": "GigabitEthernet1/0/33 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0315", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/34", + "description": "GigabitEthernet1/0/34 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0316", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/35", + "description": "GigabitEthernet1/0/35 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0317", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/36", + "description": "GigabitEthernet1/0/36 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0318", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/37", + "description": "GigabitEthernet1/0/37 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0319", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/38", + "description": "GigabitEthernet1/0/38 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-031a", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/39", + "description": "GigabitEthernet1/0/39 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-031b", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/40", + "description": "GigabitEthernet1/0/40 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-031c", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/41", + "description": "GigabitEthernet1/0/41 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-031d", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/42", + "description": "GigabitEthernet1/0/42 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-031e", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/43", + "description": "GigabitEthernet1/0/43 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-031f", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/44", + "description": "GigabitEthernet1/0/44 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0320", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/45", + "description": "GigabitEthernet1/0/45 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0321", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/46", + "description": "GigabitEthernet1/0/46 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0322", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/47", + "description": "GigabitEthernet1/0/47 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0323", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/48", + "description": "GigabitEthernet1/0/48 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0324", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/49", + "description": "GigabitEthernet1/0/49 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0325", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/50", + "description": "M-GigabitEthernet0/0/0 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-02cf", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "NULL0", + "description": "Register-Tunnel0 Interface", + "ip": "UP", + "mask": "", + "mac": "", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "Ten-GigabitEthernet1/0/51", + "description": "Ten-GigabitEthernet1/0/51 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0327", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "Ten-GigabitEthernet1/0/52", + "description": "Vlan-interface22 Interface", + "ip": "10.16.16.9", + "mask": "255.255.252.0", + "mac": "642f-c7e0-02eb", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + } + ], + "neighbors": [ + { + "local_interface": "Ten-GigabitEthernet1/0/51", + "remote_device": "642f-c7e0-0e2b", + "remote_ip": "", + "remote_mac": "642f-c7e0-0e2b", + "remote_interface": "Ten-GigabitEthernet1/0/52", + "protocol": "LLDP" + }, + { + "local_interface": "Ten-GigabitEthernet1/0/52", + "remote_device": "642f-c7e0-2483", + "remote_ip": "", + "remote_mac": "642f-c7e0-2483", + "remote_interface": "Ten-GigabitEthernet1/0/51", + "protocol": "LLDP" + } + ], + "mac_addresses": [ + "642f-c7e0-0322", + "642f-c7e0-0324", + "642f-c7e0-02cf", + "642f-c7e0-02eb", + "642f-c7e0-02fc", + "642f-c7e0-0302", + "642f-c7e0-030e", + "642f-c7e0-0329", + "642f-c7e0-032e", + "642f-c7e0-02f6", + "642f-c7e0-02f7", + "642f-c7e0-02fa", + "642f-c7e0-0308", + "642f-c7e0-0320", + "642f-c7e0-0323", + "642f-c7e0-02fb", + "642f-c7e0-030c", + "642f-c7e0-030d", + "642f-c7e0-0310", + "642f-c7e0-0311", + "642f-c7e0-0313", + "642f-c7e0-031e", + "642f-c7e0-02fd", + "642f-c7e0-0306", + "642f-c7e0-0307", + "642f-c7e0-030a", + "642f-c7e0-030f", + "642f-c7e0-031d", + "642f-c7e0-02f9", + "642f-c7e0-0305", + "642f-c7e0-0318", + "642f-c7e0-031b", + "642f-c7e0-0325", + "642f-c7e0-0327", + "642f-c7e0-02f5", + "642f-c7e0-02f8", + "642f-c7e0-0301", + "642f-c7e0-0304", + "642f-c7e0-030b", + "642f-c7e0-0314", + "642f-c7e0-0316", + "642f-c7e0-031c", + "642f-c7e0-02fe", + "642f-c7e0-0300", + "642f-c7e0-0303", + "642f-c7e0-0312", + "642f-c7e0-0315", + "642f-c7e0-0317", + "642f-c7e0-0319", + "642f-c7e0-031a", + "642f-c7e0-02ff", + "642f-c7e0-0309", + "642f-c7e0-031f", + "642f-c7e0-0321" + ], + "last_scanned": "2026-04-26T05:08:06.8307539+08:00", + "scan_status": "success" + }, + { + "id": "172.16.8.10", + "ip": "172.16.8.10", + "type": "h3c", + "hostname": "BJ-Access10", + "os_version": "H3C Comware Software, Version 7.1.070, Release 6126P20", + "uptime": "16 weeks,", + "interfaces": [ + { + "name": "GigabitEthernet1/0/1", + "description": "GigabitEthernet1/0/1 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38e4", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/2", + "description": "GigabitEthernet1/0/2 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38e5", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/3", + "description": "GigabitEthernet1/0/3 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38e6", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/4", + "description": "GigabitEthernet1/0/4 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38e7", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/5", + "description": "GigabitEthernet1/0/5 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38e8", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/6", + "description": "GigabitEthernet1/0/6 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38e9", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/7", + "description": "GigabitEthernet1/0/7 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38ea", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/8", + "description": "GigabitEthernet1/0/8 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38eb", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/9", + "description": "GigabitEthernet1/0/9 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38ec", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/10", + "description": "GigabitEthernet1/0/10 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38ed", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/11", + "description": "GigabitEthernet1/0/11 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38ee", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/12", + "description": "GigabitEthernet1/0/12 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38ef", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/13", + "description": "GigabitEthernet1/0/13 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38f0", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/14", + "description": "GigabitEthernet1/0/14 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38f1", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/15", + "description": "GigabitEthernet1/0/15 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38f2", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/16", + "description": "GigabitEthernet1/0/16 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38f3", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/17", + "description": "GigabitEthernet1/0/17 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38f4", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/18", + "description": "GigabitEthernet1/0/18 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38f5", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/19", + "description": "GigabitEthernet1/0/19 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38f6", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/20", + "description": "InLoopBack0 Interface", + "ip": "", + "mask": "", + "mac": "743a-2047-38f7", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "NULL0", + "description": "Vlan-interface12 Interface", + "ip": "172.16.8.10", + "mask": "255.255.255.0", + "mac": "743a-2047-38e0", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + } + ], + "neighbors": [ + { + "local_interface": "GigabitEthernet1/0/1", + "remote_device": "9844-ce18-f2a0", + "remote_ip": "", + "remote_mac": "9844-ce18-f2a0", + "remote_interface": "GigabitEthernet0/0/0", + "protocol": "LLDP" + }, + { + "local_interface": "GigabitEthernet1/0/2", + "remote_device": "9400-b06f-6da0", + "remote_ip": "", + "remote_mac": "9400-b06f-6da0", + "remote_interface": "GigabitEthernet0/0/0", + "protocol": "LLDP" + }, + { + "local_interface": "GigabitEthernet1/0/3", + "remote_device": "cc05-77ce-db40", + "remote_ip": "", + "remote_mac": "cc05-77ce-db40", + "remote_interface": "GigabitEthernet0/0/0", + "protocol": "LLDP" + }, + { + "local_interface": "GigabitEthernet1/0/4", + "remote_device": "9844-ce19-09a0", + "remote_ip": "", + "remote_mac": "9844-ce19-09a0", + "remote_interface": "GigabitEthernet0/0/0", + "protocol": "LLDP" + }, + { + "local_interface": "GigabitEthernet1/0/5", + "remote_device": "9844-ce19-0c80", + "remote_ip": "", + "remote_mac": "9844-ce19-0c80", + "remote_interface": "GigabitEthernet0/0/0", + "protocol": "LLDP" + }, + { + "local_interface": "GigabitEthernet1/0/7", + "remote_device": "9844-ce18-b480", + "remote_ip": "", + "remote_mac": "9844-ce18-b480", + "remote_interface": "GigabitEthernet0/0/0", + "protocol": "LLDP" + }, + { + "local_interface": "GigabitEthernet1/0/9", + "remote_device": "44a1-913f-1be0", + "remote_ip": "", + "remote_mac": "44a1-913f-1be0", + "remote_interface": "GigabitEthernet0/0/0", + "protocol": "LLDP" + }, + { + "local_interface": "GigabitEthernet1/0/10", + "remote_device": "9400-b06f-7660", + "remote_ip": "", + "remote_mac": "9400-b06f-7660", + "remote_interface": "GigabitEthernet0/0/0", + "protocol": "LLDP" + }, + { + "local_interface": "GigabitEthernet1/0/16", + "remote_device": "642f-c7e0-0333", + "remote_ip": "", + "remote_mac": "642f-c7e0-0333", + "remote_interface": "GigabitEthernet1/0/47", + "protocol": "LLDP" + } + ], + "mac_addresses": [ + "743a-2047-38e8", + "743a-2047-38ec", + "743a-2047-38ee", + "743a-2047-38f2", + "743a-2047-38f4", + "743a-2047-38f5", + "743a-2047-38f6", + "743a-2047-38f7", + "743a-2047-38e7", + "743a-2047-38ea", + "743a-2047-38f0", + "743a-2047-38f3", + "743a-2047-38e0", + "743a-2047-38e5", + "743a-2047-38e6", + "743a-2047-38eb", + "743a-2047-38e4", + "743a-2047-38e9", + "743a-2047-38ed", + "743a-2047-38ef", + "743a-2047-38f1" + ], + "last_scanned": "2026-04-26T05:09:02.6176491+08:00", + "scan_status": "success" + }, + { + "id": "172.16.8.1", + "ip": "172.16.8.1", + "type": "h3c", + "hostname": "BJ-FW01-New", + "os_version": "H3C Comware Software, Version 7.1.064, Release 9323P25", + "uptime": "16 weeks,", + "interfaces": [ + { + "name": "GigabitEthernet1/0/0", + "description": "GigabitEthernet1/0/0 Interface", + "ip": "192.168.0.1", + "mask": "255.255.255.0", + "mac": "782c-2958-e5b2", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/1", + "description": "GigabitEthernet1/0/1 Interface", + "ip": "", + "mask": "", + "mac": "782c-2958-e5b3", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/2", + "description": "GigabitEthernet1/0/2 Interface", + "ip": "", + "mask": "", + "mac": "782c-2958-e5b4", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/3", + "description": "GigabitEthernet1/0/3 Interface", + "ip": "", + "mask": "", + "mac": "782c-2958-e5b5", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/4", + "description": "GigabitEthernet1/0/4 Interface", + "ip": "", + "mask": "", + "mac": "782c-2958-e5b6", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/5", + "description": "GigabitEthernet1/0/5 Interface", + "ip": "", + "mask": "", + "mac": "782c-2958-e5b7", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/6", + "description": "To-Internet", + "ip": "", + "mask": "", + "mac": "782c-2958-e5b8", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/7", + "description": "Google-Line", + "ip": "192.168.121.1", + "mask": "255.255.255.0", + "mac": "782c-2958-e5b9", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/8", + "description": "GigabitEthernet1/0/8 Interface", + "ip": "", + "mask": "", + "mac": "782c-2958-e5ba", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/9", + "description": "X1 Remote Desktop", + "ip": "", + "mask": "", + "mac": "782c-2958-e5bb", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/10", + "description": "To SW NAS01", + "ip": "", + "mask": "", + "mac": "782c-2958-e5bc", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/11", + "description": "GigabitEthernet1/0/11 Interface", + "ip": "", + "mask": "", + "mac": "782c-2958-e5bd", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/12", + "description": "GigabitEthernet1/0/12 Interface", + "ip": "", + "mask": "", + "mac": "782c-2958-e5be", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/13", + "description": "GigabitEthernet1/0/13 Interface", + "ip": "", + "mask": "", + "mac": "782c-2958-e5bf", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/14", + "description": "GigabitEthernet1/0/14 Interface", + "ip": "", + "mask": "", + "mac": "782c-2958-e5c0", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/15", + "description": "To BJ Core Switch", + "ip": "", + "mask": "", + "mac": "782c-2958-e5c1", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/16", + "description": "GigabitEthernet1/0/16 Interface", + "ip": "", + "mask": "", + "mac": "782c-2958-e5c2", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/17", + "description": "GigabitEthernet1/0/17 Interface", + "ip": "", + "mask": "", + "mac": "782c-2958-e5c3", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/18", + "description": "GigabitEthernet1/0/18 Interface", + "ip": "", + "mask": "", + "mac": "782c-2958-e5c4", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/19", + "description": "GigabitEthernet1/0/19 Interface", + "ip": "", + "mask": "", + "mac": "782c-2958-e5c5", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/20", + "description": "GigabitEthernet1/0/20 Interface", + "ip": "", + "mask": "", + "mac": "782c-2958-e5c6", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/21", + "description": "GigabitEthernet1/0/21 Interface", + "ip": "", + "mask": "", + "mac": "782c-2958-e5c7", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/22", + "description": "GigabitEthernet1/0/22 Interface", + "ip": "", + "mask": "", + "mac": "782c-2958-e5c8", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/23", + "description": "InLoopBack0 Interface", + "ip": "123.127.41.253", + "mask": "255.255.255.240", + "mac": "782c-2958-e5c9", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "NULL0", + "description": "Vlan-interface99 Interface", + "ip": "172.16.99.1", + "mask": "255.255.255.0", + "mac": "782c-2958-e5ae", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + } + ], + "neighbors": [ + { + "local_interface": "GigabitEthernet1/0/15", + "remote_device": "642f-c7e0-0333", + "remote_ip": "", + "remote_mac": "642f-c7e0-0333", + "remote_interface": "GigabitEthernet1/0/48", + "protocol": "LLDP" + }, + { + "local_interface": "GigabitEthernet1/0/23", + "remote_device": "4c09-b4fe-b770", + "remote_ip": "", + "remote_mac": "4c09-b4fe-b770", + "remote_interface": "gei-0/2/0", + "protocol": "LLDP" + } + ], + "mac_addresses": [ + "782c-2958-e5b5", + "782c-2958-e5b7", + "782c-2958-e5bb", + "782c-2958-e5c5", + "782c-2958-e5c6", + "782c-2958-e5c9", + "782c-2958-e5b3", + "782c-2958-e5b4", + "782c-2958-e5b8", + "782c-2958-e5bc", + "782c-2958-e5bd", + "782c-2958-e5bf", + "782c-2958-e5c7", + "782c-2958-e5c8", + "782c-2958-e5b9", + "782c-2958-e5ba", + "782c-2958-e5be", + "782c-2958-e5c1", + "782c-2958-e5c2", + "782c-2958-e5c3", + "782c-2958-e5c4", + "782c-2958-e5ae", + "782c-2958-e5b2", + "782c-2958-e5b6", + "782c-2958-e5c0" + ], + "last_scanned": "2026-04-26T05:03:43.7955184+08:00", + "scan_status": "success" + }, + { + "id": "172.16.8.6", + "ip": "172.16.8.6", + "type": "h3c", + "hostname": "BJ-Access06", + "os_version": "H3C Comware Software, Version 7.1.070, Release 6312P01", + "uptime": "16 weeks,", + "interfaces": [ + { + "name": "FortyGigE1/0/53", + "description": "FortyGigE1/0/53 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0391", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "FortyGigE1/0/54", + "description": "FortyGigE1/0/54 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0396", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/1", + "description": "GigabitEthernet1/0/1 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-035d", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/2", + "description": "GigabitEthernet1/0/2 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-035e", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/3", + "description": "GigabitEthernet1/0/3 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-035f", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/4", + "description": "GigabitEthernet1/0/4 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0360", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/5", + "description": "GigabitEthernet1/0/5 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0361", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/6", + "description": "GigabitEthernet1/0/6 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0362", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/7", + "description": "GigabitEthernet1/0/7 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0363", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/8", + "description": "GigabitEthernet1/0/8 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0364", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/9", + "description": "GigabitEthernet1/0/9 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0365", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/10", + "description": "GigabitEthernet1/0/10 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0366", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/11", + "description": "GigabitEthernet1/0/11 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0367", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/12", + "description": "GigabitEthernet1/0/12 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0368", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/13", + "description": "GigabitEthernet1/0/13 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0369", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/14", + "description": "GigabitEthernet1/0/14 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-036a", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/15", + "description": "GigabitEthernet1/0/15 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-036b", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/16", + "description": "GigabitEthernet1/0/16 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-036c", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/17", + "description": "GigabitEthernet1/0/17 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-036d", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/18", + "description": "GigabitEthernet1/0/18 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-036e", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/19", + "description": "GigabitEthernet1/0/19 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-036f", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/20", + "description": "GigabitEthernet1/0/20 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0370", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/21", + "description": "GigabitEthernet1/0/21 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0371", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/22", + "description": "GigabitEthernet1/0/22 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0372", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/23", + "description": "GigabitEthernet1/0/23 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0373", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/24", + "description": "GigabitEthernet1/0/24 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0374", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/25", + "description": "GigabitEthernet1/0/25 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0375", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/26", + "description": "GigabitEthernet1/0/26 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0376", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/27", + "description": "Video MGT", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0377", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/28", + "description": "GigabitEthernet1/0/28 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0378", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/29", + "description": "GigabitEthernet1/0/29 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0379", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/30", + "description": "GigabitEthernet1/0/30 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-037a", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/31", + "description": "GigabitEthernet1/0/31 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-037b", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/32", + "description": "GigabitEthernet1/0/32 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-037c", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/33", + "description": "GigabitEthernet1/0/33 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-037d", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/34", + "description": "GigabitEthernet1/0/34 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-037e", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/35", + "description": "GigabitEthernet1/0/35 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-037f", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/36", + "description": "GigabitEthernet1/0/36 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0380", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/37", + "description": "GigabitEthernet1/0/37 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0381", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/38", + "description": "GigabitEthernet1/0/38 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0382", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/39", + "description": "GigabitEthernet1/0/39 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0383", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/40", + "description": "GigabitEthernet1/0/40 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0384", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/41", + "description": "GigabitEthernet1/0/41 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0385", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/42", + "description": "GigabitEthernet1/0/42 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0386", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/43", + "description": "GigabitEthernet1/0/43 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0387", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/44", + "description": "GigabitEthernet1/0/44 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0388", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/45", + "description": "GigabitEthernet1/0/45 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0389", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/46", + "description": "GigabitEthernet1/0/46 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-038a", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/47", + "description": "GigabitEthernet1/0/47 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-038b", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/48", + "description": "GigabitEthernet1/0/48 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-038c", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/49", + "description": "GigabitEthernet1/0/49 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-038d", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "GigabitEthernet1/0/50", + "description": "M-GigabitEthernet0/0/0 Interface", + "ip": "", + "mask": "", + "mac": "642f-c7e0-0337", + "status": "down", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "NULL0", + "description": "Register-Tunnel0 Interface", + "ip": "UP", + "mask": "", + "mac": "", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "Ten-GigabitEthernet1/0/51", + "description": "BJESXI91", + "ip": "", + "mask": "", + "mac": "642f-c7e0-038f", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + }, + { + "name": "Ten-GigabitEthernet1/0/52", + "description": "Vlan-interface16 Interface", + "ip": "10.16.16.6", + "mask": "255.255.252.0", + "mac": "642f-c7e0-034d", + "status": "up", + "speed": "", + "duplex": "", + "mtu": 0, + "in_bytes": 0, + "out_bytes": 0, + "in_packets": 0, + "out_packets": 0 + } + ], + "neighbors": [ + { + "local_interface": "GigabitEthernet1/0/46", + "remote_device": "c8a7-768a-694b", + "remote_ip": "", + "remote_mac": "c8a7-768a-694b", + "remote_interface": "GigabitEthernet0/0/1", + "protocol": "LLDP" + }, + { + "local_interface": "GigabitEthernet1/0/47", + "remote_device": "743a-2047-38d6", + "remote_ip": "", + "remote_mac": "743a-2047-38d6", + "remote_interface": "GigabitEthernet1/0/16", + "protocol": "LLDP" + }, + { + "local_interface": "GigabitEthernet1/0/48", + "remote_device": "782c-2958-e5ae", + "remote_ip": "", + "remote_mac": "782c-2958-e5ae", + "remote_interface": "GigabitEthernet1/0/15", + "protocol": "LLDP" + }, + { + "local_interface": "Ten-GigabitEthernet1/0/51", + "remote_device": "642f-c7df-f83b", + "remote_ip": "", + "remote_mac": "642f-c7df-f83b", + "remote_interface": "Ten-GigabitEthernet1/0/52", + "protocol": "LLDP" + } + ], + "mac_addresses": [ + "642f-c7e0-0378", + "642f-c7e0-037b", + "642f-c7e0-0383", + "642f-c7e0-038b", + "642f-c7e0-0391", + "642f-c7e0-0362", + "642f-c7e0-0368", + "642f-c7e0-0386", + "642f-c7e0-0337", + "642f-c7e0-036f", + "642f-c7e0-0370", + "642f-c7e0-0375", + "642f-c7e0-037a", + "642f-c7e0-0380", + "642f-c7e0-0384", + "642f-c7e0-0387", + "642f-c7e0-035f", + "642f-c7e0-0360", + "642f-c7e0-0363", + "642f-c7e0-0365", + "642f-c7e0-036a", + "642f-c7e0-036b", + "642f-c7e0-036c", + "642f-c7e0-036e", + "642f-c7e0-035d", + "642f-c7e0-0372", + "642f-c7e0-0376", + "642f-c7e0-0377", + "642f-c7e0-0379", + "642f-c7e0-037f", + "642f-c7e0-0388", + "642f-c7e0-0389", + "642f-c7e0-0396", + "642f-c7e0-0361", + "642f-c7e0-0369", + "642f-c7e0-038c", + "642f-c7e0-038f", + "642f-c7e0-0373", + "642f-c7e0-0374", + "642f-c7e0-037c", + "642f-c7e0-038a", + "642f-c7e0-038d", + "642f-c7e0-034d", + "642f-c7e0-0367", + "642f-c7e0-0371", + "642f-c7e0-037d", + "642f-c7e0-037e", + "642f-c7e0-0381", + "642f-c7e0-0382", + "642f-c7e0-0385", + "642f-c7e0-035e", + "642f-c7e0-0364", + "642f-c7e0-0366", + "642f-c7e0-036d" + ], + "last_scanned": "2026-04-26T05:04:41.0462642+08:00", + "scan_status": "success" + } +] \ No newline at end of file diff --git a/internal/device/h3c.go b/internal/device/h3c.go index fe592a1..c84b849 100644 --- a/internal/device/h3c.go +++ b/internal/device/h3c.go @@ -16,23 +16,24 @@ type H3CParser struct { // GetCommands 获取H3C设备命令列表 func (p *H3CParser) GetCommands() []string { return []string{ - "screen-length disable", // 禁用分页(H3C/华为设备必需) + "screen-length disable", // 禁用分页(H3C/华为设备必需) "display version", "display interface", - "display interface brief", // 接口简要信息(包含VLAN和物理接口状态) - "display lldp neighbor-information verbose", // LLDP邻居详细信息(包含System name和Management address) + "display interface brief", // 接口简要信息(包含VLAN和物理接口状态) + "display lldp neighbor-information", // 使用非verbose格式(v1.0.0验证可行) + "display arp", // ARP表用于解析邻居IP } } // Parse 解析H3C设备输出 func (p *H3CParser) Parse(device *models.Device, outputs []string) error { - if len(outputs) < 5 { + if len(outputs) < 6 { return fmt.Errorf("insufficient command outputs") } // outputs[0] 是 screen-length disable 的输出(通常为空) - p.parseVersion(device, outputs[1]) // outputs[1] 是 display version - + p.parseVersion(device, outputs[1]) // outputs[1] 是 display version + // outputs[2] 是 display interface fmt.Printf("[H3C DEBUG] display interface output length: %d\n", len(outputs[2])) if len(outputs[2]) > 0 { @@ -45,17 +46,17 @@ func (p *H3CParser) Parse(device *models.Device, outputs []string) error { } else { fmt.Printf("[H3C DEBUG] display interface output is EMPTY!\n") } - + if outputs[2] == "" { fmt.Printf("Warning: 'display interface' output is empty for device %s\n", device.IP) } else { // outputs[3] 是 display interface brief device.Interfaces = p.parseInterfaces(outputs[2], outputs[3]) if len(device.Interfaces) == 0 { - fmt.Printf("Warning: parsed 0 interfaces for device %s (output length: %d)\n", + fmt.Printf("Warning: parsed 0 interfaces for device %s (output length: %d)\n", device.IP, len(outputs[2])) } - + // 收集所有接口的MAC地址(用于邻居匹配) macSet := make(map[string]bool) for _, iface := range device.Interfaces { @@ -70,12 +71,24 @@ func (p *H3CParser) Parse(device *models.Device, outputs []string) error { } fmt.Printf(" Collected %d unique MAC addresses for device %s\n", len(macSet), device.IP) } - + // outputs[4] 是 display lldp neighbor-information - - // 解析LLDP邻居 - device.Neighbors = p.parseNeighbors(outputs[4], nil) - + // outputs[5] 是 display arp + + // 解析ARP表 + fmt.Printf("[H3C ARP DEBUG] Raw ARP output length: %d bytes\n", len(outputs[5])) + if len(outputs[5]) > 0 && len(outputs[5]) <= 1000 { + fmt.Printf("[H3C ARP DEBUG] Raw ARP output:\n%s\n", outputs[5]) + } else if len(outputs[5]) > 1000 { + fmt.Printf("[H3C ARP DEBUG] Raw ARP output (first 1000 bytes):\n%s\n", outputs[5][:1000]) + } + + arpTable := p.parseARPTable(outputs[5]) + fmt.Printf("[H3C ARP DEBUG] Parsed ARP table: %d entries\n", len(arpTable)) + + // 解析LLDP邻居(传入ARP表) + device.Neighbors = p.parseNeighbors(outputs[4], arpTable) + fmt.Printf("Device %s: %d interfaces, %d neighbors\n", device.IP, len(device.Interfaces), len(device.Neighbors)) @@ -197,12 +210,12 @@ func (p *H3CParser) parseInterfaces(interfaceOutput, briefOutput string) []model func cidrToMask(cidr string) string { var mask int fmt.Sscanf(cidr, "%d", &mask) - + s := uint32(0) for i := 0; i < mask; i++ { s |= (1 << (31 - uint(i))) } - + return fmt.Sprintf("%d.%d.%d.%d", (s>>24)&0xFF, (s>>16)&0xFF, @@ -217,10 +230,10 @@ func (p *H3CParser) parseARPTable(output string) map[string]string { for _, line := range lines { // 跳过空行和标题行 - if strings.TrimSpace(line) == "" || - strings.Contains(line, "Type:") || - strings.Contains(line, "------") || - strings.Contains(line, "IP address") { + if strings.TrimSpace(line) == "" || + strings.Contains(line, "Type:") || + strings.Contains(line, "------") || + strings.Contains(line, "IP address") { continue } @@ -230,10 +243,14 @@ func (p *H3CParser) parseARPTable(output string) map[string]string { if len(fields) >= 2 { ip := fields[0] mac := strings.ToLower(fields[1]) - + + // 标准化MAC地址(统一为aabb-ccdd-eeff格式) + mac = normalizeMACFormat(mac) + // 验证是有效的IP和MAC if isValidIP(ip) && isValidMAC(mac) { macToIP[mac] = ip + fmt.Printf("[H3C ARP DEBUG] Added MAC->IP: %s -> %s\n", mac, ip) } } } @@ -241,6 +258,24 @@ func (p *H3CParser) parseARPTable(output string) map[string]string { return macToIP } +// normalizeMACFormat 标准化MAC地址格式(统一为aabb-ccdd-eeff) +func normalizeMACFormat(mac string) string { + // 去除所有分隔符 + clean := "" + for _, c := range mac { + if c != '-' && c != ':' && c != '.' { + clean += string(c) + } + } + + // 重新格式化为aabb-ccdd-eeff + if len(clean) == 12 { + return fmt.Sprintf("%s-%s-%s", clean[0:4], clean[4:8], clean[8:12]) + } + + return mac +} + func (p *H3CParser) parseInterfaceBrief(output string) map[string]models.Interface { interfaces := make(map[string]models.Interface) lines := strings.Split(output, "\n") @@ -276,7 +311,7 @@ func (p *H3CParser) parseNeighbors(output string, arpTable map[string]string) [] if currentNeighbor != nil && currentNeighbor.RemoteInterface != "" { neighbors = append(neighbors, *currentNeighbor) } - + matches := portRegex.FindStringSubmatch(line) localInterface = matches[1] currentNeighbor = &models.Neighbor{ @@ -287,24 +322,7 @@ func (p *H3CParser) parseNeighbors(output string, arpTable map[string]string) [] } if currentNeighbor != nil { - // 提取 ChassisID (MAC地址) - // Verbose格式: Chassis ID: 642f-c7e0-0333 - if strings.Contains(line, "Chassis ID:") && !strings.Contains(line, "ChassisID/subtype") { - parts := strings.SplitN(line, ":", 2) - if len(parts) == 2 { - mac := strings.TrimSpace(strings.ToLower(parts[1])) - if isValidMAC(mac) { - currentNeighbor.RemoteMAC = mac - // 如果还没有RemoteDevice,先使用MAC作为占位符(后续可能被System name覆盖) - if currentNeighbor.RemoteDevice == "" { - currentNeighbor.RemoteDevice = mac - } - fmt.Printf(" [LLDP] Parsed neighbor MAC (verbose): %s\n", mac) - } - } - } - - // 非verbose格式: ChassisID/subtype: a4bb-6de2-62cd/MAC address + // 提取 ChassisID (MAC地址) - 非verbose格式 if strings.Contains(line, "ChassisID/subtype") { parts := strings.SplitN(line, ":", 2) if len(parts) == 2 { @@ -312,61 +330,33 @@ func (p *H3CParser) parseNeighbors(output string, arpTable map[string]string) [] // 格式: a4bb-6de2-62cd/MAC address if macParts := strings.Split(value, "/"); len(macParts) > 0 { mac := strings.TrimSpace(strings.ToLower(macParts[0])) + // 标准化MAC地址格式 + mac = normalizeMACFormat(mac) + // 保存MAC地址 currentNeighbor.RemoteMAC = mac - if currentNeighbor.RemoteDevice == "" { - currentNeighbor.RemoteDevice = mac + fmt.Printf(" Parsed neighbor MAC: %s (from line: %s)\n", mac, line) + + // 使用MAC地址作为设备标识 + currentNeighbor.RemoteDevice = mac + + // 通过ARP表查找IP地址 + if arpTable != nil { + if ip, found := arpTable[mac]; found { + currentNeighbor.RemoteIP = ip + fmt.Printf(" ✓ Found IP for MAC %s: %s\n", mac, ip) + } else { + fmt.Printf(" ✗ No IP found for MAC %s in ARP table\n", mac) + } } - fmt.Printf(" [LLDP] Parsed neighbor MAC: %s\n", mac) - } - } - } - - // 提取 System name (verbose格式) - if strings.Contains(line, "System name:") { - parts := strings.SplitN(line, ":", 2) - if len(parts) == 2 { - systemName := strings.TrimSpace(parts[1]) - if systemName != "" { - // System name 是最可靠的匹配方式,覆盖之前的MAC地址占位符 - currentNeighbor.RemoteDevice = systemName - fmt.Printf(" [LLDP] Parsed neighbor System name: %s\n", systemName) - } - } - } - - // 提取 Management address (verbose格式) - if strings.Contains(line, "Management address:") { - parts := strings.SplitN(line, ":", 2) - if len(parts) == 2 { - mgmtAddr := strings.TrimSpace(parts[1]) - if isValidIP(mgmtAddr) { - // 如果还没有RemoteIP,使用Management address - if currentNeighbor.RemoteIP == "" { - currentNeighbor.RemoteIP = mgmtAddr - fmt.Printf(" [LLDP] Parsed neighbor Management address: %s\n", mgmtAddr) - } - } - } - } - - // 提取 PortID (远程接口) - // Verbose格式: Port ID: GigabitEthernet1/0/48 或 Port ID: a4bb-6de2-62cd (MAC地址) - if strings.Contains(line, "Port ID:") && !strings.Contains(line, "PortID/subtype") && !strings.Contains(line, "Port ID type") { - parts := strings.SplitN(line, ":", 2) - if len(parts) == 2 { - portID := strings.TrimSpace(parts[1]) - // 检查Port ID是否是MAC地址(格式: a4bb-6de2-62cd) - if isValidMAC(portID) { - // Port ID是MAC地址,不赋值给RemoteInterface - fmt.Printf(" [LLDP] Port ID is MAC address (not interface): %s\n", portID) } else { - // Port ID是接口名 - currentNeighbor.RemoteInterface = portID + fmt.Printf(" WARNING: Could not parse MAC from ChassisID line: %s\n", line) } + } else { + fmt.Printf(" WARNING: ChassisID line has no colon: %s\n", line) } } - - // 非verbose格式: PortID/subtype: GigabitEthernet0/0/1/Interface name + + // 提取 PortID (远程接口) - 非verbose格式 if strings.Contains(line, "PortID/subtype") { parts := strings.SplitN(line, ":", 2) if len(parts) == 2 { @@ -375,20 +365,15 @@ func (p *H3CParser) parseNeighbors(output string, arpTable map[string]string) [] if portParts := strings.Split(value, "/"); len(portParts) >= 3 { // 取前3部分作为接口名: GigabitEthernet0/0/1 currentNeighbor.RemoteInterface = strings.Join(portParts[:3], "/") + fmt.Printf(" Parsed neighbor interface: %s\n", currentNeighbor.RemoteInterface) } } } } } - // 添加最后一个邻居(修改:只要有RemoteDevice或RemoteInterface就添加) - if currentNeighbor != nil && (currentNeighbor.RemoteDevice != "" || currentNeighbor.RemoteInterface != "") { - // 如果Port ID是MAC地址而不是接口名,将MAC赋值给RemoteInterface(如果为空) - if currentNeighbor.RemoteInterface == "" && currentNeighbor.RemoteMAC != "" { - // 检查Port ID是否是MAC地址(在解析过程中可能已经将MAC作为Port ID) - // 这种情况发生在Port ID type为MAC address时 - fmt.Printf(" [LLDP] Neighbor has no interface name, using MAC as identifier: %s\n", currentNeighbor.RemoteMAC) - } + // 添加最后一个邻居 + if currentNeighbor != nil && currentNeighbor.RemoteInterface != "" { neighbors = append(neighbors, *currentNeighbor) } diff --git a/internal/topology/builder.go b/internal/topology/builder.go index aa5c59e..6de1473 100644 --- a/internal/topology/builder.go +++ b/internal/topology/builder.go @@ -2,8 +2,8 @@ package topology import ( "fmt" - "strings" "network-topology-discovery/pkg/models" + "strings" ) // Builder 拓扑构建器 @@ -41,7 +41,7 @@ func (b *Builder) Build() models.TopologyGraph { if hostname == "" { hostname = device.IP } - + node := models.TopologyNode{ ID: device.IP, IP: device.IP, @@ -53,9 +53,16 @@ func (b *Builder) Build() models.TopologyGraph { graph.Nodes = append(graph.Nodes, node) } + fmt.Printf("\n========== TOPOLOGY BUILD ===========\n") + fmt.Printf("Total devices: %d\n", len(b.devices)) + fmt.Printf("Total nodes created: %d\n", len(graph.Nodes)) + for _, node := range graph.Nodes { + fmt.Printf(" Node: %s (%s) - Type: %s\n", node.ID, node.Hostname, node.Type) + } + // 构建边(基于邻居信息) edgeMap := make(map[string]bool) // 用于去重 - + // 打印所有设备的MAC地址,用于调试 fmt.Println("\n========== MAC Address Database ==========") for _, d := range b.devices { @@ -72,21 +79,24 @@ func (b *Builder) Build() models.TopologyGraph { } } fmt.Println("==========================================\n") - + for _, device := range b.devices { fmt.Printf("Building edges for device %s: %d neighbors, %d MAC addresses\n", device.IP, len(device.Neighbors), len(device.MACAddresses)) - + for _, neighbor := range device.Neighbors { fmt.Printf(" Processing neighbor on %s: RemoteMAC=%s, RemoteDevice=%s, RemoteIP=%s\n", neighbor.LocalInterface, neighbor.RemoteMAC, neighbor.RemoteDevice, neighbor.RemoteIP) - - // 尝试匹配邻居设备 + + // 尝试匹配邻居设备 - 多重策略 targetIP := neighbor.RemoteIP matchMethod := "IP" - - // 如果没有IP,尝试通过设备名匹配 - if targetIP == "" && neighbor.RemoteDevice != "" { + + // 策略1: 如果已有IP,直接使用 + if targetIP != "" { + fmt.Printf(" ✓ Using direct IP: %s\n", targetIP) + } else if neighbor.RemoteDevice != "" { + // 策略2: 尝试通过主机名匹配 fmt.Printf(" Trying hostname match: %s\n", neighbor.RemoteDevice) for _, d := range b.devices { if d.Hostname == neighbor.RemoteDevice { @@ -97,8 +107,8 @@ func (b *Builder) Build() models.TopologyGraph { } } } - - // 如果还是没有,尝试通过MAC地址匹配(新增) + + // 策略3: 通过MAC地址匹配 if targetIP == "" && neighbor.RemoteMAC != "" { fmt.Printf(" Trying MAC match: %s\n", neighbor.RemoteMAC) for _, d := range b.devices { @@ -106,11 +116,11 @@ func (b *Builder) Build() models.TopologyGraph { // 标准化MAC地址进行比较(去除分隔符,转小写) normalizedNeighborMAC := normalizeMAC(neighbor.RemoteMAC) normalizedDeviceMAC := normalizeMAC(mac) - + if normalizedNeighborMAC == normalizedDeviceMAC { targetIP = d.IP matchMethod = "MAC" - fmt.Printf(" ✓ Matched by MAC: %s (device) == %s (neighbor) -> %s\n", + fmt.Printf(" ✓ Matched by MAC: %s (device) == %s (neighbor) -> %s\n", mac, neighbor.RemoteMAC, d.IP) break } @@ -121,11 +131,111 @@ func (b *Builder) Build() models.TopologyGraph { } } + // 策略4: 通过本地接口IP网段匹配(新增) if targetIP == "" { - fmt.Printf(" ✗ Could not match neighbor on %s\n", neighbor.LocalInterface) + // 查找本地接口的IP地址 + localInterfaceIP := "" + for _, iface := range device.Interfaces { + if iface.Name == neighbor.LocalInterface && iface.IP != "" { + localInterfaceIP = iface.IP + break + } + } + + if localInterfaceIP != "" { + fmt.Printf(" Trying subnet match: local interface %s has IP %s\n", + neighbor.LocalInterface, localInterfaceIP) + + // 计算本地接口的网段 + localSubnet := getSubnet(localInterfaceIP) + + // 查找其他设备中是否有接口在同一网段 + for _, d := range b.devices { + if d.IP == device.IP { + continue // 跳过自己 + } + + // 检查设备的管理IP是否在同一网段 + if getSubnet(d.IP) == localSubnet { + targetIP = d.IP + matchMethod = "subnet(management IP)" + fmt.Printf(" ✓ Matched by subnet: %s in %s\n", d.IP, localSubnet) + break + } + + // 检查设备的所有接口是否在同一网段 + for _, iface := range d.Interfaces { + if iface.IP != "" && getSubnet(iface.IP) == localSubnet { + targetIP = d.IP + matchMethod = fmt.Sprintf("subnet(interface %s)", iface.Name) + fmt.Printf(" ✓ Matched by subnet: %s (%s) in %s\n", + d.IP, iface.Name, localSubnet) + break + } + } + if targetIP != "" { + break + } + } + } else { + // 策略4b: 本地接口没有IP,尝试使用设备管理IP进行子网匹配(新增) + // 注意:只有当该网段只有2台设备时才使用此策略(点对点连接) + fmt.Printf(" Trying subnet match with management IP: %s\n", device.IP) + localSubnet := getSubnet(device.IP) + + // 统计在该网段的设备数量 + var devicesInSubnet []string + for _, d := range b.devices { + if d.IP != device.IP && getSubnet(d.IP) == localSubnet { + devicesInSubnet = append(devicesInSubnet, d.IP) + } + } + + // 只有当网段中恰好有1台其他设备时才匹配(点对点) + if len(devicesInSubnet) == 1 { + targetIP = devicesInSubnet[0] + matchMethod = "subnet(management IP both sides)" + fmt.Printf(" ✓ Matched by management subnet: %s in %s (only device in subnet)\n", targetIP, localSubnet) + } else if len(devicesInSubnet) > 1 { + fmt.Printf(" ✗ Skipping subnet match: %d devices in subnet %s (ambiguous)\n", len(devicesInSubnet)+1, localSubnet) + } + } + } + + // 策略5: 通过接口描述匹配(新增) + if targetIP == "" { + // 查找本地接口的描述,看是否包含其他设备的IP或主机名 + for _, iface := range device.Interfaces { + if iface.Name == neighbor.LocalInterface && iface.Description != "" { + desc := strings.ToLower(iface.Description) + fmt.Printf(" Trying description match: %s\n", iface.Description) + + for _, d := range b.devices { + if d.IP == device.IP { + continue + } + + // 检查描述中是否包含目标设备的IP或主机名 + if strings.Contains(desc, strings.ToLower(d.IP)) || + (d.Hostname != "" && strings.Contains(desc, strings.ToLower(d.Hostname))) { + targetIP = d.IP + matchMethod = "description" + fmt.Printf(" ✓ Matched by description: %s\n", iface.Description) + break + } + } + } + if targetIP != "" { + break + } + } + } + + if targetIP == "" { + fmt.Printf(" ✗ Could not match neighbor on %s (MAC: %s)\n", neighbor.LocalInterface, neighbor.RemoteMAC) continue } - + fmt.Printf(" ✓ Creating edge: %s (%s) -> %s via %s, matched by %s\n", device.IP, neighbor.LocalInterface, targetIP, neighbor.RemoteInterface, matchMethod) @@ -152,6 +262,15 @@ func (b *Builder) Build() models.TopologyGraph { } } + fmt.Printf("\nTotal edges created: %d\n", len(graph.Edges)) + for _, edge := range graph.Edges { + fmt.Printf(" Edge: %s (%s) -> %s (%s) [%s]\n", + edge.Source, edge.SourceInterface, + edge.Target, edge.TargetInterface, + edge.Protocol) + } + fmt.Println("========================================\n") + return graph } @@ -168,6 +287,16 @@ func normalizeMAC(mac string) string { return strings.ToLower(result) } +// getSubnet 获取IP地址的C类网段(简化版,适用于/24网络) +func getSubnet(ip string) string { + parts := strings.Split(ip, ".") + if len(parts) == 4 { + // 返回前3段作为网段,例如: 172.16.8.0/24 -> "172.16.8" + return fmt.Sprintf("%s.%s.%s", parts[0], parts[1], parts[2]) + } + return ip +} + // getDeviceIcon 获取设备图标 func getDeviceIcon(deviceType models.DeviceType) string { switch deviceType {