![Linux:检测任意端口上的 TCP 连接并执行一些代码](https://linux22.com/image/570699/Linux%EF%BC%9A%E6%A3%80%E6%B5%8B%E4%BB%BB%E6%84%8F%E7%AB%AF%E5%8F%A3%E4%B8%8A%E7%9A%84%20TCP%20%E8%BF%9E%E6%8E%A5%E5%B9%B6%E6%89%A7%E8%A1%8C%E4%B8%80%E4%BA%9B%E4%BB%A3%E7%A0%81.png)
我昨晚有了一个项目的想法,现在正试图找到解决方案来实现它。
我需要一种方法来检测一台机器上任何端口的 TCP/IP 连接,如果检测到连接,我需要运行一些代码(最好是 shell 脚本)来获取一些信息,例如远程主机和连接端口。
此外,我想将所有传入的数据包重定向到另一台机器,就像 NAT 一样 - 但使用脚本来保护连接。
我猜想这可能可以通过一些防火墙黑魔法来实现。遗憾的是,我不是这方面的专家,所以我寻求帮助和/或提示如何实现这样的目标。
答案1
如果您只需要跟踪 TCP(而非 UDP)连接,您的程序可以运行带有过滤器的“tcpdump”副本以仅监控设置了 SYN 标志的数据包。
这样做会使您的 shell 脚本成为一个更被动的监控器,而不是处于这些连接的关键路径中。换句话说,如果您的程序停止或连接过多,正常的网络功能不会中断。
答案2
我认为当数据包与防火墙规则匹配时运行 shell 脚本是不允许的,也是不明智的。
不过,你可以看看iptables QUEUE
和NFQUEUE
目标。它们可以将数据包传递到用户空间。然后,您可以编写自己的应用程序以您喜欢的方式处理这些数据包。当然,您必须编写所需的规则,以便仅将感兴趣的数据包传递给您的用户空间应用程序。