MacOS下netstat和lsof

1、netstat和lsof

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
lsof(list open files)是一个列出当前系统打开文件的工具。在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。

1.1netstat各个参数

-a (all)显示所有选项,默认不显示LISTEN相关
-n 拒绝显示别名,能显示数字的全部转化成数字。
-b show the number of bytes in and out
-s 按各个协议进行统计
-w wait(s) 每隔一定秒数来进行显示
更加详细的信息参考man netstat,这里不一一列举(主要是太麻烦了,懒得写)
提示:LISTEN和LISTENING的状态要加-a才能看到
提示:Mac和Linux的指令有所出入,切记不要拿Linux的指令在Mac中用

1.2 网络状态

LISTEN:(Listening for a connection.)侦听来自远方的TCP端口的连接请求

SYN-SENT:(Active; sent SYN. Waiting for a matching connection request after having sent a connection request.)再发送连接请求后等待匹配的连接请求

SYN-RECEIVED:(Sent and received SYN. Waiting for a confirming connection request acknowledgment after having both received and sent connection requests.)再收到和发送一个连接请求后等待对方对连接请求的确认

ESTABLISHED:(Connection established.)代表一个打开的连接

FIN-WAIT-1:(Closed; sent FIN.)等待远程TCP连接中断请求,或先前的连接中断请求的确认

FIN-WAIT-2:(Closed; FIN is acknowledged; awaiting FIN.)从远程TCP等待连接中断请求

CLOSE-WAIT:(Received FIN; waiting to receive CLOSE.)等待从本地用户发来的连接中断请求

CLOSING:(Closed; exchanged FIN; waiting for FIN.)等待远程TCP对连接中断的确认

LAST-ACK:(Received FIN and CLOSE; waiting for FIN ACK.)等待原来的发向远程TCP的连接中断请求的确认

TIME-WAIT:(In 2 MSL (twice the maximum segment length) quiet wait after close. )等待足够的时间以确保远程TCP接收到连接中断请求的确认

CLOSED:(Connection is closed.)没有任何连接状态

1.3 lsof每个字段状态

COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称

1.4 netstat和lsof区别和关联

netstat无权限控制,lsof有权限控制,只能看到本用户
losf能看到pid和用户,可以找到哪个进程占用了这个端口

在这里插入图片描述

2、MAC查看和杀死进程

##一、查看指定端口的进程
sudo lsof -i :27017

COMMAND   PID    USER        FD      TYPE             DEVICE             SIZE/OFF      NODE       NAME
[mongod]  859   zhangsan    313u      IPv6            0x1111111111111     0t0         TCP        *:cslistener (LISTEN)

## 二、根据进程名称
ps -ef | grep nginx

  501 17780     1   0  8:36下午 ??         0:00.00 nginx: master process nginx
  501 17781 17780   0  8:36下午 ??         0:00.00 nginx: worker process
  501 17790 14611   0  8:39下午 ttys004    0:00.00 grep nginx

然后根据PID杀进程:
sudo kill -9 859

3、Mac下使用netstat 命令应该注意的

使用netstat 命令区别于liunx

如果要查询tcp ,udp 协议的,必须加要加 tcp ,udp

netstat lnp tcp

netsta lnp udp

linux 下:

netstat lntp

netstat lnup

参考资料:
https://blog.csdn.net/xiaomu_33/article/details/88313440
https://www.jianshu.com/p/3d9edcd023d7
https://www.cnblogs.com/blackay03/p/8836135.html