Skip to content

Commit db0aa27

Browse files
committed
fix: avoid duplicate devices
1 parent 2a5ce4e commit db0aa27

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

network_scanner/scanner.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,13 +173,18 @@ async def scan_subnet(subnet, mac_prefixes, timeout=3, retry=2):
173173
logger.error(f"Error scanning subnet {subnet}: {e}")
174174
return results
175175

176+
seen = {}
176177
for pkt in answered:
177178
if ARP in pkt and pkt[ARP].op == 2:
179+
ip = pkt[ARP].psrc
180+
if ip in seen:
181+
continue
182+
seen[ip] = True
178183
device = {
179-
'ip': pkt[ARP].psrc,
184+
'ip': ip,
180185
'mac': pkt[ARP].hwsrc,
181186
'vendor': get_mac_vendor(pkt[ARP].hwsrc, mac_prefixes),
182-
'device_name': get_device_name(pkt[ARP].psrc)
187+
'device_name': get_device_name(ip),
183188
}
184189
results.append(device)
185190
return results
@@ -209,6 +214,14 @@ async def worker(subnet):
209214
else:
210215
devices.extend(result)
211216

217+
# Deduplicate by IP in case multiple replies were captured
218+
deduped = {}
219+
for dev in devices:
220+
ip = dev.get('ip')
221+
if ip and ip not in deduped:
222+
deduped[ip] = dev
223+
devices = list(deduped.values())
224+
212225
# Add nodes for each device
213226
for device in devices:
214227
graph.add_node(

0 commit comments

Comments
 (0)