Ben*_*min 6 networking centos lsof tcp netstat
我有两台Linux服务器。假设它们是C和S。
C是客户S
在我的S机器上,我打字。
$ netstat -an | grep 已建立
tcp 0 0 192.168.1.220:3306 C:57010 已 建立
然后我可以知道C现在正在连接。
在C机器中,我也想知道打开57010端口并连接服务器的进程名称。我怎样才能做到这一点?当然,我有 root 权限。SC
War*_*ung 10
一种方式是说lsof -i:57010 -sTCP:ESTABLISHED。这会遍历内核的打开文件句柄表,查找使用该端口已建立 TCP 连接的进程。(网络套接字是 *ix 类型系统上的文件句柄。)您可以-sTCP:LISTEN在服务器端使用来仅过滤掉侦听器套接字。
由于工作方式lsof,它只能看到您的用户拥有的进程,除非您以 root 身份运行它。它也相当低效,因为典型的 *ix 系统在任何给定时间都会打开大量文件句柄。netstat另一个答案中给出的方法更快,通常访问要求较低。
lsof然而,该方法有一个很大的优势:并非所有 *ix 类型的操作系统都具有netstat用于在输出中包含进程名称的标志,lsof而已移植到您可能使用的每个 *ix 类型的操作系统中。netstat例如,OS X就是这种方式。它有一个-p选项,但它的作用与netstat -pLinux不同。
对于像您问题中的那个不常见的端口号,您通常可以在不添加lsof's-s标志的情况下逃脱,因为给定的机器不太可能同时连接到端口并侦听它的程序。添加端口号(如 HTTP 的 80)会很有帮助,在这种情况下,您可能会有多个程序同时使用该端口。
幸运的是,该-s标志在许多情况下是可选的,因为该用法仅适用于lsof4.81 及更高版本。在旧版本中,-s完全意味着别的东西!这是 2008 年的复古变化,但它仍然可以出人意料地咬人。lsof例如,RHEL 5 附带4.78。
您可以netstat -anp | grep 57010在服务器C上使用。但这只有在中间没有任何防火墙将端口57010映射到另一个端口时才有效。
只是为了完整性:
使用ss新的 Linux 网络实用工具集 ( iproute2):
ss -tp sport = :57010 dst 192.168.1.220
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5386 次 |
| 最近记录: |