我是网络编程的新手,并尝试了解通过 TUN/TAP 接口管理流量。
因为我几乎不具备系统编程技能,并且对 Java 有信心;我使用 OpenVPN tun/tap 驱动程序和现成的 Java 绑定。它适用于 TAP 模式。
作为示例应用程序,我试图模仿无加密、无身份验证客户端服务器 VPN 应用程序。
我可以捕获以太网帧数据包,但是对于路由部分,我失败了。(我可以修改路由/arp 表。)
有人知道 OpenVPN 如何将数据包从客户端发送到服务器,然后从服务器发送到目标。从 Java 中打开套接字看起来像是另一种选择;但我希望修改数据包(更改 IP 和/或 MAC 地址)并写回虚拟分路接口就足够了。是这样吗?
我可以注入数据包以发送其他位置,还是默认接收的数据包移动到应用层?
- 编辑:
情景
Client Tap0 _____ Server Tap0 ______ Target
Eth0 Eth0
目标:从客户端 Ping,通过点击接口移动,目标仅看到服务器 ip(匿名)
我到目前为止所取得的成就。
在客户端 tap0 接口捕获流量。
我在服务器 Tap 上转发流量,以便固定我在客户端-服务器之间使用 Java 套接字编程的东西。
现在我从服务器上的套接字读取数据包,并尝试使用 OpenVPN Tap 驱动程序的写入方法继续前进,但我不确定我在哪里失败。我在服务器 tap0 上看到带有 tcpdump 的数据包,但它们没有传递到服务器 eth0。
我最重要的问题是如果我修改数据包(ip,mac地址)并调用write方法,数据包是否有可能向前移动。(或者无论你改变什么它都会移动到应用层??)
任何帮助,将不胜感激。