一、端口监听介绍
在Linux系统中,,每个服务启动的时候都会通过一个端口来进行监听,所有端口都与OS中的进程ID或服务相关联。在日常的Linux系统运维中,我们有时需要某些特定服务的进程正在侦听哪个端口号。
二、使用netstat命令
1.netstat命令介绍
netstat命令 用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。
2.netstat帮助
1-a或--all:显示所有连线中的Socket; 2-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址; 3-c或--continuous:持续列出网络状态; 4-C或--cache:显示路由器配置的快取信息; 5-e或--extend:显示网络其他相关信息; 6-F或--fib:显示FIB; 7-g或--groups:显示多重广播功能群组组员名单; 8-h或--help:在线帮助; 9-i或--interfaces:显示网络界面信息表单; 10-l或--listening:显示监控中的服务器的Socket; 11-M或--masquerade:显示伪装的网络连线; 12-n或--numeric:直接使用ip地址,而不通过域名服务器; 13-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称; 14-o或--timers:显示计时器; 15-p或--programs:显示正在使用Socket的程序识别码和程序名称; 16-r或--route:显示Routing Table; 17-s或--statistice:显示网络工作信息统计表; 18-t或--tcp:显示TCP传输协议的连线状况; 19-u或--udp:显示UDP传输协议的连线状况; 20-v或--verbose:显示指令执行过程; 21-V或--version:显示版本信息; 22-w或--raw:显示RAW传输协议的连线状况; 23-x或--unix:此参数的效果和指定"-A unix"参数相同; 24--ip或--inet:此参数的效果和指定"-A inet"参数相同。
3.安装netstat工具
在最小化安装中,默认是没有安装netstat工具,需要手动进行安装。
1yum -y install net-tools
4.列出所有监听 tcp 端口
只列出所有监听 tcp 端口
1[root@master ~]# netstat -lt 2Active Internet connections (only servers) 3Proto Recv-Q Send-Q Local Address Foreign Address State 4tcp 0 0 localhost:igrs 0.0.0.0:* LISTEN 5tcp 0 0 0.0.0.0:mysql 0.0.0.0:* LISTEN 6tcp 0 0 localhost:38443 0.0.0.0:* LISTEN 7tcp 0 0 0.0.0.0:webcache 0.0.0.0:* LISTEN 8tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 9tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN 10tcp 0 0 localhost:38457 0.0.0.0:* LISTEN 11tcp 0 0 0.0.0.0:pcsync-https 0.0.0.0:* LISTEN 12tcp 0 0 localhost:5533 0.0.0.0:* LISTEN 13tcp 0 0 0.0.0.0:zabbix-trapper 0.0.0.0:* LISTEN 14tcp6 0 0 localhost:igrs [::]:* LISTEN 15tcp6 0 0 [::]:mysql [::]:* LISTEN 16tcp6 0 0 localhost:38443 [::]:* LISTEN 17tcp6 0 0 [::]:webcache [::]:* LISTEN 18tcp6 0 0 [::]:ssh [::]:* LISTEN 19tcp6 0 0 localhost:smtp [::]:* LISTEN 20tcp6 0 0 localhost:38457 [::]:* LISTEN 21tcp6 0 0 [::]:pcsync-https [::]:* LISTEN 22tcp6 0 0 [::]:zabbix-trapper [::]:* LISTEN
5.显示TCP端口的统计信息
1[root@master ~]# netstat -st 2IcmpMsg: 3 InType3: 15 4 InType8: 4 5 OutType0: 4 6 OutType3: 139486 7Tcp: 8 4028 active connections openings 9 17 passive connection openings 10 4 failed connection attempts 11 1392 connection resets received 12 3 connections established 13 609725 segments received 14 615954 segments send out 15 5878 segments retransmited 16 810 bad segments received. 17 11476 resets sent 18UdpLite: 19TcpExt: 20 20 invalid SYN cookies received 21 1227 packets pruned from receive queue because of socket buffer overrun 22 602 TCP sockets finished time wait in fast timer 23 693 delayed acks sent 24 Quick ack mode was activated 369 times 25 17 packets directly queued to recvmsg prequeue. 26 154418 packet headers predicted 27 16974 acknowledgments not containing data payload received 28 48604 predicted acknowledgments 29 19 times recovered from packet loss by selective acknowledgements 30 1 bad SACK blocks received 31 Detected reordering 1 times using FACK 32 2 congestion windows fully recovered without slow start 33 224 congestion windows recovered without slow start after partial ack 34 7 timeouts after SACK recovery 35 4 timeouts in loss state 36 19 fast retransmits 37 1 forward retransmits 38 1544 other TCP timeouts 39 TCPLossProbes: 692 40 TCPLossProbeRecovery: 69 41 2 SACK retransmits failed 42 4074 packets collapsed in receive queue due to low socket buffer 43 357 DSACKs sent for old packets 44 110 DSACKs sent for out of order packets 45 290 DSACKs received 46 484 connections reset due to unexpected data 47 41 connections reset due to early user close 48 449 connections aborted due to timeout 49 TCPDSACKIgnoredNoUndo: 143 50 TCPSpuriousRTOs: 5 51 TCPSackShiftFallback: 179 52 IPReversePathFilter: 8 53 TCPRcvCoalesce: 327751 54 TCPOFOQueue: 340347 55 TCPOFOMerge: 108 56 TCPChallengeACK: 1691 57 TCPSYNChallenge: 1689 58 TCPFromZeroWindowAdv: 1 59 TCPToZeroWindowAdv: 1 60 TCPWantZeroWindowAdv: 3483 61 TCPSynRetrans: 1804 62 TCPOrigDataSent: 137805 63 TCPHystartTrainDetect: 8 64 TCPHystartTrainCwnd: 166 65IpExt: 66 InNoRoutes: 29 67 InMcastPkts: 37586 68 InBcastPkts: 143772 69 InOctets: 1235902418 70 OutOctets: 634853490 71 InMcastOctets: 1353160 72 InBcastOctets: 23982240 73 InNoECTPkts: 2468463 74
6.查看某个服务监听端口
日常使用最多的是这个命令,加上-tunlp选项。
1[root@master ~]# netstat -tunlp |grep 100 2tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 6172/docker-proxy 3tcp6 0 0 :::10051 :::* LISTEN 6179/docker-proxy 4
三、使用ss命令
1.ss命令介绍
ss命令 用来显示处于活动状态的套接字信息。ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。
2.ss命令帮助
1-h, --help 帮助信息 2-V, --version 程序版本信息 3-n, --numeric 不解析服务名称 4-r, --resolve 解析主机名 5-a, --all 显示所有套接字(sockets) 6-l, --listening 显示监听状态的套接字(sockets) 7-o, --options 显示计时器信息 8-e, --extended 显示详细的套接字(sockets)信息 9-m, --memory 显示套接字(socket)的内存使用情况 10-p, --processes 显示使用套接字(socket)的进程 11-i, --info 显示 TCP内部信息 12-s, --summary 显示套接字(socket)使用概况 13-4, --ipv4 仅显示IPv4的套接字(sockets) 14-6, --ipv6 仅显示IPv6的套接字(sockets) 15-0, --packet 显示 PACKET 套接字(socket) 16-t, --tcp 仅显示 TCP套接字(sockets) 17-u, --udp 仅显示 UCP套接字(sockets) 18-d, --dccp 仅显示 DCCP套接字(sockets) 19-w, --raw 仅显示 RAW套接字(sockets) 20-x, --unix 仅显示 Unix套接字(sockets) 21-f, --family=FAMILY 显示 FAMILY类型的套接字(sockets),FAMILY可选,支持 unix, inet, inet6, link, netlink 22-A, --query=QUERY, --socket=QUERY 23 QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY] 24-D, --diag=FILE 将原始TCP套接字(sockets)信息转储到文件 25 -F, --filter=FILE 从文件中都去过滤器信息 26 FILTER := [ state TCP-STATE ] [ EXPRESSION ]
3.查看某个服务监听端口
根netstat用法一样,但是显示的信息更为详细。
1[root@master ~]# ss -tunlp |grep 100 2tcp LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=3648,fd=13)) 3tcp LISTEN 0 128 *:10051 *:* users:(("docker-proxy",pid=6172,fd=4)) 4tcp LISTEN 0 100 ::1:25 :::* users:(("master",pid=3648,fd=14)) 5tcp LISTEN 0 128 :::10051 :::* users:(("docker-proxy",pid=6179,fd=4)) 6
四、使用lsof命令
1.lsof命令介绍
lsof命令 用于查看你进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP)。需要root用户权限执行。
2.lsof命令帮助
1-a:列出打开文件存在的进程; 2-c<进程名>:列出指定进程所打开的文件; 3-g:列出GID号进程详情; 4-d<文件号>:列出占用该文件号的进程; 5+d<目录>:列出目录下被打开的文件; 6+D<目录>:递归列出目录下被打开的文件; 7-n<目录>:列出使用NFS的文件; 8-i<条件>:列出符合条件的进程(协议、:端口、 @ip ) 9-p<进程号>:列出指定进程号所打开的文件; 10-u:列出UID号进程详情; 11-h:显示帮助信息; 12-v:显示版本信息
3.安装lsof工具
默认在centos7.6最小化安装中没有此工具,需要手动安装lsof工具。
1yum -y install lsof
4.查看端口号下所有进程
1[root@master ~]# lsof -i :10051 2COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME 3docker-pr 6172 root 4u IPv4 1470713 0t0 TCP *:zabbix-trapper (LISTEN) 4docker-pr 6179 root 4u IPv6 1468048 0t0 TCP *:zabbix-trapper (LISTEN) 5
五、使用fuser命令
1.fuser命令介绍
fuser命令 用于报告进程使用的文件和网络套接字。fuser命令列出了本地进程的进程号,那些本地进程使用file,参数指定的本地或远程文件。
2.fuser命令帮助
1-a:显示命令行中指定的所有文件; 2-k:杀死访问指定文件的所有进程; 3-i:杀死进程前需要用户进行确认; 4-l:列出所有已知信号名; 5-m:指定一个被加载的文件系统或一个被加载的块设备; 6-n:选择不同的名称空间; 7-u:在每个进程后显示所属的用户名。
3.安装fuser工具
默认在centos7.6最小化安装中没有此工具,需要手动安装fuser工具。
1 yum -y install psmisc 2
4.查看某个服务详细信息
- 先检查某个端口对应进程的PID
1[root@master ~]# fuser 10051/tcp 210051/tcp: 6172 6179 3
- 使用ps查询对应进程详细信息
1[root@master ~]# ps -ef |grep 6172 2root 6172 6908 0 Feb25 ? 00:00:00 /usr/local/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 10051 -container-ip 172.66.10.12 -container-port 10051 3root 24000 18100 0 15:48 pts/0 00:00:00 grep --color=auto 6172 4[root@master ~]# ps -ef |grep 6179 5root 6179 6908 0 Feb25 ? 00:00:00 /usr/local/bin/docker-proxy -proto tcp -host-ip :: -host-port 10051 -container-ip 172.66.10.12 -container-port 10051 6root 24002 18100 0 15:48 pts/0 00:00:00 grep --color=auto 6179 7 8
5.查询端口及对应进程
1[root@master ~]# fuser -v -n tcp 10051 2 USER PID ACCESS COMMAND 310051/tcp: root 6172 F.... docker-proxy 4 root 6179 F.... docker-proxy 5
