SLP 是什么
SLP(Service Location Protocol,RFC 2608)解决的是同一个问题:局域网里有哪些服务、在哪里。它把参与者分成三类角色——服务代理(SA)负责注册服务,用户代理(UA)代表客户端查询,目录代理(DA)集中保存注册信息。客户端可以组播查询,也可以先问 DA;端口 427 同时承载 TCP 与 UDP,IPv4 组播地址是 224.0.1.22。
基本信息
| 服务 | svrloc(Service Location Protocol) |
|---|---|
| 协议 | TCP/UDP 427;发现用组播 224.0.1.22 |
| 规范 | RFC 2608(SLPv2)、RFC 2165(SLPv1) |
| 实现 | OpenSLP、部分打印与目录产品 |
| 安全等级 | 仅局域网,公网不应暴露 |
典型使用场景
- 打印与文件服务发现:客户端自动找到同网段的打印与共享服务
- 目录代理部署:为跨网段客户端提供集中查询入口
- 排障:确认服务是否已注册、DA 地址是否下发正确
- 安全评估:确认 SLP 没有被跨网段放行,避免注册信息外泄
- 设备盘点:用查询命令列出网段内正在广播的服务清单
查询服务与属性
查询服务与属性
slptool findsrvs service:printer # 列出已注册的打印服务
slptool findattrs service:printer://printer.example.com
slptool findscopes # 查看作用域
sudo tcpdump -ni eth0 'port 427' -c 20 # 观察注册与查询报文角色与交互方式
| 角色 | 职责 | 典型报文 |
|---|---|---|
| SA 服务代理 | 把本机服务注册到目录 | 服务注册与注销 |
| UA 用户代理 | 代客户端发起查询 | 服务与属性查询 |
| DA 目录代理 | 集中保存注册信息 | 应答查询,减少组播 |
| 客户端 | 组播或向 DA 查询 | 224.0.1.22 上的请求 |
早期 SLP 实现缺乏认证:伪造服务代理可以让客户端连接到恶意服务,这在自动发现场景里等同于中间人入口;跨网段部署应限制组播范围,或改用带认证的发现机制。
DA 地址可以通过 DHCP 选项下发,也可以由客户端组播发现;排障时先确认客户端拿到的 DA 地址是否可达,再检查 427 是否被策略拦截,这比反复重启服务更有效。
收敛建议
- 只在需要自动发现的网段保留 SLP,其余网段过滤组播
- 跨网段统一走 DA 单播查询,避免组播扩散
- 对注册服务的来源做限制,减少伪造注册
- 把服务发现依赖写入运维文档,替换方案先行验证