portrange 做什么
portrange 是 pcap 过滤语言里的端口区间原语:tcp portrange 30000-32767 一次覆盖整段端口,比把每个端口用 or 串起来短得多,也不容易漏写。它只按端口号匹配,不涉及应用层内容;区间必须写全起止值。常用于成段分配端口的场景,如 Kubernetes NodePort、RPC 动态端口、数据库代理。
基本信息
| 适用平台 | Linux / macOS / BSD 上的 tcpdump 与 libpcap 过滤器 |
|---|---|
| 语法 | [tcp|udp] [src|dst] portrange 起-止 |
| 可组合 | 与 and / or / not 及其他原语混用 |
| 限制 | 起止值必须都写,区间不支持省略 |
| 等价写法 | port 5000 or port 5001 …(不推荐,改动时易漏) |
典型使用场景
- 排查 Kubernetes NodePort 段(默认 30000-32767)的服务暴露问题
- 抓取 RPC 框架成段分配的动态端口流量
- 分析访问 Linux 临时端口段(默认 32768-60999)的连接情况
- 把一段高位端口作为自定义业务端口段做定向取证
常用示例
常用示例
tcpdump -i eth0 -nn 'tcp portrange 30000-32767' -c 30 # NodePort 段
tcpdump -i eth0 -nn 'udp portrange 5000-5010' # UDP 区间
tcpdump -i eth0 -nn 'dst portrange 8000-8010 and tcp[tcpflags] & tcp-syn != 0' # 只抓该段的新建连接
tcpdump -i eth0 -nn 'src portrange 32768-60999' -c 20 # 本机发起的临时端口常用区间速查
| 区间 | 典型用途 | 备注 |
|---|---|---|
| 0-1023 | 系统与知名服务端口 | 属于特权端口范围 |
| 30000-32767 | Kubernetes NodePort 默认段 | 集群可配置改动 |
| 32768-60999 | Linux 临时端口默认段 | 由 ip_local_port_range 控制 |
| 5000-5010 | 示例 RPC 或自建服务段 | 按实际部署口径调整 |
区间写法必须完整,portrange 80- 这类省略端点会被过滤器直接判为语法错误并在启动时报出。
区间越宽抓到无关流量越多,先按嫌疑段收窄,必要时再叠加 host 条件。
进阶要点
- 把 portrange 与 host 组合能显著缩小结果集,排障时先限定对端地址
- 临时端口段由内核参数决定,容器与宿主机口径可能不同,取值前先确认
- 统计区间内各端口的流量分布时,先落盘再用 tshark 按端口聚合更准确
- 加密流量里端口区间只能定位连接方向,看不到业务内容
- 区间连续变化时改写成参数化脚本,避免手工改错
区间跨度越大过滤器编译与匹配开销越高,能在服务端或镜像口抓就不要在核心链路上全量抓。