讲师中心 微信公众号
AI工具推荐 视频效率加速

如何用Python脚本自动检测内网IP地址冲突并发送管理员邮件?

胖明大大_4071

胖明大大_4071

发布时间:2026-10-06 08:58:02

|

266人浏览过

|

来源于php中文网

原创

arping检测IP冲突更可靠,因不依赖ICMP且能捕获多MAC应答;必须从同网段其他主机以root权限运行,如sudo arping -c 2 -w 3 -I eth0 192.168.1.100,返回多条Unicast reply即确认冲突。

如何用python脚本自动检测内网ip地址冲突并发送管理员邮件?

用 arping 检测 IP 冲突比 ping 更可靠

单纯 ping 无法确认冲突——目标主机可能禁 ping,但只要它在线并响应 ARP,arping 就能抓到重复应答。Linux 系统需先安装:sudo apt install iputils-arping(Debian/Ubuntu)或 sudo yum install iputils(RHEL/CentOS)。macOS 不原生支持 arping,建议改用 Python 的 scapy(见下节),Windows 则需 WSL 或弃用此法。

关键点:必须以 root 权限运行 arping,否则发不出 ARP 请求。实操命令示例:

sudo arping -c 2 -w 3 -I eth0 192.168.1.100

其中 -c 2 表示发 2 个请求,-w 3 是总超时 3 秒,-I eth0 指定网卡(务必填对,否则可能走错路由)。如果返回多于 1 行 Reply,就说明有冲突。

常见错误现象:arping: sendto: Permission denied → 忘加 sudo;No response 但实际有设备 → 网卡名写错或目标不在同一广播域。

立即学习“Python免费学习笔记(深入)”;

用 scapy 在任意平台发 ARP 并解析响应

scapy 跨平台、不依赖系统命令,适合封装进脚本。但注意:它默认需要 root(Linux/macOS)或管理员权限(Windows),且部分环境(如某些容器)可能禁用原始套接字。

检测逻辑核心是发送一个 ARP 请求,看是否收到多个 ARP Reply:

from scapy.all import ARP, srp, conf
conf.verb = 0  # 关闭冗余输出
ans, unans = srp(ARP(pdst="192.168.1.100"), timeout=2, retry=1, iface="eth0")
if len(ans) > 1:
    print(f"IP conflict detected: {len(ans)} replies for 192.168.1.100")

要点:

python-script-generator
python-script-generator

快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。

下载
  • pdst 填要检测的 IP,不要用域名
  • iface 必须显式指定,scapy 不总能自动选对网卡
  • retry=1 避免单次丢包误判,但别设太高,否则拖慢扫描
  • 收到的 ans 是 (request, reply) 元组列表,每个 reply 的 reply[ARP].hwsrc 就是 MAC 地址,可用来定位冲突设备

批量扫描内网段时避开网关和保留地址

直接扫整个 /24 段(如 192.168.1.0/24)容易撞上 DHCP 服务器、打印机、IoT 设备等“静默型”设备,它们可能不响应 ARP 但占着 IP。更稳妥的做法是只扫已分配地址池(比如从 DHCP 日志或 CMDB 获取),或至少排除固定地址:

  • 跳过网络地址(.0)、广播地址(.255)
  • 跳过网关(如 192.168.1.1)、DNS 服务器(如 192.168.1.2)
  • 跳过已知管理设备 IP(如带外管理口 192.168.1.254)

Python 中可用 ipaddress 模块生成有效主机地址,并过滤:

import ipaddress
net = ipaddress.ip_network("192.168.1.0/24")
targets = [str(ip) for ip in net.hosts() 
           if ip != ipaddress.ip_address("192.168.1.1") 
           and ip != ipaddress.ip_address("192.168.1.254")]

性能提示:并发太多(如用 threading 扫 254 个 IP)易被交换机限速或丢包,建议控制在 10–20 个并发,或直接串行(内网延迟低,总耗时通常仍<10 秒)。

发邮件前先验证 SMTP 配置并限制告警频率

别让脚本一发现冲突就狂发邮件——可能同一冲突被反复扫到,几分钟内塞爆邮箱。加个简单去重机制:记录最近一次告警的 IP 和时间,1 小时内相同 IP 不再发。

SMTP 发送本身容易失败,常见问题:

  • smtplib.SMTPAuthenticationError → 用户名/密码错,或邮箱未开启 SMTP 服务(如 QQ 邮箱要开“POP3/SMTP 服务”,并用独立密码)
  • smtplib.SMTPSenderRefused → 发件人邮箱没认证,或被服务商拦截(建议用企业邮箱或 Mailgun 等专用服务)
  • 明文传密码不安全 → 改用应用专用密码(如 Gmail 的 App Password),或把密码存在环境变量里:os.getenv("SMTP_PASS")

示例发送逻辑片段:

import smtplib
from email.mime.text import MIMEText
msg = MIMEText(f"Conflict on {ip}: {mac_list}")
msg["Subject"] = f"ALERT: IP Conflict - {ip}"
msg["From"] = "monitor@company.local"
msg["To"] = "admin@company.local"
<p>server = smtplib.SMTP("smtp.company.local", 587)
server.starttls()
server.login("monitor@company.local", os.getenv("SMTP_PASS"))
server.send_message(msg)
server.quit()

真正上线前,务必用一个测试 IP 故意制造冲突跑通全流程——包括 ARP 捕获、MAC 提取、邮件送达。最容易被忽略的是网卡名硬编码和 SMTP TLS 端口(587 还是 465?),这两个点出错,整个链路就断在第一步或最后一步。

热门AI工具

更多
SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1651

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4124

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1649

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

23797

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2907

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2947

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1143

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

596

2023.08.10

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn