如何找出所有连接到本机指定端口的客户端 IP

在日常运维或排查网络问题时,我们常常需要知道:有哪些客户端正在连接我的服务?连接数是否异常?是否存在恶意扫描或 DDoS 行为?

本文将教你使用一条简洁高效的 Linux 命令组合,统计连接到本机某个端口(如 19092)的所有客户端 IP 地址,并按连接数排序,帮助你快速掌握当前网络连接状况。

🎯 本文目标

我们希望通过以下命令,实现:

✅ 找出所有连接到本机 19092 端口的客户端 IP
✅ 统计每个客户端的连接数量
✅ 按连接数从高到低排序,显示前 10 名 

使用的完整命令如下:

ss -tnp '( dport = 19092 )' | awk '{print $5}' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort | uniq -c | sort -nr | head

⚠️ 注意:原问题中误写为 sport = 19092,我们会在后文说明其错误,并修正为 dport = 19092。 

🔍 命令总览

ss -tnp '( dport = 19092 )' | \
awk '{print $5}' | \
grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | \
sort | \
uniq -c | \
sort -nr | \
head

这条命令由多个工具通过管道 | 连接而成,每一部分都承担特定任务。下面我们逐段解析。

🧩 第一步:ss -tnp '( dport = 19092 )'

作用:
列出所有 目标端口为 19092 的 TCP 连接。

参数解释:
ss:socket statistics,现代版 netstat,更快更强大。
-t:只显示 TCP 连接。
-n:不解析主机名和服务名(显示数字 IP 和端口)。
-p:显示与连接相关的进程信息(如哪个程序在监听)。
( dport = 19092 ):过滤表达式,表示“目标端口(destination port)等于 19092”。
📌 关键点:

dport 是“目标端口”,即数据包发往的端口。
如果你的服务监听 19092(如 Kafka、自定义应用),那么客户端连接你时,目标端口就是 19092。
所以我们要查的是 dport = 19092,而不是 sport = 19092!
❌ 错误示例:ss -tnp 'sport = 19092'
这表示“本机作为客户端,使用 19092 作为源端口去连接别人”,这是出站连接,不是我们关心的“别人连我”。 

✅ 正确写法:'( dport = 19092 )'

示例输出:

ESTAB 0 0 192.168.1.100:19092 192.168.1.200:54321 users:(("java",pid=1234,fd=56))
ESTAB 0 0 192.168.1.100:19092 192.168.1.201:54322 users:(("java",pid=1234,fd=57))

🧩 第二步:awk '{print $5}'

作用:
提取每行的第 5 个字段 —— 客户端的 IP 和端口(Peer Address:Port)。

在 ss 输出中,字段如下:

State  Rec-Q  Send-Q  Local Address:Port  Peer Address:Port  Process

所以 $5 是 192.168.1.200:54321 或 [::ffff:192.168.1.201]:54322(IPv4 映射 IPv6 格式)

输出:

192.168.1.200:54321
192.168.1.201:54322

🧩 第三步:grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+'

作用:
从上一步的字符串中,只提取 IPv4 地址部分。

