如何在Linux中查找进程ID打开的端口?
假设进程的PID已知
Suppose the PID of the process is already known
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
假设进程的PID已知
Suppose the PID of the process is already known
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(8)
--all
显示监听和非监听套接字。--program
显示socket所属程序的PID和名称。您还可以使用端口扫描器,例如 Nmap。
--all
show listening and non-listening sockets.--program
show the PID and name of the program to which socket belongs.You could also use a port scanner such as Nmap.
您可以使用以下命令:
You can use the command below:
附带说明一下,netstat -ao 将读取 /proc/PID/tcp 等以查看进程打开的端口。 这意味着它读取的信息是由系统(linux KERNEL)提供的,而绝不是直接通过网络接口或其他方式查找。
lsof 也是如此。
如果您这样做是为了安全措施,那么您就失败了。 你永远不应该(永远)相信 netstat 的输出,即使你 100% 确定你实际上正在运行一个真正的 netstat 程序(而不是木马版本)或任何其他读取 /proc 文件系统的程序。 有些人似乎认为 netstat、ls、ps 或任何其他标准 unix 工具会执行某种魔法并从源轮询信息,事实是它们都依赖于 /proc 文件系统来获取所有数据,这很容易被 rootkit 或虚拟机管理程序破坏。
As a side note, netstat -ao will read the /proc/PID/tcp etc to see the ports opened by the process. This means that its reading information supplied by the system (the linux KERNEL), and is in no way directly looking on the network interface or other means.
Same goes for lsof.
If you are doing this as a security measure, you failed. You should never (NEVER EVER) trust the output of netstat, even if you are 100% sure you are in fact running a real netstat program (as opposed to a trojaned version) or any other program that reads the /proc filesystem. Some people seem to think that netstat, ls, ps or any other of the standard unix tools do some sort of magic and poll information from the sources, the truth is all of them rely on the /proc filesystem to get all of their data, which can be easily subverted by a rootkit or hypervisor.
您可以将 netstat 命令行工具与
-p
命令结合使用行参数:示例部分给出了以下示例:
You can use the netstat command line tool with the
-p
command line argument:The example section gives this example:
在某些嵌入式设备或旧版本的 Linux 中,问题是
netstat
没有可用的--process
或-p
选项。以下脚本显示了进程及其 IP 和端口,您必须是 root。
输出如下:
In some embedded devices or with old version of Linux, the problem is
netstat
do not have--process
or-p
options available.The following script shows process with its IP and port, you must be root.
The output is like:
通过ls可以知道进程的路线。
示例:
fuser 命令表示进程为:2054
进程路径显示
提取自:https://www.sysadmit.com/2018/06/linux-que-proceso-usa-un-puerto.html
图像示例
With ls you can know the process route.
Example:
The fuser command says that the process is: 2054
The process path appears
Extracted from: https://www.sysadmit.com/2018/06/linux-que-proceso-usa-un-puerto.html
Image example
我添加了 IPv6 支持并进行了一些修复。 另外,在我的系统上,IP 地址的八位字节是相反的。 依赖项仅针对 posix shell、awk 和 cut。
我的版本可以在
Github
I've added IPv6 support and made a few fixes. Additionally on my system the octets of the IP address are reversed. Dependencies are only to posix shell, awk and cut.
My Version can be found on
Github
这对我有用,是具有详细流程信息的唯一选项:
1234 是我正在寻找的端口号。
This worked for me, was the only option with detailed process info:
1234 is the port number I'm looking for.