netstat在mac上很差用了,试试lsof

笔者在这里主要说下netstat和lsof的使用,以及netstat在mac系统下不少功能的缺失,这个场景下,lsof是很好的补充。我的比较喜欢使用lsof,而对于netstat,即便是linux下,也推荐使用ss代替linux

netstat

netstat命令列出了关于你的计算机网络通信的详细信息,网络通信包括你的计算机经过全部的端口和应用与外界talking的全部方式。因此,征服netstat能够帮助你理解您的计算机如何和怎样创建链接的。git

netstat会报告你计算机的全部激活的网络链接,考虑到现代网络设备执行的功能数量,您能够预估到这个列表的长度。能够超过1000行。过滤netstat的输出对于理解你计算机激活的端口发生了什么是最基本的,它内置的flag容许您设置options,从而能够限制命令的输出范围github

netstat flags and options

要想看看netstat的所有有效的options,你能够敲入man netstat以打开netstat使用手册网络

Tips: man是manual的简称

语法

为了添加flags和options给netstat,你可使用下面的语法tcp

netstat [-AabdgiLlmnqrRsSvWx] [-c queue] [-f address_family] [-I interface] [-p protocol] [-w wait]
Warning: netstat在macOS下与linux下工做方式是不同的,因此在macOS下使用flags和语法会致使不指望的结果

经常使用的flags

这里列举了经常使用的flags:
-a 在netstat的输出中包含服务端口(server ports)
-g 列出了和广播链接(multicast connections)相关的信息
-I interface 提供指定接口(interface)的数据包数据. 全部有效的接口(interfaces) 都能经过-i flag查看, 可是en0 一般是默认的传出网络接口(interface)
-n 隐藏带有名称的远程地址标签,带来的好处是:大大加快了netstat的输出,同时只牺牲了有限的信息
-p protocol 列出与特定网络协议(protocol)关联的流量. 完整的协议(protocol)列表位于/etc/protocols,可是最重要的协议是udp和tcp
-r 显示了路由表,显示数据包是如何在网络中路由的
-s 显示全部协议(protocol)的网络统计信息,不管它们是否处于活动状态
-v 增长详细程度,特别是经过添加一列来显示与每一个打开的端口关联的进程ID(pid)spa

netstat 使用实例

  • $ netstat -apv TCP

此命令仅返回Mac上的TCP链接,包括打开的端口和活动的端口。它还使用详细输出,列出与每一个链接关联的PID计算机网络

  • $ netstat -a | grep -i "listen"

输出带有关键字“listen”的数据并查找结果3d

netstat的macOS版本缺乏许多用户指望的功能。因此,它在macOS上不如在Windows上有用。这时,lsof命令替代netstat提供了许多netstat缺乏的功能。用lsof补充netstatcode

lsof

lsof显示了当前在任何应用程序中打开的任何文件,您还可使用它来检查与应用程序相关的开放端口(port), 运行lsof -i, 您会看到全部与Internet通讯的应用程序的列表
server

lsof flags and options

显示每一个打开的文件或互联网链接一般很冗长。这就是lsof附带flags用以限制特定结果的缘由。下面的是最重要的

经常使用的flags

这里列举了经常使用的flags:

-i 展现了全部打开的网络链接(open network connections) 和使用这个链接(connection)的进程(process)的名称. 若是增长一个4,如-i4, 将展现IPv4链接; 如-i6 将展现IPv6链接.
-i flag 还能够继续扩展以指定更多详细信息,-iTCP或者-iUDP将返回仅是TCP或UDP的连接. -iTCP:25将返回端口(port)是25的TCP链接. 还能够指定端口范围,如 -iTCP:25-50.
使用 -i@1.2.3.4 将返回ip是1.2.3.4的IPv4地址. IPv6也是同样的. @符号也能够以一样的方式用于指定hostname,
-s 强制显示文件大小(file size). 可是和-i成对出现时,它的含义就不一样了:它容许用户指定要返回的命令的协议和状态
-p 将lsof限制为特定的进程ID(PID)。可使用-p 123,456,789等设置多个PID。进程ID也能够用^排除,如123,^456,它专门排除PID 456
-P 禁用端口号到端口名的转换,从而加快了输出速度
-n 禁止将网络号转换为主机名(network numbers to host names)。与上面的-P一块儿使用时,它能够显着加快lsof的输出
-u user 仅返回指定用户拥有的命令

lsof 使用实例

  • $ lsof -nP -iTCP@lsof.itap:513

这个看起来复杂的命令列出了全部主机名为lsof.itap和端口513的TCP链接。同时使用-P无需将名称链接(connecting names)到IP地址和端口,从而使该命令的运行速度明显加快

  • $ lsof -iTCP -sTCP:LISTEN

此命令返回状态为LISTEN的每一个TCP链接,显示Mac上全部打开的TCP端口。它还列出了与那些打开的端口关联的进程。这是对netstat的重大升级,netstat最多列出了PID

  • $ sudo lsof -i -u^$(whoami)

此命令返回当前登陆用户不拥有的全部链接。使用sudo运行,能够查看不属于您的任务。在不使用sudo的状况下运行此命令将返回一个空列表

其余网络命令

检查网络的命令还有arp,ping和ipconfig

原味地址:netstat在mac上很差用了,试试lsof,飞起

相关文章
相关标签/搜索