Python psutil找到可用的端口

时间:2016-06-03 22:54:50

标签: python port python-3.4 psutil

我正在尝试找到所有可用的端口来连接计算机。我正在使用以下代码

import psutil
for proc in psutil.process_iter():
    print (proc)
    for x in proc.connections():
        if x.status == psutil.CONN_LISTEN:
            print (x)

print(proc)打印所有流程,例如psutil.Process(pid=5808, name='pythonw.exe')等。我的第一个问题是:pid变量是什么?那是一个港口吗?

其次,当我print (x)获得类似pconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=1, laddr=('xxx.x.x.x', xxxxx), raddr=(), status='LISTEN')的输出时,我理解laddr代表本地地址,但laddr的其他数字是什么? 'xxx.x.x.x'看起来像一个IP地址,但在某些输出上它是空的,没有数字。 laddr的第二个变量有时是3位数,有时是5位数。这些数字代表什么?

我的最后一个问题是,我是否正确找到开放端口?我正在尝试连接计算机,所以我想先找到我的开放端口。

2 个答案:

答案 0 :(得分:1)

pid是&#34;进程ID&#34;,系统上运行的每个进程都有唯一的标识符,因此您可以调整其参数,或在运行时发送信号喜欢&#39;终止&#39;,&#39;停止&#39;,&#39;继续&#39;

laddr=('xxx.x.x.x', xxxxx)是IP地址和端口号的元组。

在我的系统上运行我得到以下示例:

laddr=('127.0.0.1', 3128) - 仅在端口3128上侦听IPv4 localhost / loopback

laddr=('::1', 3128) - 侦听端口3128上的IPv6 localhost / loopback

laddr=('0.0.0.0', 80) - 侦听任何IPv4地址,端口80(http)

laddr=('::', 80) - 侦听任何IPv6地址,端口80(http)

如果你这样做是为了连接到另一台计算机,你不需要这样做 - 通常在创建一个外发套接字时为你分配源端口,所以你不要这样做需要担心它。

答案 1 :(得分:0)

很难“连接”到“开放”端口。当一个端口打开时,无论打开什么程序,端口都在监听该端口。

如果要查找免费的端口,您的脚本正在反向工作!您应该寻找未使用的端口。你不可能真的有两个程序在同一个端口上工作。所有端口1-65535都可以打开。

如果您想通过网络进行通信,则必须编写一个位于计算机A上的程序,该程序将侦听端口。然后,您让计算机B在所述端口上打开与计算机A的连接。此时,您从B写入的任何数据都将被发送到在A上运行的程序。