0

我正在使用 libpcap 库。我使用 pcap.h 制作了一个数据包嗅探器 C 程序。现在我想通过eth0设备阻止来自我计算机上端口 23 的数据包。我尝试了 pcap_filter 函数,但它对阻塞没有用。请向我解释如何使用 c 程序编写此功能。

4

2 回答 2

3

Libpcap 仅用于数据包捕获,即使数据包可用于其他程序。它不执行任何网络设置,例如阻塞、打开端口。从这个意义上说,pcap 是一个纯粹的被动监控工具。

我不确定你想做什么。在我看来,有两种可能:

  1. 您实际上想要阻止数据包,以便您的计算机不会以任何方式处理它们。您应该为此使用防火墙并阻止此端口。任何体面的防火墙都应该能够相当容易地做到这一点。但是您应该知道,这也意味着没有人能够通过 ssh 进入您的系统。因此,如果您在远程系统上执行此操作,您实际上已经将自己锁定了。

  2. 您仍然希望其他程序 (sshd) 在端口 23 上进行侦听,但是所有这些流量都在您的应用程序中使您烦恼。Libpcap 有一个过滤功能,非常强大。使用此功能,您可以将小脚本传递给 libpcap 并让它只报告适合的数据包。在 pcap 文档中查找过滤以获取更多信息。但是,这不会“阻止流量”,只是阻止 pcap 捕获它。

于 2011-06-16T08:59:18.870 回答
2

实际上使用 pcap 您无法构建防火墙。这是因为在您的嗅探器中看到的数据包(使用 pcap 构建)只是网络堆栈消耗的数据包的副本(有或没有嗅探器)。换句话说:在 pcap 中使用过滤器会导致您看不到原始数据包的副本(据我所知,pcap 会编译过滤器并将其添加到内核中,这样就不会在内核级别进行复制);无论如何,原始数据包无论如何都会进入网络堆栈。

您的问题的解决方案很可能可以通过netfilter完成。您可以在 NF_IP_PRE_ROUTING 挂钩中注册,然后决定丢弃或允许给定的流量。

于 2012-10-23T11:52:21.127 回答