Java socat:如何通过UDP创建双向IP隧道

Java socat:如何通过UDP创建双向IP隧道,java,udp,tunnel,socat,Java,Udp,Tunnel,Socat,我想解决以下问题:假设我有两台计算机,A和B 机器A从接口(我假设是“tun”接口)获取所有IP数据包,将其发送到Java进程(该进程可能会修改数据),并使用UDP将其发送到机器B。在机器B上,再次提取内容并发送到接口 例如,在机器A上,我会键入一个ping B命令,然后通过Java进程接收ping请求(包括IP头),使用UDP发送到机器B,发送到一个接口,然后该接口将通过相同的隧道发送回复。我不能只使用socat,因为我想在Java进程中处理数据 我尝试的是(假设在机器A上): 所有流量(例如

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

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

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

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

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


您知道如何在UDP over Java中通过隧道传输IP而不出现此问题吗?

不要使用ping,它会在tun/tap端受阻。请参阅
socat -u tun:123.123.123.123/24,iff-up,iff-no-pi udp:localhost:1234 &
socat -u udp-listen:1236 interface:tun0 &