首先要知道tcp连接的端口号,要么是本地端口号要是么remote端口号。有的端口号我们已知,有的端口号可以通过日志获取,也可以抓包获取,如
然后是用netstat命令获取pid
linux下使用netstat -anpt(a是输出所有n是展示端口号,不将端口号翻译为程序名,p是显示进程,t是只显示tcp) ,mac下使用netstat -antv(参数含义自行百度)
也可以使用lsof -i 获取pid
Lsof显示当前在任何应用程序中打开的全部文件。所以它可用来检查与应用程序关联的打开的端口。
-i显示全部打开的网络链接以及正在使用该链接的进程的名称。在-i4中添加4,将仅显示IPv4链接。相反,添加6(-i6)将仅显示IPv6链接。
该-i标志也能够扩展到指定的进一步细节。-iTCP或-iUDP将仅返回TCP和UDP链接。-iTCP:25将仅在端口25上返回TCP链接。一系列端口能够用破折号指定-iTCP:25-50。
使用-i@1.2.3.4将仅返回到IPv4地址1.2.3.4的链接。能够以相同的方式指定IPv6地址。@前体也能够以相同的方式用于指定主机名,可是不能同时使用远程IP地址和主机名。
-s一般强制lsof显示文件大小。可是,当与-i标志配对时,-s的工做方式有所不一样。相反,它容许用户指定要返回的命令的协议和状态。
-p将lsof限制为特定的进程ID(PID)。可使用-p 123,456,789等通用设置多个PID。进程ID也能够用^来排除,如123,^ 456所示,它专门排除PID 456。
-P禁用端口号到端口名的转换,从而加快了输出速度。
-n禁止将网络号转换为主机名。与上面的-P一块儿使用时,它能够显着加快lsof的输出。
- ü 用户只返回被命名为用户所拥有的命令。
lsof示例
这是使用lsof的几种方法。
lsof -nP -iTCP@lsof.itap:513
这个看起来复杂的命令列出了全部主机名为lsof.itap和端口513的TCP链接。它还运行lsof而不将名称链接到IP地址和端口,从而使该命令的运行速度明显加快。
lsof -iTCP -sTCP:LISTEN
然后通过ps -ef | grep pid 来定位到具体的进程
参考https://segmentfault.com/a/1190000021295206