Linux查看监听的端口进程

Posted by 付辉 on Tuesday, July 10, 2018 共859字

Netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字。另外它还能列出处于监听状态(即等待接入请求)的套接字。经常使用 netstat 用于查看网络连接信息和系统开启的端口号。

还有一个完美替代它的命令ss,全称是socket statisticsss的优点就在于“天下武功唯快不破”。

引言

已知服务监听的端口,想查找当前服务的PID。我们可以拆解成2个子问题:

  1. 如何查看该端口是否在被服务监听
  2. 如何查看该端口的PID

ps

用于查看服务器上的进程信息.最最常用的就是:

ps -ef

netstat

显示的状态列:Proto,Recv-Q,Send-Q,Local Address,Foreign Address,State。其中Recv-Q和Send-Q分别代表接收队列和发送队列。这些数字一般都是0,如果不是,则表示软件包正在队列中堆积。

Proto Recv-Q Send-Q Local Address Foreign Address State
tcp        0    0 enlightened:domain      *:*                     LISTEN     

比较有用的选项是:

-nShow network addresses as numbers (normally netstat interprets addresses and attempts to display them symbolically). This option may be used with any of the display formats.

-aWith the default display, show the state of all sockets; normally sockets used by server processes are not shown. With the routing table display (option -r, as described below), show protocol-cloned routes (routes generated by a RTF_PRCLONING parent route); normally these routes are not shown.

示例

查看当前服务器上Redis的连接情况。比如TCP协议的time_wait,close,establish等状态。

netstat -at | grep '10.108.82.195:6683' | awk '{print $5}' 
\ |awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -20

回到那个问题,查看当前是否有服务正在监听3900端口。

netstat -an | grep 3900

ss

我个人非常喜欢这个命令,方便,最主要是快。

它的基本选项包括:

-a  打印所有的连接
-t  列出TCP协议的连接
-u  列出UDP协议的连接
-n  禁止域名解析功能。
-l  正常监听(listen)状态的套接字
-p  获取连接对应的进程ID和程序名
-e  获取进程所属的用户名

-s  网络统计信息
-r  打印内核路由信息。打印出来的信息与 route 命令输出的信息一样
-i  打印网络接口信息。-ei等同于ifconfig

telnet

差点忘记这个命令,也可以用来查看端口是否被占用。最常见的就是连接redis

telnet host port

查看网站是否支持httpstelnet一下它的443端口就可以搞定。

lsof

命令的全称list open file

lsof -i:22 #查看22端口连接情况