繁体   English   中英

如何使用c检查linux中的端口是否空闲

[英]how to check if a port is free in linux using c

我从来没有写过这样的东西,如何在Linux环境中使用c程序检查端口是否为空,非常感谢。

ps寻找方法,不使用bind或connect并检查它是否失败。

编辑我不能使用绑定或连接,寻找更快的方法来找到连续免费的3k端口

更好的方法是使用下一个空闲端口,你也可以使用0端口绑定将使用下一个可用端口。

您可以通过以下代码获取bind()选择的端口

struct sockaddr_in sin;
socklen_t len = sizeof(sin);
if (getsockname(sock, (struct sockaddr *)&sin, &len) != -1)
  printf("port number %d\n", ntohs(sin.sin_port)); 

另请参阅如何绑定到任何可用端口? 更多信息

使用system()或popen()运行以下命令

netstat -antu

它将列出您机器的所有使用端口。 您需要解析该命令的输出,然后您将拥有所有繁忙端口的列表。

您如何直接使用bind(),如果不成功,您可以尝试另一个端口。

你刚刚检查过,一个端口是免费的,但是有人已经使用它将是一个竞争条件,所以检查端口是否空闲然后绑定它是不可能的

你也可以阅读/proc/net/tcp寻求帮助,但竞争条件仍然可能发生。

我有同样的问题,问题是你需要检查一个端口或许多端口

如果你只需要检查一个或几个使用绑定,如果它工作,那么它是免费的(并且不要忘记释放套接字)

如果像我一样你需要检查许多端口,那么对我有用的是运行system('netstat -tulpn')并将输出重定向到文件/变量然后在此信息搜索“:{yourport}”

为我工作

ps如果像我一样你需要让它们自由,告诉你的计算机不要随意分配该区域的端口

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM