【问题标题】:How to get active port information (recreate `netstat command`) in Solaris with C++?如何使用 C++ 在 Solaris 中获取活动端口信息(重新创建“netstat 命令”)?
【发布时间】:2019-09-15 04:37:51
【问题描述】:

我想使用 C++ 重新创建 netstat 命令以获取所有活动端口信息(特别是 netstat -f <unix/inet/inet6> -u)。我已经在 Windows、Linux 和 macOS 上完成了这项工作。在我认为与 Solaris 最相似的 Linux 上,我解析了 /proc/net/tcp 等以获取此信息。这个文件在 Solaris 中不存在,我找不到类似的东西。我无法弄清楚 Solaris 上的 netstat 究竟在做什么来获取它的信息。

man netstat 在底部说“netstat 实用程序通过打开 /dev/tcp 并发出查询从系统获取 TCP 统计信息”。 /dev/tcp 是一个符号链接 tp devices/pseudo/tcp@0:tcp 我不太确定这意味着什么或如何打开和查询它。

Solaris 的 netstat 使用哪些函数/头文件/文件?它在后台做什么?

我已经查找了它的源代码,但除了死链接或重定向到 Oracle 主页的链接之外似乎找不到任何东西。此源代码的有效链接将回答我的问题

【问题讨论】:

  • 记住:在像 ***x 这样的系统上,一切都是文件。
  • 您是否考虑过查看netstat 的Solaris 端口的源代码?这就是我首先要做的。
  • OpenSolaris 是开源的。闲暇时看看他们的 netstat 实现。或者,dtracenetstat.
  • @JesperJuhl 这是我的第一个想法。但是我遇到的链接都死了。这些链接是cvs.opensolaris.org/source/xref/netvirt/usr/src/cmd/cmd-inet/…cvs.opensolaris.org/source/xref/netvirt/usr/src/cmd/cmd-inet/…。这些是我在尝试查找源代码时能找到的唯一线索。
  • @SergeyA 你知道那个代码在哪里吗?我找到的指向他们代码的链接 a) 显示“我们很抱歉 java.net 站点已关闭。”或重定向到 Oracle 主页

标签: c++ networking port solaris netstat


【解决方案1】:

Solaris /proc/ procfs 有进程信息。没有别的,或者没有别的。 Linux 对其进行了扩展,实际上包括各种系统信息,而不仅仅是进程。

您可以随时使用模糊的ioctl()/dev/tcp 来获取您的信息。更好的是,您应该能够使用 SMF(服务管理框架)来查询某些网络服务的属性以获取您的信息(输入 svcs 以获取服务列表)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    相关资源
    最近更新 更多