应用程序使用哪些端口[重复]


11

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

我想概述一下该应用程序创建的端口以及它连接到的应用程序和端口。

我怎样才能做到这一点?

Answers:


17

您可以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端口22上监听0.0.0.0。还有一个ssh客户端进程(PID 2491)连接到1.2.3.5端口号的IP地址22,我的IP地址是1.2.3.4,我的外部端口是45734。您会看到连接已建立。因此,我已通过登录ssh


在端口22上建立的TCP连接并不表示认证成功。必须在任何方向进行身份验证之前建立TCP。
jamesbtate

@Puddingfox是的,我们最好说“我已连接到该端口”,但是为了理解,我说“我已登录”,因为它更具说明性。
2015年

1
hehe ... `-putan'我很想纠正这个较小的拼写错误;)
James Mertz 2015年

当可用现代工具时,为什么要使用过时的工具?ss -lntpiproute2套件提供的实用程序。
MariusMatutiae

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)
#

使用的选项如下:

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

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


我想在启动要监视的应用程序之前运行此命令,但是我可以在启动应用程序之前确定该应用程序将获得什么pid吗?
巴兹(Baz)2015年

@Baz,如果要在应用程序启动时对其进行监视(例如,在知道其PID之前),则应尝试使用strace@olivecoder建议的解决方案。
gowenfawr


3

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

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

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

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


0

ss -a4 | less

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.