FreeBSD/Unix如何找出某个端口的监听程序

时间:2019-11-20 08:54:07  来源:igfitidea点击:

如何找出哪个程序在监听某个端口?
如何查找当前绑定到某个端口的进程?

在FreeBSD中,可以使用下面的命令来查看网络连接情况。

  • netstat命令用于查看网络状态,包括打开的端口,tcp/udp连接等。
  • sockstat命令显示打开的套接字。
  • lsof命令列出打开的文件,例如网络套接字和磁盘上的文件。

使用sockstat命令查找在特定端口上侦听的进程

带有标志的netstat命令的示例:

## Show listening sockets ##
sockstat -l
 
## Show listening sockets for IPv4 only ##
sockstat -4 -l
 
## Show listening sockets for IPv6 only ##
sockstat -6 -l

其中

  • USER:打开套接字的用户。
  • COMMAND:套接字对应的命令。
  • PID:负责/保持套接字命令的进程ID。
  • FD:套接字的文件描述符号。
  • PROTO:与Internet套接字的套接字关联的传输协议,或UNIX套接字的套接字的类型(流或数据报)。LOCAL ADDRESS:对于Internet套接字,这是套接字的本地端绑定的地址至。对于绑定的UNIX套接字,它是套接字的文件名。对于其他UNIX套接字,它是向右箭头,后跟端点文件名,或??。如果无法确定端点。
  • FOREIGN ADDRESS :(仅用于Internet套接字)套接字的外部端所绑定的地址。

查找指定的端口

您可以使用grep命令选择某些端口。

例如,检查端口22和80是否打开:

sockstat -4 -l | grep :22
sockstat -4 -l | grep :80

输出示例:

root     sshd       642   4  tcp4   *:22                  *:*

只显示连接的套接字

语法为:

sockstat -c
sockstat -c -4
sockstat -c -4 | grep ssh
sockstat -c -4 | grep 22
`root     sshd       740   3  tcp4   192.168.1.142:22      192.168.1.4:55115`

netstat命令查看打开的端口及对应进程

这里相当于netstat:

netstat -a -n | grep LISTEN
netstat -a | egrep 'LISTEN|Proto|Active'
netstat -a | egrep 'Proto|LISTEN'

输出示例:

Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address          Foreign Address        (state)
tcp4       0      0 localhost.smtp         *.*                    LISTEN
tcp4       0      0 *.ssh                  *.*                    LISTEN
tcp6       0      0 *.ssh                  *.*                    LISTEN
Active UNIX domain sockets

在FreeBSD中,可以使用/etc/services文件来查看标准端口和服务之间的对应关系。

例如,查看631和22端口对应的服务。

$ grep -w 631 /etc/services
`ipp		631/tcp	   #IPP (Internet Printing Protocol)
ipp		631/udp	   #IPP (Internet Printing Protocol)`


$ grep -w 22 /etc/services
`ssh		 22/sctp   #Secure Shell Login
ssh		 22/tcp	   #Secure Shell Login
ssh		 22/udp	   #Secure Shell Login`

使用lsof命令找出打开端口的进程

安装lsof命令:

# cd /usr/ports/sysutils/lsof/ && make install clean

或使用pkg命令安装

# pkg install sysutils/lsof

查看打开指定端口的进程

lsof -i :port
lsof -i tcp:portNumber
lsof -i udp:portNumber

示例,检查哪个进程打开了80端口?

lsof -i :80

检查哪个进程打开了22端口?

lsof -i :22

输出示例:

COMMAND PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
sshd    642 root    3u  IPv6 0xfffff8000961a400      0t0  TCP *:ssh (LISTEN)
sshd    642 root    4u  IPv4 0xfffff8000961a000      0t0  TCP *:ssh (LISTEN)
sshd    740 root    3u  IPv4 0xfffff800094dec00      0t0  TCP 192.168.1.142:ssh->192.168.1.4:55115 (ESTABLISHED)

查看所有的TCP进程及其PID:

lsof -iTCP -sTCP:LISTEN
lsof -iTCP -sTCP:LISTEN -P -n
lsof -n -P -i +c 15