3

我想解决以下问题:假设我有两台计算机,A 和 B。

机器 A 从一个接口(我假设一个“tun”接口)获取所有 IP 数据包,将其发送到 Java 进程(可能会修改数据),然后使用 UDP 将其发送到机器 B。在机器 B 上,内容再次提取并发送到接口。

例如,在机器 A 上,我会键入一个ping B命令,然后 Java 进程(包括 IP 标头)将接收 ping 请求,使用 UDP 发送到机器 B,发送到接口,然后通过接口发送回复同一个隧道。我不能只使用socat,因为我想对 Java 进程中的数据做一些事情。

我尝试的是(假设在机器 A 上):

socat -u tun:123.123.123.123/24,iff-up,iff-no-pi udp:localhost:1234 &
socat -u udp-listen:1236 interface:tun0 &

所有流量(例如 ping 请求)都发送到端口 1234 上的本地 UDP 套接字。我的 Java 进程从该端口接收,将其发送到机器 B,然后在机器上发送到本地端口 1236。似乎 tun0 接口正确收到 ping。问题是两台机器之间的数据包循环,大概是因为第二个socat命令将数据包发送到 tun0,然后第一个命令又将数据包发送回 Java 等。

你知道如何在没有这个问题的情况下通过 Java 在 UDP 中传输 IP 吗?

4

0 回答 0