在netstat中检索套接字状态的系统调用是什么?

时间:2019-03-02 19:05:31

标签: linux sockets

在netstat中检索套接字状态的系统调用是什么? 我实际上对netstat的实现方式不感兴趣,但对哪种系统调用可以检索该信息并不感兴趣。 getsockopt()似乎获得套接字的静态信息,而不是套接字的动态/运行状态。

根据{{​​3}}所说,

ssnetstat似乎采取了不同的方法:

  

该实用程序提供了一种新方法,该方法应该可以很好地扩展。我将不在这里描述技术细节,而将专注于命令的描述。唯一要说的是,加载模块tcp_diag并不是一个坏主意,可以在iproute2的目录Modules中找到该模块。如果不这样做,此ss将起作用,但它会退回到/ proc并像netstat一样变慢,嗯,还快一点(请参阅“某些数字”一节)。

ss是否使用某些系统调用来获取套接字的运行状态?

谢谢。

1 个答案:

答案 0 :(得分:1)

它使用“ netlink协议”从网络堆栈,内核中的传输层引擎中获取数据。

netlink协议比这更通用,因此不仅出于完整性考虑还涵盖套接字统计信息。

对于套接字,它是 [http://man7.org/linux/man-pages/man7/sock_diag.7.html][sockdiag]子系统。

还有更新的ss实现,例如[https://github.com/svinota/pyroute2/blob/master/cli/ss2][ss2]在python中。从那里开始,细读它,就可以了。

干杯。