应用程序使用哪些端口

应用程序使用哪些端口

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

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

我怎样才能做到这一点?

答案1

你可以使用netstat它。参见示例(我搜索了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

解释:

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

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

在上面的输出中,你会看到有一个 ssh 守护进程 ( sshd),其 PID在所有网络接口 ( ) 上的1725端口处监听。此外,还有一个 ssh 客户端进程 (PID ) 连接到端口号为 的IP 地址,我的 IP 地址是,我的外部端口是。你会看到连接已建立。因此我通过 登录。220.0.0.024911.2.3.5221.2.3.445734ssh

答案2

另一个可以做到这一点的工具是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)
#

使用的选项如下:

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

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

答案3

我们已经有了很好的答案,但它们只列出了命令运行时打开的端口。

strace是监视应用程序生命周期内打开的连接的正确工具:

strace -e socket,connect,close -f -o hipchat.strace.txt hipchat

输出将显示其他信息,例如 UDP 请求和已打开但已关闭的连接。

答案4

ss -a4 | less

我假设您说的是 IPv4...如果不是,您可以将前面命令中的 4 替换为 6。-a 参数用于显示所有端口(监听和非监听)。如果您不想在显示中解析名称,则可以将 -n 添加到参数中。

相关内容