Add network scan page (arp-scan)

New /scan page lists all active devices on the subnet (ARP scan):
- 静态绑定: matches a host declaration
- 动态分配: matches a dhcpd.leases entry
- 未知 / 外部: nothing matches (manually configured or from other DHCP server)

Click '转为静态绑定' to convert a discovered device to a static host binding.

Also includes:
- arp-scan wrapper in dhcp_ops.py (get_local_network, arp_scan, classify_devices)
- /scan route with optional auto-refresh every 30s
- README updated with arp-scan install step + new feature bullet
This commit is contained in:
DHCP Service Bot
2026-07-09 17:37:50 +08:00
parent 90736253b1
commit 21e3d61871
5 changed files with 230 additions and 3 deletions
+1
View File
@@ -16,6 +16,7 @@
<a href="{{ url_for('subnet_list') }}" class="{% if request.endpoint in ['subnet_list','subnet_new','subnet_edit'] %}active{% endif %}">子网</a>
<a href="{{ url_for('host_list') }}" class="{% if request.endpoint in ['host_list','host_new','host_edit'] %}active{% endif %}">静态绑定</a>
<a href="{{ url_for('lease_list') }}" class="{% if request.endpoint=='lease_list' %}active{% endif %}">租约</a>
<a href="{{ url_for('scan') }}" class="{% if request.endpoint=='scan' %}active{% endif %}">扫描</a>
<a href="{{ url_for('config_view') }}" class="{% if request.endpoint=='config_view' %}active{% endif %}">服务配置</a>
{% if is_admin %}
<a href="{{ url_for('log_list') }}" class="{% if request.endpoint=='log_list' %}active{% endif %}">日志</a>