我正在尝试找到所有可用的端口来连接计算机。我正在使用以下代码
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位数。这些数字代表什么?
我的最后一个问题是,我是否正确找到开放端口?我正在尝试连接计算机,所以我想先找到我的开放端口。
答案 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上运行的程序。