显示套接字选项

dim*_*mba 10 linux shell

我如何从shell中看到设置了哪些套接字选项?特别是我很有兴趣知道是否设置了SO_BROADCAST?

Ada*_*eld 8

你可以用lsof(8).如果PID是进程ID并且FD是您感兴趣的套接字的文件描述符编号,则可以执行以下操作:

lsof -a -p PID -d FD -T f
Run Code Online (Sandbox Code Playgroud)

列出进程的所有IPv4套接字:

lsof -a -p PID -i 4 -T f
Run Code Online (Sandbox Code Playgroud)

这将打印出套接字选项SO=,以及其他信息.请注意,如果没有设置任何选项,您将获得空字符串,因此您将看到类似的东西等SO=PQLEN=0.要测试SO_BROADCAST,只需grep SO_BROADCAST后面的字符串SO=,例如

if lsof -a -p PID -d FD -T f | grep -q 'SO=[^=]*SO_BROADCAST'; then
    # socket has SO_BROADCAST
else
    # it doesn't
fi
Run Code Online (Sandbox Code Playgroud)

  • 在我的系统(RHEL 5.3)上,lsof的标志"-T"可以接受"q"和"s",但不能接受"f".还有其他解决方案吗? (3认同)

And*_*hen 5

在 Linux 上,您可以使用knetstat内核模块来检查套接字选项,包括SO_BROADCAST.