Raw Ethernet and ARP
Send and decode ARP frames directly through the selected interface instead of depending on a populated neighbour cache.
Rust · Ethernet · Nushell
A fast Rust ARP scanner with a Nushell plugin that turns interface inventories and host discoveries into values you can filter, join, and export.
One scanner, two useful front ends.
ipscan keeps a focused CLI while nu_plugin_ipscan makes its JSON output feel native in Nushell.
Try it yourself
A small taste of the real plugin flow.
# Build and register the scanner plugincargo install --path nu-plugin-ipscan --lockedinstalled nu_plugin_ipscanplugin add ~/.cargo/bin/nu_plugin_ipscanadded plugin ipscanplugin use ipscanloaded ipscan# Discover hosts on a local networkipscan --network 192.168.1.0/24 --numericipv4 mac hostname vendor
192.168.1.1 91:10:fb:30:06:04 router.home Example Networks
192.168.1.11 45:2e:99:bc:22:b6 host-a.home
192.168.1.15 bc:03:c2:92:47:df host-b.home Example DevicesCurrent output surface
JSON becomes native Nushell records.
The scanner reports packet counters and discovered hosts, while --list provides a structured inventory for choosing an interface.
| Record | Representative fields | Why it is useful | Status |
|---|---|---|---|
results | ipv4, mac, hostname, vendor | Discovered local hosts | stable |
summary | packet_count, arp_count, duration_ms | Scan health and timing | stable |
interfaces | name, index, mac, ips, is_up | Interface selection and inventory | stable |
exports | JSON, YAML, CSV, plain | Shell pipelines and reports | available |
Designed for practical discovery
Send and decode ARP frames directly through the selected interface instead of depending on a populated neighbour cache.
Filter vendors, select addresses, and export discoveries without re-parsing terminal-oriented tables.
Keep scanning behavior explicit: interface choice, timing, retries, VLANs, DNS, vendor lookup, and output format.
Installation
Works with the Nushell plugin system.
Build the plugin and standalone scanner, register the plugin, then grant the process the packet privileges your platform requires.
See the full installation guide# Build both pieces
cargo install --path nu-plugin-ipscan --locked
cargo build --bin ipscan --locked
# Register in Nushell
plugin add ~/.cargo/bin/nu_plugin_ipscan
plugin use ipscanExamples
Records in, useful answers out.
Keep interfaces that are up and suitable for a scan.
ipscan --list | where is_up and not is_loopback | select name mac ipsUse numeric mode when reverse DNS would add noise.
ipscan --network 192.168.1.0/24 --numericProject the fields needed for an inventory report.
ipscan --network 192.168.1.0/24 --numeric | where vendor != '' | select ipv4 mac vendorKeep structured results for a later report or join.
ipscan --network 192.168.1.0/24 --numeric | to json | save hosts.jsonDocumentation
Learn the install flow, inspect the output schema, and browse the generated Rust API reference.
Open source local-network tooling
Read the plan, try the scanner, and turn local discovery into a repeatable pipeline.
Get started