任何人都可以建议我使用数据包拦截软件吗?
我的要求是阻止局域网内的数据包。(互联网不会出现问题)。
假设CLIENT_A与同一网络(LAN)中的CLIENT_B进行通信。
我想要一个CLIENT_C(在同一个网络中)捕获(我可以使用jpcap库的嗅探器)并阻止CLIENT_A发送到CLIENT_B的数据包。
如何通过LAN阻止数据包..?
提前谢谢。
此致 Veenit Shah
答案 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来代替写一个。
但是要利用这一点,你需要了解网络是如何工作的,而且我不确定你是否会根据你的问题做到这一点。所以你需要学习很多关于以太网(假设你使用以太网)和不同的网络层。我不确定这方面的资源。