应用程序使用哪些端口

Baz*_*Baz 12 networking linux tcp port diagnostic

我正在测试一个应用程序,它打开自己的端口(充当这些端口的服务器,因此侦听该端口),并且同一应用程序连接到其他应用程序绑定的端口(充当这些端口的客户端)。

我想大致了解一下应用程序创建了哪些端口以及它连接到哪些应用程序和端口。

我怎样才能做到这一点?

cha*_*aos 18

您可以netstat为此使用。请参阅示例(我为 grepped ssh):

netstat -putan | grep ssh
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1725/sshd
tcp        0      0 1.2.3.4:45734           1.2.3.5:22              ESTABLISHED 2491/ssh
tcp6       0      0 :::22                   :::*                    LISTEN      1725/sshd
Run Code Online (Sandbox Code Playgroud)

解释:

我经常使用参数-putan(因为它们很容易记住)。

  • -p:显示应用程序/进程的PID
  • -u: 显示 udp 端口​​/连接
  • -t: 显示 tcp 端口/连接
  • -a: 显示监听和非监听套接字
  • -n:数字输出(不要对主机名等进行 DNS 查找)

在上面的输出中,您会看到有一个 ssh 守护进程 ( sshd),其 PID1725正在侦听22所有网络接口 ( 0.0.0.0) 的端口。还有一个 ssh 客户端进程(PID 2491)连接到1.2.3.5端口号的 IP 地址22,我的 IP 地址是1.2.3.4,我的外部端口是45734. 您会看到连接已建立。因此我是通过ssh.


gow*_*awr 7

可以做到这一点的另一个工具是lsof

# lsof -i -a -p 1981
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP host.example.com:ssh (LISTEN)
# lsof -i -a -p 1981 -n
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP 10.1.2.3:ssh (LISTEN)
# lsof -i -a -p 1981 -n -P
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP 10.1.2.3:22 (LISTEN)
#
Run Code Online (Sandbox Code Playgroud)

使用的选项如下:

  • -i 打印出进程打开的互联网端口
  • -a 使所有选项都进行 AND 运算
  • -p 1981 显示进程 1981 的输出
  • -n 禁止主机名查找并显示 IP
  • -P 禁止服务查找并显示端口号

lsof优点是您可以指定要检查的进程,而不必从较大的输出中提取它。 netstat在系统上更可靠地可用,尽管lsof它变得比以前更加标准。