Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实现IP网关(在Java中?)_Java_Routing_Ip - Fatal编程技术网

实现IP网关(在Java中?)

实现IP网关(在Java中?),java,routing,ip,Java,Routing,Ip,我想写一个程序来模拟各种网络条件(例如延迟、数据包丢失)。该程序最直接的表示方式是将其配置为IP网关—客户端将流量作为默认网关发送给它,或者下游路由器将其设置为下一跳以进行路由 如何编写程序来接收和处理该流量 有哪些工具和库可以实现这一点?e、 g.这可以通过linux上的iptables实现吗? (如果可能的话,我更愿意用Java实现它) 解决方法之一是将此类程序作为代理(例如HTTP+SOCKS)实现,并配置路由器以透明方式将所有流量发送到代理。另一种可能是打开原始套接字并手动处理所有流量,

我想写一个程序来模拟各种网络条件(例如延迟、数据包丢失)。该程序最直接的表示方式是将其配置为IP网关—客户端将流量作为默认网关发送给它,或者下游路由器将其设置为下一跳以进行路由

如何编写程序来接收和处理该流量

有哪些工具和库可以实现这一点?e、 g.这可以通过linux上的iptables实现吗? (如果可能的话,我更愿意用Java实现它)


解决方法之一是将此类程序作为代理(例如HTTP+SOCKS)实现,并配置路由器以透明方式将所有流量发送到代理。另一种可能是打开原始套接字并手动处理所有流量,但这可能意味着重新实现网络堆栈。有更好的方法吗?

你的问题很广泛,所以答案也同样广泛。我希望它能帮助你找到一些初步的研究方向

首先,尽量避免写任何东西。此任务已有解决方案(提示:搜索“WAN Emulator”)

如果您发现不够好,我的下一步将是使用和编写脚本。Linux对路由和桥接都有很好的支持。使用tc+netem,您可以在顶部添加延迟、损耗、抖动和几乎任何其他内容。如果需要,创建一个更高级别的实用程序,可能是用Java来配置tc并提供更好的UI

第三种选择是实际写一些东西。这就是事情变得棘手的地方,特别是如果你想用java来做的话。要执行桥接或路由,您需要将帧放到用户空间(这里可能有帮助),然后根据您自己的逻辑处理它们,最后将它们写出来。那是相当多的工作

实现HTTP代理将更容易,因为您不需要在单个数据包级别工作。您可以避免低级的东西(iptables/nfqueue/raw sockets),而只使用普通和简单的socket,甚至使用类似Java的整个HTTP代理实现


如果你需要关于这些内容的更多细节,在阅读之后,你可能想提出第二个更集中的问题。

你的问题非常广泛,因此答案也同样广泛。我希望它能帮助你找到一些初步的研究方向

首先,尽量避免写任何东西。此任务已有解决方案(提示:搜索“WAN Emulator”)

如果您发现不够好,我的下一步将是使用和编写脚本。Linux对路由和桥接都有很好的支持。使用tc+netem,您可以在顶部添加延迟、损耗、抖动和几乎任何其他内容。如果需要,创建一个更高级别的实用程序,可能是用Java来配置tc并提供更好的UI

第三种选择是实际写一些东西。这就是事情变得棘手的地方,特别是如果你想用java来做的话。要执行桥接或路由,您需要将帧放到用户空间(这里可能有帮助),然后根据您自己的逻辑处理它们,最后将它们写出来。那是相当多的工作

实现HTTP代理将更容易,因为您不需要在单个数据包级别工作。您可以避免低级的东西(iptables/nfqueue/raw sockets),而只使用普通和简单的socket,甚至使用类似Java的整个HTTP代理实现

如果你需要关于这些东西的更多细节,在阅读之后,你可能想提出第二个更集中的问题