数据包拦截器软件

时间:2010-02-24 14:52:41

标签: java networking blocking packet lan

任何人都可以建议我使用数据包拦截软件吗?

我的要求是阻止局域网内的数据包。(互联网不会出现问题)。

假设CLIENT_A与同一网络(LAN)中的CLIENT_B进行通信。

我想要一个CLIENT_C(在同一个网络中)捕获(我可以使用jpcap库的嗅探器)并阻止CLIENT_A发送到CLIENT_B的数据包。

如何通过LAN阻止数据包..?

提前谢谢。

此致 Veenit Shah

3 个答案:

答案 0 :(得分:2)

通常使用单独的防火墙(例如在路由器或网关盒中)或在一台或两台客户机上运行的防火墙软件来完成此类操作。

这不是在Java中实现它的明智之举。

编辑 - 回应此跟进

  

我知道这样的事情在Java中是不可取的......但仍然不得不实现它。所以有任何方法可以这样做吗?

让我们假设您正在讨论在Linux计算机上实现客户端防火墙。我可以想到两种方法:

  • 您可以使用Process.execute()和朋友来运行操作OS内核网络数据包过滤器的Linux iptables(8)管理实用程序。这是最简单的基于Java的方法。但它要求您的Java应用程序以root运行。

  • 您可以对iptables(8)正在做的事情进行逆向工程来操纵数据包过滤器并在Java中编写相同的功能。这将是更多的编码工作,包括通过JNI或JNA在C中实现部分功能。您的应用需要以root运行。

但是,更简单的方法是从命令行运行iptables(8),或使用基于GUI的精美管理工具进行更改。

请注意,在上述方案中,防火墙本身未在Java中实现。您所要做的就是从Java应用程序管理防火墙。我想不出任何在Java中实际进行过滤/阻塞的方法,甚至是远程实用的。

答案 1 :(得分:1)

您可能需要一些arp攻击事件才能将数据包从CLIENT-A重定向到Client-C而不是CLIent-B。

我认为这不是一个好主意。

答案 2 :(得分:0)

如果您正在客户端C上读取网络上的数据包,则客户端B已经收到它,因此阻止它为时已晚。如果您使用的是交换式以太网,则客户端C甚至不会看到发送给B的数据包。

执行此操作的唯一方法是让A通过C与B通信,然后C可以决定是否应该发送数据包。这称为防火墙。你可以在Linux上使用iptables来代替写一个。

但是要利用这一点,你需要了解网络是如何工作的,而且我不确定你是否会根据你的问题做到这一点。所以你需要学习很多关于以太网(假设你使用以太网)和不同的网络层。我不确定这方面的资源。