1

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

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.xxx' 看起来像一个 IP 地址,但在某些输出上它是空的,没有数字。的第二个变量laddr有时是 3 位数,有时是 5 位数。这些数字代表什么?

我的最后一个问题是,我找到开放端口的方法是否正确?我正在尝试连接计算机,因此我首先尝试在我身上找到开放的端口。

4

2 回答 2

1

Apid是“进程 ID”,系统上运行的每个进程都有一个唯一标识符,因此您可以调整其参数,或在它运行时向其发送信号,例如“终止”、“停止”、“继续”。

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)

如果您这样做是为了连接到另一台计算机,则无需这样做 - 通常在创建传出套接字时为您分配源端口,因此您无需担心。

于 2016-06-03T23:02:49.383 回答
0

很难“连接”到“开放”端口。打开端口时,打开该端口的任何程序都在侦听该端口。

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

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

于 2016-06-04T00:30:11.457 回答