![]() |
1
2
不幸的是,nailer的答案只捕获sol-tcp级别的套接字选项,而不捕获sol-socket级别的选项(如so-keepalive)。 一些发行版与SystemTap一起提供了一些示例。其中之一是pfiles.stp,您可以使用它从正在运行的进程的套接字中获取套接字选项。文件中的示例:
|
![]() |
2
2
这在Python中是不可能的。 Linux内核不提供/procfs中报告TCP套接字状态的机制(与BSD和其他类似于Unix的OSS不同)。由于内核不公开这些信息,所以我们无法通过python-linux procfs模块或类似模块看到这些信息。 问:为什么lsof不为我的方言报告socket选项、socket状态和tcp标志和值?艾斯。 a.“socket选项、socket状态和tcp标志和值通过/proc文件系统不可用。” 然而,systemtap的网络tapset提供了一个tcp.setsockopt断点,可以用来截取进程设置的套接字选项,但是这将在stap而不是python中处理。 我创建了所需的tapset,如下所示:
|
![]() |
3
1
套接字库实际上是创建新的套接字并对其进行操作。由于明显的安全原因,在其他进程中创建的套接字不可见:您不希望任何随机应用程序更改您管理自己的套接字的方式,或者更糟的是,在您之前从套接字读取数据。因此,套接字是由句柄引用的系统对象,具有(在体面的操作系统上)对其应用的访问权限。这就是为什么您不能列出由其他进程创建的现有套接字的原因。 最终,您可能会找到一种检索套接字句柄的方法(应该有一种方法,我记得看到了一种在Windows上列出系统句柄的方法),但这仍然是非常特定于您的操作系统的,因此在Python中可能不可用,并且您可能仍然没有在这些套接字上执行任何操作的权利。 现在,如果您只想知道特定应用程序是如何实现特定功能的,那么还有其他方法:最明显的方法是安装代理或防火墙(我记得我的Kerio WinRoute防火墙列出了套接字选项),或者只是询问StackOverflow如何实现此功能。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 6 月前 |
![]() |
user2138149 · 双栈网络服务器无法按预期处理ipv4请求 7 月前 |
![]() |
Marco · PyCharm Linux系统文件上os.stat异常 8 月前 |