Ubuntu上systemd-resolv出现大量随机查询,如何定位生成源?
追踪本机随机LLMNR查询来源的实操步骤
首先得给你划个重点:你看到的发往224.0.0.252的查询,是**LLMNR(链路本地多播名称解析)**请求,这是一种本地网络里的主机名解析协议,systemd-resolved监听5355端口处理LLMNR是默认配置。那些随机字符串要么是某个进程的bug、异常行为,要么是恶意程序在搞事情。下面是一步步抓出元凶的方法:
1. 先确认查询类型(LLMNR vs 常规DNS)
先通过抓包工具锁定协议细节,避免走弯路:
- 打开终端运行:
sudo tcpdump -i any host 224.0.0.252 and port 5355 - 观察输出里的协议字段,你会看到明确的LLMNR标识——这能帮我们排除常规DNS的问题,把排查范围缩小到本地进程的LLMNR请求。
2. 让systemd-resolved帮你记录请求来源
systemd-resolved本身有详细的日志能力,只要调高日志级别,就能直接看到哪个进程在发这些奇怪的查询:
- 编辑resolved配置文件:
sudo nano /etc/systemd/resolved.conf,找到LogLevel一行,改成LogLevel=debug - 重启服务生效:
sudo systemctl restart systemd-resolved - 实时查看日志:
journalctl -u systemd-resolved -f
当那些随机域名查询出现时,日志里会清晰显示发起请求的进程PID和程序名,比如类似这样的条目:Process 1234 (mystery-program) sent LLMNR query for name "aewfepnumefp"——这一步大概率能直接定位到源头。
3. 用底层工具追踪进程(如果日志没搞定)
如果systemd-resolved的日志没给出足够信息,就用更硬核的工具关联网络请求和进程:
- 用
lsof实时监控发往224.0.0.252的请求:sudo lsof -i @224.0.0.252:5355,当查询发生时,这个命令会立刻显示发起连接的进程PID、名称和路径。 - 或者用
ss工具结合过滤:sudo ss -tulnp | grep 5355,虽然这主要显示监听端口的进程,但结合抓包时机,再配合ps aux | grep <PID>也能缩小范围。 - 更进阶的可以用
bpftrace写个小脚本追踪UDP发送,但对大多数人来说,前面两个工具足够了。
4. 排查找到的进程
当拿到可疑进程的PID后,做这些验证:
- 查看进程的真实路径:
ls -l /proc/<PID>/exe,确认是不是合法程序(比如系统自带工具、你安装的软件,还是陌生的未知文件)。 - 查看进程的启动参数:
cat /proc/<PID>/cmdline,了解它的具体行为。 - 如果是系统进程,去查对应软件的版本有没有已知的LLMNR相关bug;如果是陌生进程,立刻警惕——检查它的启动项(比如
systemctl list-unit-files、用户自启动脚本、crontab),用杀毒工具扫描,必要时直接终止并删除。
5. 临时禁用LLMNR验证问题
如果暂时找不到源头,可以先禁用LLMNR来确认这些查询是否和它相关:
- 编辑
/etc/systemd/resolved.conf,设置LLMNR=no - 重启服务:
sudo systemctl restart systemd-resolved
如果查询停止了,说明确实是LLMNR相关的问题,再回头重点排查进程;如果还有查询,那可能是mDNS(另一种多播DNS协议),可以用类似方法追踪5353端口的请求。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

