【问题标题】:How to do a netstat to see if a port is in use in C++?如何进行 netstat 以查看 C++ 中是否正在使用端口?
【发布时间】:2013-02-11 07:56:03
【问题描述】:

在命令提示符下,我可以运行 netstat 来查看某台机器上是否已使用单个端口,如下所示:

netstat -nap | grep <port-num>

我可以在 Linux 上调用 C++ 中的哪些函数来查看特定端口当前是否正在使用?我宁愿不对 netstat 本身进行系统调用。

【问题讨论】:

标签: c++ port netstat


【解决方案1】:

如果你这样做:

strace netstat -nap

您可以推断 netstat 正在做什么来获取该信息。

例如:

open directory: openat(AT_FDCWD, "/proc/2073/fd", ...) = 4)
get entries: getdents(4, /* 15 entries */, 32768)    = 360
read symbolic links: readlink("/proc/2073/fd/4", "socket:[48395]", 29) = 14 
that one was a socket connected on port 48395

【讨论】:

  • 我看不出 strace 是一个如何调用的 C++ 函数?
  • 这是特定于操作系统的内容,您将无法调用 C++ 函数。您将需要基本上使用一组特定于操作系统的库。 strace 命令为您提供 Linux 上的系统调用。这在 Windows 上不起作用,如果你想要结果,你需要使用另一个分析器(例如 Solaris 上的桁架)。然而,以上是在 Linux 上探索的最佳方式。顺便说一句,perreal 说的是,如果要复制“netstat -nap”的行为,则需要使用系统调用“openat”、“getdents”和“readlink”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
相关资源
最近更新 更多