如何在 Java 中调用 getsockopt 以获取 SO_ORIGINAL_DST
Posted
技术标签:
【中文标题】如何在 Java 中调用 getsockopt 以获取 SO_ORIGINAL_DST【英文标题】:How can I call getsockopt in Java to get SO_ORIGINAL_DST 【发布时间】:2012-03-26 05:16:14 【问题描述】:有谁知道是否有一个现有的库可以让我调用 getsockopt 以获取 iptables 通过我的 Java 应用程序重新路由的套接字的目标 IP?
Here's a similar question 在未答复的 Netty 邮件列表中。
c 中的调用类似于:
getsockopt(ctx->client.fd, SOL_IP,
SO_ORIGINAL_DST, &SANY_ADDR(addr), &SANY_LEN(addr))
也欢迎提供如何使用 JNI 执行此操作的示例。
【问题讨论】:
【参考方案1】:你不能在 Java 中做到这一点。你可以完全按照你写的那样在 JNI 中做,如果你能得到套接字 FD,它在 Socket
的 SocketImpl
中。
【讨论】:
@downvoter 如果您认为它可以在没有 JNI 的 Java 中完成,请与我们分享您的解决方案,以便对其进行评论、投票等。【参考方案2】:你不能在 Java 中做到这一点。但是,您可以添加存储 original_dst 的请求标头参数。因此,您可以在需要时从 http 标头中使用它。
【讨论】:
以上是关于如何在 Java 中调用 getsockopt 以获取 SO_ORIGINAL_DST的主要内容,如果未能解决你的问题,请参考以下文章
Linux下getsockopt/setsockopt 函数说明