linux - 当套接字绑定(bind)时通知我,就像 inotify 对文件所做的那样

标签 linux sockets gdb

我很想知道什么时候 SSH 进入我的 boxen 以创建反向隧道。目前我正在使用一个大 hack - 只是 lsof用几行脚本。所以我的目标是查看套接字何时调用 bind() ,理想情况下,获取它绑定(bind)到的端口(它在本地监听,因为它是反向隧道)和我将连接到的远程主机。我的lsof hack 基本上没问题,除了我没有收到即时通知而且它相当...... hacky :)

这对文件来说很容易;一旦一个文件做了几乎任何事情,inotify 就可以在 Linux 中告诉我。当然,其他操作系统也有类似的能力。

我正在考虑简单地跟踪 SSHD 日志并解析输出,但我的小“隧道监视器”守护程序需要能够在任何时间点找出隧道的状态,即使它还没有运行 SSHD 的全部时间。

我也有一个非常邪恶的 hack,我一直在考虑。这是一个在 /usr/sbin/sshd 上调用 GDB 的脚本, 然后在 bind 上设置断点.然后它使用选项 -d -p <listening port> 运行它-- 为这些隧道运行单独的 SSHD 没问题。然后它等待该断点被击中,并使用 GDB 的输入来获取远程主机的 IP 地址和 SSH 现在正在监听的本地 IP。同样,这是文本解析并打开了一些其他问题。

有没有“好的”方法来做到这一点?

最佳答案

我会使用 SystemTap 解决这样的问题。您可以使用它来探测内核以查看系统上的任何进程何时完成绑定(bind)。 http://sourceware.org/systemtap/

关于linux - 当套接字绑定(bind)时通知我,就像 inotify 对文件所做的那样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17795081/

相关文章:

c - linux中的ls命令使用哪个linux系统调用来显示文件夹/文件名?

java - 我的套接字服务器循环类正确吗?

python - 如何编写一个通过gdb调试子进程的自动化工具

objective-c - 在 Mac OS X 上的 GDB 中使用 strcmp() 的条件断点与 Objective-C 运行时冲突

linux - 无法进入 GDB 经过 Thumb/ARM 转换,未设置 ARM 断点

linux - 格式化为 ext 后无法安装可移动驱动器

c - 如何输出一个字符串,结果是(null)?

linux - 如何在 VDS 上设置 ALSA?

c++ - (linux)Socket 返回 0

c# - 为什么服务器应用程序会收到50%的客户端消息?