The mock devices have been updated to provide a realistic multi-vendor network environment for testing the neighbor mapper application. This topology includes devices from Cisco, Extreme Networks, Palo Alto Networks, Fortinet, Arista, and Juniper.
CORE-NX-01 (Cisco Nexus)
192.168.1.1
|
+----------------+------------------+------------------+
| | | |
DIST-EXTREME-01 DIST-ARISTA-01 FW-PALOALTO-01
192.168.1.10 192.168.1.11 192.168.1.5
(Extreme X670) (Arista DCS) (PA-3220)
| |
| +---------------+
| |
+----+----+ ACCESS-CISCO-01
| | 192.168.1.21
ACCESS- FW-FORTINET-01 (Cisco 2960X)
JUNIPER-01 192.168.1.6
192.168.1.20 (FortiGate-100F)
(Juniper
EX4300)
|
|
FW-PALOALTO-03
192.168.1.8
(PA-440)
| IP Address | Hostname | Vendor | Platform | Device Type |
|---|---|---|---|---|
| 192.168.1.1 | CORE-NX-01 | Cisco | Nexus9000 N9K-C93180YC-EX | cisco_nxos |
| IP Address | Hostname | Vendor | Platform | Device Type |
|---|---|---|---|---|
| 192.168.1.10 | DIST-EXTREME-01 | Extreme Networks | Summit X670-G2 | extreme |
| 192.168.1.11 | DIST-ARISTA-01 | Arista | DCS-7280SR-48C6 | arista_eos |
| IP Address | Hostname | Vendor | Platform | Device Type |
|---|---|---|---|---|
| 192.168.1.5 | FW-PALOALTO-01 | Palo Alto Networks | PA-3220 | paloalto_panos |
| 192.168.1.6 | FW-FORTINET-01 | Fortinet | FortiGate-100F | fortinet |
| 192.168.1.7 | FW-PALOALTO-02 | Palo Alto Networks | PA-850 | paloalto_panos |
| 192.168.1.8 | FW-PALOALTO-03 | Palo Alto Networks | PA-440 | paloalto_panos |
| IP Address | Hostname | Vendor | Platform | Device Type |
|---|---|---|---|---|
| 192.168.1.20 | ACCESS-JUNIPER-01 | Juniper | EX4300-48P | juniper_junos |
| 192.168.1.21 | ACCESS-CISCO-01 | Cisco | WS-C2960X-48 | cisco_ios |
| 192.168.1.30 | EDGE-EXTREME-01 | Extreme | Summit X460-G2 | extreme |
| IP Address | Hostname | Type |
|---|---|---|
| 192.168.1.100 | SEP001122334455 | Cisco IP Phone |
| 192.168.1.50 | AP-OFFICE-01 | Cisco Access Point |
# Start the application
docker-compose up -d
# Open browser to http://localhost:8000
# Enter these details:
Device IP: 192.168.1.1
Device Type: cisco_nxos (auto-detected from "cisco_ios" is fine too)
Username: demo
Password: demo
Discovery Depth: 3Device IP: 192.168.1.10
Device Type: extreme
Username: demo
Password: demo
Device IP: 192.168.1.5
Device Type: paloalto_panos
Username: demo
Password: demo
Device IP: 192.168.1.6
Device Type: fortinet
Username: demo
Password: demo
Device IP: 192.168.1.11
Device Type: arista_eos
Username: demo
Password: demo
Device IP: 192.168.1.20
Device Type: juniper_junos
Username: demo
Password: demo
When starting from CORE-NX-01 (192.168.1.1) with depth 3, you should see:
CORE-NX-01 (192.168.1.1)
├─[LLDP] Eth1/1 ↔ 1:1 (192.168.1.10)
│ DIST-EXTREME-01 (192.168.1.10)
│ ├─[LLDP] 1:10 ↔ ge-0/0/10 (192.168.1.20)
│ │ ACCESS-JUNIPER-01 (192.168.1.20)
│ │ └─[LLDP] ge-0/0/20 ↔ ethernet1/3 (192.168.1.8)
│ │ FW-PALOALTO-03 (192.168.1.8)
│ └─[LLDP] 1:15 ↔ port1 (192.168.1.6)
│ FW-FORTINET-01 (192.168.1.6)
├─[LLDP] Eth1/2 ↔ Ethernet1 (192.168.1.11)
│ DIST-ARISTA-01 (192.168.1.11)
│ ├─[LLDP] Ethernet10 ↔ ethernet1/2 (192.168.1.7)
│ │ FW-PALOALTO-02 (192.168.1.7)
│ └─[LLDP] Ethernet20 ↔ Gi0/1 (192.168.1.21)
│ ACCESS-CISCO-01 (192.168.1.21)
└─[LLDP] Eth1/10 ↔ ethernet1/1 (192.168.1.5)
FW-PALOALTO-01 (192.168.1.5)
- Cisco: Nexus (NX-OS), Catalyst (IOS)
- Extreme Networks: Summit switches (ExtremeXOS)
- Palo Alto Networks: PA-Series firewalls (PAN-OS)
- Fortinet: FortiGate firewalls (FortiOS)
- Arista: DCS switches (EOS)
- Juniper: EX switches (JunOS)
All non-Cisco devices use LLDP exclusively, which is more common in multi-vendor environments. This tests the LLDP parsing capabilities thoroughly.
The platform strings are designed to trigger the correct device type detection based on patterns in config/device_type_patterns.yaml.
The firewalls report as Routers (R), while switches report as Bridges/Switches (B/S/R), demonstrating the capability-based crawling logic.
Different vendors use different interface naming:
- Cisco: GigabitEthernet, Ethernet
- Extreme: Port 1:1, 1:10 format
- Palo Alto: ethernet1/1 format
- Fortinet: port1 format
- Arista: Ethernet1 format
- Juniper: ge-0/0/10 format
The IP Phone and Access Point are included but should not be crawled (they report capabilities of "Host Phone" and "Trans-Bridge").
- Only Cisco core device (CORE-NX-01) has CDP enabled
- Tests CDP output parsing
- All devices support LLDP (industry standard)
- Primary protocol for multi-vendor environments
- Tests LLDP output parsing across different vendor formats
Test that the application correctly:
- ✅ Detects Extreme Networks devices from LLDP system description
- ✅ Detects Palo Alto Networks devices from platform strings
- ✅ Detects Fortinet devices from platform strings
- ✅ Detects Arista devices from platform strings
- ✅ Detects Juniper devices from platform strings
- ✅ Parses different interface naming conventions
- ✅ Filters non-crawlable devices (phones, APs)
- ✅ Handles LLDP-only environments
- ✅ Correctly maps interface connections across vendors
- ✅ Displays management IP addresses
Check logs/app.log for device type detection results. The log will show:
Detected device type: extreme for platform: Extreme Summit X670-G2
If detection fails, verify that the platform string matches patterns in config/device_type_patterns.yaml.
Ensure you're looking at the right protocol:
- Cisco devices may use CDP or LLDP
- Non-Cisco devices typically use LLDP only
Some paths are 3+ hops deep. Use depth=3 or higher to see the full topology.
To add additional demo devices, edit app/mock_devices.py:
"192.168.1.XX": {
"hostname": "DEVICE-NAME",
"device_type": "netmiko_device_type",
"platform": "vendor platform string",
"cdp_output": "...",
"lldp_output": "..."
}Then update the LLDP/CDP outputs of neighboring devices to include the new device.
For production environments:
- Disable demo mode by using real device IPs
- Ensure real credentials are provided
- Verify network connectivity to all devices
- Check that SSH is enabled and accessible
- Confirm CDP/LLDP is running on devices
The same patterns and detection logic will work with real devices!