网站搜索

15 个有用的“Sockstat 命令示例”来查找 FreeBSD 中的开放端口


Sockstat 是一个多功能命令行实用程序,用于在 FreeBSD 中显示网络和系统打开的套接字。主要是FreeBSD中默认安装了sockstat命令,它通常用于显示FreeBSD系统上打开某个网络端口的进程的名称。

但是,sockstat 还可以根据协议版本(两个 IP 版本)、连接状态以及守护程序或程序绑定和侦听的端口列出打开的套接字。

另请阅读:用于检查网络连接的 20 个有用的“netstat”命令示例

它还可以显示进程间通信套接字,通常称为 Unix 域套接字或 IPC。 Sockstat 命令与 grep 过滤器相结合或通过 awk 实用程序进行管道传输被证明是本地网络堆栈的强大工具。

它可以根据拥有套接字的用户、网络套接字的文件描述符或打开套接字的进程的 PID 来缩小打开连接的结果。

在本指南中,我们将列出 FreeBSD 中的 sockstat 命令行网络实用程序的一些常见使用示例,但也非常强大。

要求

  1. FreeBSD 11.1 安装指南

1.列出FreeBSD中所有打开的端口

无需任何选项或开关即可简单执行,sockstat 命令将显示 FreeBSD 系统中所有打开的套接字,如下面的屏幕截图所示。

sockstat

sockstat 输出中显示的值描述如下:

  • USER :套接字的所有者(用户帐户)。
  • COMMAND :打开套接字的命令。
  • PID:拥有套接字的命令的进程ID。
  • FD :套接字的文件描述符号。
  • PROTO :与打开的套接字或套接字类型(对于 UNIX 套接字的 UNIX 域套接字(数据报、流或 seqpac))关联的传输协议(通常是 TCP/UDP)。
  • 本地地址:它代表基于 IP 的套接字的本地 IP 地址。对于 Unix 套接字,它表示附加到套接字的端点文件名。 <代码>“?? ” 表示法意味着无法识别或建立套接字端点。
  • FOREIGN ADDRESS :套接字连接到的远程 IP 地址。

2. 列出 FreeBSD 中监听或打开的端口

使用 -l 标志执行时,sockstat 命令将显示网络堆栈中打开的所有侦听套接字以及系统中某种本地数据处理涉及的所有打开的 UNIX 域套接字或命名管道。

sockstat -l

3. 列出 FreeBSD 中打开的 IPv4 端口

要仅显示 IPv4 协议的所有打开的套接字,请发出带有 -4 标志的命令,如以下示例所示。

sockstat -4

4. 列出 FreeBSD 中打开的 IPv6 端口

与 IPv4 版本类似,您还可以通过发出如下所示的命令来仅显示 IPv6 打开的网络套接字。

sockstat -6

5. 列出 FreeBSD 中 TCP 或 UDP 打开的端口

要仅显示基于指定网络协议(例如 TCPUDP)的网络套接字,请使用 -P 标志,后跟协议的参数名称。

可以通过检查 /etc/protocols 文件的内容找到协议名称。目前sockstat工具不支持ICMP协议。

仅显示 TCP 套接字
sockstat -P tcp

仅显示 UDP 套接字
sockstat -P udp

链接两个协议。

sockstat –P tcp,udp

6. 列出 TCP 和 UDP 特定端口号

如果要根据本地或远程端口号显示所有 TCP 或 UDP IP 打开的套接字,请使用以下命令标志和语法,如下面的屏幕截图所示。

sockstat -P tcp -p 443             [Show TCP HTTPS Port]
sockstat -P udp -p 53              [Show UDP DNS Port] 
sockstat -P tcp -p 443,53,80,21    [Show Both TCP and UDP]

7. 列出 FreeBSD 中打开和连接的端口

要显示所有打开和连接的套接字,请使用 -c 标志。如下面的示例所示,您可以通过发出命令列出所有 HTTPS 连接的套接字或所有 TCP 连接的套接字。

sockstat -P tcp -p 443 -c
sockstat -P tcp -c

8. 列出 FreeBSD 中的网络监听端口

要列出处于侦听状态的所有打开的 TCP 套接字,请附加 -l-s 标志,如以下示例所示。作为无连接协议,UDP 不维护有关连接状态的信息。

UDP 打开的套接字无法使用其状态来显示,因为 udp 协议使用数据报来发送/接收数据,并且没有内置机制来确定连接的状态。

sockstat -46 -l -s

9. 列出 Unix 套接字和命名管道

Unix 域套接字以及其他形式的本地进程间通信(例如命名管道)可以通过 sockstat 命令使用 -u 标志来显示,如下图所示。

sockstat -u

10. 列出 FreeBSD 中应用程序打开的端口

Sockstat 命令输出可以通过 grep 实用程序进行过滤,以显示特定应用程序或命令打开的端口列表。

假设您想列出与 Nginx Web 服务器关联的所有套接字,您可以发出以下命令来实现该任务。

sockstat -46 | grep nginx

要仅显示与 Nginx Web 服务器关联的已连接套接字,请发出以下命令。

sockstat -46 -c| grep nginx

11. 列出 HTTPS 连接的协议

您可以通过运行以下命令列出与 HTTPS 协议关联的所有已连接套接字以及每个连接的状态。

sockstat -46 -s -P TCP -p 443 -c

12. 列出 HTTP 远程套接字

要列出与 HTTP 协议关联的所有远程套接字,您可以运行以下命令组合之一。

sockstat -46 -c | egrep '80|443' | awk '{print $7}' | uniq -c | sort -nr
sockstat -46 -c -p 80,443 | grep -v ADDRESS|awk '{print $7}' | uniq -c | sort -nr

13. 按 IP 地址查找最高 HTTP 请求

如果您想了解每个远程 IP 地址请求了多少个 HTTP 连接,请发出以下命令。如果您想确定您的 Web 服务器是否受到某种 DDOS 攻击,此命令非常有用。如有怀疑,您应该调查请求率最高的 IP 地址。

sockstat -46 -c | egrep '80|443' | awk '{print $7}' | cut -d: -f1 | uniq -c | sort –nr

14. 列出 DNS 打开的套接字

如果您在您的场所配置了缓存和转发 DNS 服务器以通过 TCP 传输协议为内部客户端提供服务,并且您想要显示所有套接字的列表
由解析器打开,以及每个套接字连接的状态,执行以下命令。

sockstat -46 -P tcp –p 53 -s

15. 查询本地域上的 TCP DNS

如果网络上没有 DNS 流量,您可以通过运行以下 dig 命令从本地计算机的控制台手动触发 TCP 套接字上的 DNS 查询。然后,发出上述命令以列出所有解析器套接字。

dig +tcp  www.domain.com  @127.0.0.1

就这样!与 netstat 和 lsof 命令行实用程序一起,sockstat 命令行是一个功能强大的实用程序,用于获取网络信息并对 FreeBSD 网络堆栈以及网络相关进程和服务的多个方面进行故障排除。

Linux 中的 FreeBSD sockstat 命令对应项由 netstat 或新的 ss 命令表示。不管你信不信,基于sockstat实用程序,你可以找到一个为Android操作系统开发的类似应用程序,名为SockStat – Simple Netstat GUI。