You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取同子网内等待网络连接的Socket主机列表

同子网TCP服务端发现落地方案

无需预存IP识别待接入Socket服务端的方法

  • 固定端口子网扫描:这是改造成本最低的方案,不需要对现有服务端做任何修改。所有服务端的监听端口为固定值的前提下,客户端先获取自身所在的子网网段,遍历网段内所有可用IP,向目标IP的服务监听端口发起TCP握手请求,只要能成功完成握手、或者收到SYN+ACK响应,就证明对应主机上的服务端正处于等待连接的LISTEN状态。实际实现的时候可以先发ARP请求探测IP是否有存活主机,过滤掉未分配的空IP减少无效请求,再控制下扫描并发数,不要一下发太多包触发主机防火墙的防扫描拦截,常规/24子网整个扫描过程几秒就能跑完。
  • 定向广播/组播探测:如果可以对服务端做少量改造,这个方案效率更高、网络开销更小。提前约定一个专用的UDP探测端口,客户端需要发现服务端的时候,直接向子网广播地址(比如255.255.255.255)或者约定的私有组播地址发送带固定标识的UDP探测包;所有服务端额外监听这个UDP端口,收到符合格式的探测包后,直接给客户端的源地址回送UDP响应,带上自身TCP服务的监听端口、设备标识等信息,客户端收集固定时间窗内的所有响应,就能拿到全量待接入服务端的地址列表。

服务端主动宣告在线状态的可行方案

  • 周期广播/组播心跳宣告:这是工业场景最常用的方案,实现简单可靠性高。服务端启动完成、TCP端口正式进入LISTEN状态后,按固定间隔(通常1060秒可配)向子网广播地址或者约定组播地址发送UDP宣告报文,报文带*固定魔数*做校验,内容包含自身IP、TCP监听端口、设备ID、服务版本等信息;客户端启动后直接在约定的UDP端口监听所有宣告报文,解析校验通过后就把对应服务端加入待连接列表,同时维护每个服务端的宣告接收时间,如果连续35个周期没收到某台服务端的宣告,就判定设备离线,从列表中移除。这个方案不需要客户端主动发起探测,服务端上线、下线客户端都能实时感知,不需要做周期扫描。
  • 无改造被动嗅探方案:如果完全不能修改服务端程序,可以在客户端侧开启子网ARP嗅探,所有主机接入网络、启动服务的时候都会发送ARP报文声明自身的IP-MAC映射,客户端维护在线主机清单后,再对清单内的IP逐个做固定TCP端口的连通性校验,也能筛选出处于等待连接状态的服务端。这个方案的缺点是存在一定的误判概率,识别速度也比前两种方案慢,仅适合无法改造存量服务端的特殊场景。

注意:所有涉及UDP广播、组播的方案,都要提前在主机防火墙放通对应UDP端口的子网出入站规则,避免报文被拦截导致发现失效;用TCP扫描的方案也要保证客户端到服务端监听端口的TCP访问策略是放通的。

内容的提问来源于stack exchange,提问作者NapkinBob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:21:39