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

时间:2014-07-28 06:17:34

标签: c linux

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

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

编辑 我无法使用绑定或连接,寻找更快的方法来找到连续空闲的3k端口

4 个答案:

答案 0 :(得分:2)

更好的方法是使用下一个空闲端口,你也可以使用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)); 

另请参阅How to bind to any available port?了解更多信息

答案 1 :(得分:0)

使用system()或popen()

运行以下命令
netstat -antu

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

答案 2 :(得分:0)

你如何直接使用bind(),如果它没有成功,你可以试试另一个端口。

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

您也可以阅读/proc/net/tcp寻求帮助,但竞争条件仍然存在。

答案 3 :(得分:-1)

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

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

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

为我工作

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