FreeBSD Unix找出在给定端口号上正在侦听哪些程序

时间:2020-01-09 10:38:41  来源:igfitidea点击:

如何使用命令行找到在FreeBSD Unix系统上某个端口上列出的进程/程序名称?我如何在FreeBSD服务器上查找当前绑定到给定网络端口的进程? 您可以使用以下任何一种命令行工具来显示FreeBSD操作系统上的网络连接,路由表和许多网络接口统计信息。

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

FreeBSD有一个名为sockstat和netstat工具的命令。
这些已经在标准的FreeBSD安装中。
解决方法:您需要从ports集合安装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`

(192.168.1.4 ==客户端IP和192.168.1.142 ==端口22的服务器IP)

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

尽管人们认为sockstat更为有限,但还是很高兴知道,因为有时它在收集某些信息时会更有用。
在FreeBSD上,您可以通过在/etc/services中查找来获得标准端口关联的列表。
如果要找出端口631的用途,可以使用以下命令例如:

$ grep -w 631 /etc/services

使用lsof命令确定特定端口上的进程/pid侦听

有些人已经从Linux迁移到BSD,例如lsof命令。
它不是netstat和sockstat之类的标准。
您将必须安装它。
目前没有包装。
以root身份安装。
因此,首先,使用以下端口安装lsof命令:

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

或使用pkg命令(警告这可能不适用于最新版本10.x):

# pkg install sysutils/lsof

输出示例:

Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
Checking integrity... done (0 conflicting)
The following 1 packages will be affected (of 0 checked):
 
New packages to be INSTALLED:
	lsof: 4.89.c,8
 
The process will require 224 KiB more space.
 
Proceed with this action? [y/N]: y
[1/1] Installing lsof-4.89.c,8...
[1/1] Extracting lsof-4.89.c,8: 100%

要发现进程名称,ppd和其他详细信息,解决方法:您需要使用以下语法:

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

例如,查看可以运行哪个进程在端口80或22上侦听:

lsof -i :80

或者

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

使用lsof实用工具找出哪个进程正在监听端口