用netstat、lsof或ss可查看Mac实时网络连接状态:netstat需加参数过滤并sudo获取PID;lsof更精准定位进程;ss需brew安装iproute2mac,支持PID直出。

你想在Mac终端里一次性看清所有网络连接的实时状态,包括哪些程序正在连哪个远程地址、用了什么协议、处于什么连接阶段,而不是只看IP或路由表。
用netstat查全部连接和监听端口
netstat是macOS原生命令,能直接列出TCP/UDP连接和端口监听情况,但默认输出太杂,必须加参数过滤。
打开终端,执行:netstat -an | grep -E "(tcp|udp)"。这会拉出全部原始连接条目,包含本地地址、远程地址、状态(ESTABLISHED、LISTEN、TIME_WAIT等)和PID(如果权限足够)。
只看已建立的连接:运行netstat -an | grep ESTABLISHED。重点扫一眼Remote Address列,确认有没有陌生IP或可疑端口。
只看本机正在监听的端口:netstat -an | grep LISTEN。注意Local Address列是否绑定了0.0.0.0(表示对外暴露)还是127.0.0.1(仅本地可访问)。
【必须加sudo才能看到PID和进程名】否则你只能看到端口,不知道哪个程序在用。执行sudo netstat -tulv,输入密码后就能看到Program Name列,比如“Google Chrome”或“node”。
用lsof精准定位每个连接归属的进程
当netstat显示连接但没PID,或者你想确认某条连接到底是谁发起的,lsof比netstat更可靠——它把网络连接当作“打开的文件”,映射更准。
方法一:查全部监听项(不解析域名和端口名):sudo lsof -i -P -n | grep LISTEN。-P禁用端口名转换(显示80而非http),-n禁用主机名解析(显示IP而非域名),避免卡顿和误导。
方法二:查特定端口,比如你发现3000被占了:sudo lsof -i :3000。输出里COMMAND列直接告诉你进程名,PID列给你编号,方便后续kill或排查。
方法三:查所有已建立的连接(不只是监听):sudo lsof -i -P -n | grep ESTABLISHED。这一行会列出所有活跃通信对,含本地→远程IP:端口、协议、用户、PID和进程名。
用ss获取带PID的精简视图(需提前安装)
ss比netstat更快更轻量,原生支持PID直出,但macOS不自带,需先装兼容版。
第一步:安装Homebrew(如未安装):/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"。
第二步:用Homebrew装iproute2mac:brew install iproute2mac。
第三步:运行sudo ss -tulnp。输出只有5列:Netid(协议)、State(状态)、Recv-Q/Send-Q(队列)、Local Address:Port、PID/Program name。这一步能一眼锁定谁在用哪个端口。
第四步:精准匹配某条连接,比如只看连到github.com的HTTPS请求:sudo ss -tunp | grep 'github.com:443'。注意这里用-u同时抓UDP,避免漏掉DNS等关键流量。

















