我如何知道某个端口是否在linux ubuntu上打开/关闭,而不是远程系统,使用python?如何在python中列出这些开放端口?
我想在Python中的localhost上获得任何随机打开的TCP端口.什么是最简单的方法?
当我运行以下代码时:
struct sockaddr_in sin;
int addrlen;
addrlen=sizeof(sin);
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr=inet_addr("123.456.789.112");
sin.sin_port=htons(0); // so that the kernel reserves a unique port for us
sd_server = socket(PF_INET, SOCK_STREAM, 0);
bind(sd_server, (struct sockaddr *) &sin, sizeof(sin));
getsockname(sd_server,(struct sockaddr*)&sin,&addrlen);
port=ntohs(sin.sin_port);
printf("port number = %d\n",port);
Run Code Online (Sandbox Code Playgroud)
根据套接字,我必须得到1024到5000之间的端口号,但是我的端口号大约是30,000.
我该怎么办?
可能重复:
在localhost上,如何选择一个空闲端口号?
我的要求与这个问题不同.
我正在使用python编写另一个进程的测试设置.另一个进程需要传递一个端口号(比如命令行参数).我无法硬编码一些随机端口号,因为许多用户通常会在同一个盒子中运行相同的测试.现在,如何在python中选择一个自由端口?
编辑:
我不是在python中创建一个套接字.我只需要将一个数字作为命令行参数传递给其他进程.
从DRH的回答中,我可以创建一个虚拟套接字,获取其端口号,关闭它并传递给实际进程.有没有更好的方法来做到这一点?
我本来想在 DGX A100 上设置 DDP(分布式数据并行),但它不起作用。每当我尝试运行它时,它就会挂起。我的代码非常简单,只需为 4 个 GPU 生成 4 个进程(为了调试,我只是立即销毁该组,但它甚至没有到达那里):
def find_free_port():
""" /sf/ask/95568581/ """
import socket
from contextlib import closing
with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s:
s.bind(('', 0))
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
return str(s.getsockname()[1])
def setup_process(rank, world_size, backend='gloo'):
"""
Initialize the distributed environment (for each process).
gloo: is a collective communications library (https://github.com/facebookincubator/gloo). My understanding is that
it's a library/API for process to communicate/coordinate with each other/master. It's a backend library.
export NCCL_SOCKET_IFNAME=eth0
export NCCL_IB_DISABLE=1
/sf/ask/4275277331/
https://pytorch.org/docs/stable/distributed.html#common-environment-variables
"""
if rank …Run Code Online (Sandbox Code Playgroud) 我有一个项目,我在其中生成子进程,它再次需要一个端口号来绑定。端口号是由我的 Python 脚本分配的,我只是在 49152 到 65535 之间随机选择一个端口。
我想验证该端口是否可用并且未被本地系统(*nix)上的任何其他工具使用。
从另一个问题我有这个片段:
import socket;
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex(('127.0.0.1',80))
if result == 0:
print "Port is open"
else:
print "Port is not open"
Run Code Online (Sandbox Code Playgroud)
我可以在我的情况下使用这个吗?这不会打开端口并且不会关闭它以供进一步使用吗?
我想要两个 Windows 应用程序,它们使用 Windows 套接字通过 TCP/IP 进行通信。在此,我希望我的程序自动选择可用的空闲端口来建立连接。
有没有办法使用 C 或 C++ 程序找到空闲 TCP 端口?
准确地说,我想自动检测服务器端的空闲端口,并让客户端知道相同的端口(用于连接到服务器)。
谢谢你的时间!
是否有一种惯用的方法来指定要绑定的特定地址,但是随机端口?
在我的应用程序中,我打开了几十个连接.我在connect()之前调用bind(),以便我可以指定应该与之建立连接的IP地址.但是,我必须自己找一个开放的端口.它现在工作正常,但如果我需要打开数千个连接,它可能会成为一个问题,因为找到一个开放的端口将变得越来越慢
int fd;
struct sockaddr_in addr;
fd = socket(AF_INET, SOCK_STREAM, 0);
while (TRUE)
{
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("192.168.0.1");
addr.sin_port = htons((rand() % 65000) + 1);
if (bind(fd, (struct sockaddr *)&addr, sizeof (struct sockaddr_in)) == 0)
break;
}
Run Code Online (Sandbox Code Playgroud)
我考虑过编写自己的"端口管理"系统,但我想我会先尝试看看操作系统是否已有功能,然后继续操作