如何通过我的程序路由所有数据包?
我想做一个应用程序,让所有的网络流量(不仅仅是HTTP流量)都通过我的应用。简单来说,我希望所有的流量都先到我的应用,而不是直接到达真正的目标,我的应用需要处理这些流量,然后再转发到一个服务器;输入也是一样,只不过是反过来的(服务器 -> 应用 -> 需要答案的程序)。有没有什么库或者类似的工具可以让这个应用的创建变得更简单?我希望能用Python或Java来实现,但如果真的需要的话,我也可以学习其他语言。
4 个回答
1
如果你想只处理TCP流量,其实用线程和套接字来实现是挺简单的。你需要为每个想要连接的服务器监听一个不同的端口。无论是用Java还是Python,你都得为每个要监听的端口创建一个“套接字”。
每当有新的连接进来时,你就要和服务器建立一个新的连接,并为这个连接创建两个新的线程。一个线程负责从客户端读取所有数据,然后把这些数据发送给服务器;另一个线程则是从服务器读取所有数据,然后把这些数据发送给客户端。当连接的任意一端关闭时,你就要关闭另一端,并结束这两个线程。
1
如果你在Linux系统上操作,建议你使用TUN/TAP设备。这是一种非常实用的工具,可以帮助你拦截网络流量并进行自定义处理。如果你不太了解这个,可以看看这个基础教程: http://backreference.org/2010/03/26/tuntap-interface-tutorial/
5
你想要使用的是一个数据包捕获库,你可以使用pcap,或者它在python或java中的实现或绑定。
不过,这些东西通常是在比较底层实现的,理想情况下是用C语言来写的。这里有一个教程教程。
补充:根据你的评论,你肯定想看看netfilter hooks。
顺便说一下,你也可以看看netfilter hooks。