如何阻止来自计算机端口23的数据包?

时间:2011-06-16 08:22:17

标签: c linux networking libpcap packet-sniffers

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

2 个答案:

答案 0 :(得分:3)

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

我不确定你想做什么。据我所知,有两种可能性:

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

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

答案 1 :(得分:2)

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

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