在netstat中检索套接字状态的系统调用是什么?
我实际上对netstat的实现方式不感兴趣,但对哪种系统调用可以检索该信息并不感兴趣。 getsockopt()
似乎获得套接字的静态信息,而不是套接字的动态/运行状态。
ss
和netstat
似乎采取了不同的方法:
该实用程序提供了一种新方法,该方法应该可以很好地扩展。我将不在这里描述技术细节,而将专注于命令的描述。唯一要说的是,加载模块tcp_diag并不是一个坏主意,可以在iproute2的目录Modules中找到该模块。如果不这样做,此ss将起作用,但它会退回到/ proc并像netstat一样变慢,嗯,还快一点(请参阅“某些数字”一节)。
ss
是否使用某些系统调用来获取套接字的运行状态?
谢谢。
答案 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中。从那里开始,细读它,就可以了。
干杯。