参数解释:
-E:启用扩展正则表达式(Extended Regular Expression)。
-o:只输出匹配的部分,而不是整行。
正则模式:[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+
匹配形如 192.168.1.200 的 IPv4 地址。
📌 为什么需要这一步?
因为 $5 可能是:

192.168.1.200:54321 → 提取 192.168.1.200
[::ffff:192.168.1.201]:54322 → 正则仍能匹配出 192.168.1.201
✅ grep -oE 能自动忽略前缀和后缀,只提取出纯 IP。

输出:

192.168.1.200
192.168.1.201

🧩 第四步:sort

对提取出的所有 IP 地址进行排序。

为什么?因为下一步 uniq 要求相同的行必须相邻才能去重计数。

输出(排序后):

192.168.1.200
192.168.1.200
192.168.1.201

🧩 第五步:uniq -c

作用:
统计连续重复行的出现次数。

-c:在每行前加上计数。
输出:

 2 192.168.1.2001 192.168.1.201

表示 192.168.1.200 有 2 个连接,192.168.1.201 有 1 个。

🧩 第六步:sort -nr

作用:
按数值逆序排序(从大到小)。

-n:按数值排序(而不是字典序)。
-r:逆序(降序)。
输出:

  2 192.168.1.2001 192.168.1.201

连接数最多的排在最前面。

🧩 第七步:head

默认显示前 10 行。

适用于连接数非常多时,只关注“Top 10”客户端。

✅ 最终输出示例

 23 192.168.1.10015 192.168.1.1018 10.0.0.503 172.16.0.1

说明:

192.168.1.100 建立了 23 个到 19092 端口的连接,可能是高频访问或异常行为。
可用于排查:是否被攻击?是否客户端重连频繁?

🛠️ 实际应用场景

场景用途

Kafka 监控

查看哪些客户端连接9092/19092

Web 服务排查

分析访问量大的客户端

安全审计

发现异常 IP 频繁连接

性能调优

判断是否需要限流或负载均衡

💡 小贴士:如何改成其他端口?
只需替换端口号即可:

ss -tnp '( dport = 9092 )' | awk '{print $5}' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort | uniq -c | sort -nr | head

或者写成函数:

count_clients() {local port=$1ss -tnp "( dport = $port )" | awk '{print $5}' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort | uniq -c | sort -nr | head
}# 使用
count_clients 19092

🚫 常见错误提醒

sport = 19092

查的是“我连别人”,不是“别人连我” ❌

忘记引号( dport = 19092 )

shell 报错:syntax error near unexpected token(

不加sort直接uniq -c

无法正确统计非连续重复项


✅ 总结

我们通过这条命令:

ss -tnp '( dport = 19092 )' | awk '{print $5}' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort | uniq -c | sort -nr | head

实现了:

✅ 精准筛选目标端口为 19092 的连接
✅ 提取客户端 IP 地址(兼容 IPv4 和 IPv4 映射 IPv6)
✅ 统计每个客户端的连接数
✅ 按连接数降序排列,显示 Top 10

这是一条非常实用的运维命令,建议收藏或加入监控脚本中。


📚 延伸阅读

  • man ss:查看 ss 所有过滤语法(支持 src, dst, port, sport, dport 等)
  • lsof -i :19092:另一种查看端口连接的方式
  • 使用 awk 正则提取 IP:match($5, /([0-9]{1,3}\.){3}[0-9]{1,3}/, arr); print arr[0]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94870.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java IDE安装idea社区版步骤

IntelliJ IDEA 社区版(Community Edition)是一款功能强大且完全免费的集成开发环境,非常适合 Java 和 Kotlin 初学者或进行基础开发2。我会为你提供详细的安装步骤。 🛠 IntelliJ IDEA 社区版安装指南 📋 系统要求与…

Agent智能体

什么是 Agent? Agent 是一个智能体,可以接收用户请求,利用大模型(LLM)的推理能力,自动决定: 自己回答还是调用外部工具(数据库、API、脚本等) 最终把结果返回给用户。 能…

【VSCode】使用VSCode打开md文件以及转化为PDF

【VSCode】使用VSCode打开md文件以及转化为PDF在 Visual Studio Code (VS Code) 中渲染 Markdown 并保存为 PDF,可以通过以下步骤实现。 首先安装好 VSCode,可以参考下述链接 https://blog.csdn.net/weixin_43848614/article/details/148042035 安装m…

苹果ImageIO零日漏洞分析:攻击背景与iOS零点击漏洞历史对比

苹果公司已紧急发布全生态系统安全更新,修复编号为CVE-2025-43300的ImageIO框架高危零日漏洞(zero-day),该漏洞已被用于复杂的定向攻击。这是苹果在2025年修复的第七个零日漏洞,凸显iOS和macOS设备面临的威胁持续升级。…

面试 TOP101 递归/回溯专题题解汇总Java版(BM55 —— BM61)

8月刷题挑战,多重好礼等你拿 递归/回溯 题号题目名称核心思路时间复杂度空间复杂度代码亮点牛客原题链接BM55没有重复项数字的全排列使用回溯法生成所有排列O(n!)O(n)使用回溯法生成所有排列,逻辑清晰🔗 直达BM56有重复项数字的全排列使用回…

音频相关数学知识

时域(Time domain)是描述数学函数或物理信号对时间的关系,如果声音对应频率正负波动,对应事件x轴为时间,y轴为振幅频域信号在频率方面特性,如射频范围正弦型函数可以用来虚拟音频,正弦&#xff…

SAP-ABAP:SAP HANA 架构解析:主从(Scale-Out)与主备(High Availability)架构深度对比

SAP HANA 架构解析:主从(Scale-Out)与主备(High Availability)架构深度对比 一、架构概述 在SAP HANA数据库系统中,两种核心架构模式解决了不同的业务需求:主从架构(Scale-Out&#…

【Hadoop】HDFS 分布式存储系统

Namenode是整个HDFS文件系统的前端,只有一个,管理数据块映射信息,配置副本策略,处理客户端的读写请求。Secondary namenode是namenode的热备,当active namenode出现故障时,快速切换为新的active namenode。…

[特殊字符] 如何在自己的仓库开发,同时保持同步原作者更新(超详细教程)

在开源协作开发中,很多时候我们会遇到这样一种情况: 👉 我们想基于一个开源项目继续开发,代码要推送到自己的仓库里; 👉 但原作者可能还会更新,我们也希望能随时把最新的改动同步过来。 本文以 …

Spring Ai (Function Calling / Tool Calling) 工具调用

1.工具调用介绍 工具调用是现代大语言模型(LLM)的一项重要能力,允许模型在生成回复时“决定”是否需要调用某个外部函数来获取信息或执行操作。例如: 联网搜索 (实现查询到大模型未学习和RAG知识库中不存在的数据&am…

LabVIEW 正弦波噪声滤波

利用 LabVIEW 搭建程序,先合成含噪正弦波(正弦信号与高通滤波后的噪声叠加),再通过低通滤波提取纯净正弦波,实现噪声去除,常用于信号处理、测试测量场景,验证滤波算法对正弦信号的降噪效果。​功…

基于django的梧桐山水智慧旅游平台设计与开发(代码+数据库+LW)

摘要 随着信息技术的飞速发展,旅游行业面临着用户需求多样化、信息获取不便、服务体验不佳等问题。传统的旅游服务多依赖人工管理和线下宣传,难以高效整合资源与提供个性化服务。为解决这些问题,本文设计开发一个基于Django的梧桐山水智慧旅…

微服务相关面试题

写在前面 🔥我把后端Java面试题做了一个汇总,有兴趣大家可以看看!这里👉 ⭐️在反复复习面试题时,我发现不同资料的解释五花八门,容易造成概念混淆。尤其是很多总结性的文章和视频,要么冗长难…

循环神经网络——pytorch实现循环神经网络(RNN、GRU、LSTM)

循环神经网络——pytorch实现循环神经网络(RNN、GRU、LSTM) 本文将深入探讨循环神经网络的理论基础,并通过PyTorch深度学习框架来展示如何实现循环神经网络模型。我们将首先介绍循环神经网络的基本概念。通过PyTorch代码示例,我们…

系统架构设计师备考第8天——嵌入式系统

一、嵌入式系统概述定义 为特定应用构建的专用计算机系统,软硬件紧密结合,满足功能、可靠性、成本、体积、功耗等严格要求。核心特征:专用性强、技术融合(计算机通信半导体技术)、软硬一体以软件为主、资源受限、程序固…

HarmonyOS 中的 sharedTransition:实现流畅的页面过渡动画

HarmonyOS 中的 sharedTransition:实现流畅的页面过渡动画 在移动应用开发中,页面之间的过渡动画是提升用户体验的关键因素之一。HarmonyOS 提供了 sharedTransition 功能,让开发者能够轻松实现元素在不同页面间的平滑过渡效果,创…

【服务器】Apache Superset MCP接入与使用

1. 概述 Apache Superset MCP 集成(superset-mcp)是一个基于 Model Control Protocol(MCP)的服务器工具,旨在实现 AI 代理与 Apache Superset 的程序化交互。该项目通过提供标准化的工具接口,使 AI 助手&a…

Postman接口测试:postman设置接口关联,实现参数化

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快postman设置接口关联在实际的接口测试中,后一个接口经常需要用到前一个接口返回的结果, 从而让后一个接口能正常执行,这个过程的…

第一个,QT版本问题:no member named SkipEmptyParts‘in namespace ‘Qt

这是我朋友给我发过来的代码,但是在我电脑上报错了,遇到的问题是 Qt 版本兼容导致的编译错误。这是因为我的是5.12版本,他的是6.4版本,Qt::SkipEmptyParts只能在6版本使用,无法在5.12甚至更早的版本使用,具…

【PostgreSQL内核学习:通过 ExprState 提升哈希聚合与子计划执行效率(二)】

PostgreSQL内核学习:通过 ExprState 提升哈希聚合与子计划执行效率(二)引言ExecBuildHash32FromAttrs示例 SQL 查询函数运行流程与代码解释最终 ExprState 结构执行示例总结ExecComputeSlotInfo示例 SQL 查询函数注释与解释作用参数返回值执行…