【问题标题】:How i can get the Client IP Address in GWAN Server Using Java?如何使用 Java 在 GWAN 服务器中获取客户端 IP 地址?
【发布时间】:2014-05-02 14:18:44
【问题描述】:

好吧,标题说明了一切:

如何使用 Java 在 GWAN 服务器中获取客户端 IP 地址?

我看到在 C 中有一种方法,但在 Java 中我还找不到任何方法。不是所有的方法都用 Java 实现来与 GWAN 交互吗?

【问题讨论】:

  • 你不能。网络服务器可以可靠检索的ONLY IP 地址是打开客户端连接的 IP 地址。如果用户在 nat 网关或代理或 vpn 后面,那将是网关/代理/vpn 的 ip,NOT 客户端的实际 IP。如果不直接在客户端上运行代码,则无法获取客户端计算机的实际 IP。
  • 谢谢@MarcB,你说得对,这就是我需要的 IP,公共客户端 IP 地址,是否可以使用 GWAN Servlet?

标签: java ip-address g-wan


【解决方案1】:

简短的回答是肯定的。

实现 G-WAN Java API 的 Gwan.java 类以以下 cmets 开头:

// ============================================================================
// Java API calls for the G-WAN Web App. Server (http://trustleap.ch/)
// ----------------------------------------------------------------------------
// Compile with: javac Gwan.java
// 
// The G-WAN API getStrEnv() Java function returns a Java string for:
//
//   REQUEST             +
//   QUERY_STRING        |
//   FRAGMENT_ID         |
//   REQ_ENTITY          |
//   VHOST_ROOT          |
//   WWW_ROOT            |
//   CSP_ROOT            |
//   LOG_ROOT            | a copy of the G-WAN C string
//   HLD_ROOT            | 
//   FNT_ROOT            |
//   REMOTE_ADDR         |
//   USER_AGENT          |
//   SERVER_SOFTWARE     |
//   SERVER_NAME         |
//   SERVER_ADDR         |
//   SERVER_DATE         +
//
// Use getIntEnv() for the many integer values (like REQUEST_LEN)
//
// ...but these get_env() values are ignored by Java getxxxEnv() calls:
//
//   HTTP_CODE           +
//   SCRIPT_TMO          |
//   KALIVE_TMO          |
//   REQUEST_TMO         | 
//   DOWNLOAD_SPEED      | pointers on integers
//   MIN_READ_SPEED      |
//   MAX_ENTITY_SIZE     |
//   US_HANDLER_STATES   +
//
//   US_HANDLER_DATA     +
//   US_VHOST_DATA       | pointers on user-defined data structures
//   US_SERVER_DATA      +
//
//   READ_XBUF           + pointers on G-WAN internal structures
//   HTTP_HEADERS        +
//
// If you want to contribute in this matter (by helping to implement Java 
// G-WAN API in C with JNI), then drop us a line, you are most welcome!
// ----------------------------------------------------------------------------

所以,是的,您可以使用 Gwan.getIntEnv() 和值 REMOTE_ADDR 来访问 G-WAN 服务器看到的客户端 IP 地址。

【讨论】:

  • 您好@Gil 回复您,也许该代码在其他版本中?这是我在网页中可用的最新 Gwan 版本中看到的:Gwan.java: ` // ==================== ==================================================== ====== // Java API 调用 G-WAN Web 应用程序。服务器 (trustleap.ch) // ------------------------------------------ ---------------------------------- 封装api; public class Gwan { public static native long getReply(long env); ... `
【解决方案2】:

您好@Gil 的回复,

也许该代码在其他版本中?这是我在网页上可用的最新 Gwan 版本中看到的:

Gwan.java:

// ============================================================================ 
// Java API calls for the G-WAN Web App. Server (trustleap.ch) 
// ---------------------------------------------------------------------------- 
package api; 
public class Gwan { 
public static native long getReply(long env); 
    public static native void xbufCat (long ctx, String str);
    public static native long cycles64();
    public static native long getNs   ();
    public static native long getUs   ();
    public static native long getMs   ();
    public static native void logErr  (long env, String msg);
    public static native void report  (long reply, int html_format);
}
// ============================================================================
// End of Source Code
// ============================================================================

【讨论】:

  • 你试过我建议的命令了吗?它可能是在以后添加的(因此您的 servlet 将崩溃)或者它可能没有被记录(在这种情况下 servlet 将按预期运行)。无论如何,如果您在 www.gwan.com 上给我们留言,我们将进一步帮助您,让您访问所需的功能。
  • 你好@Gil 谢谢!,是的,我试过了,但是 Gwan 类不包含那个方法,我会通过 www.gwan.com 联系
  • 你好@Gil 我通过www.gwan.com 的联系方式发送了邮件,希望你能看到
  • 我确实通过本页底部的表格gwan.com/about@Gil 发送了我的请求/问题,您认为可以还是我必须使用其他方式?提前干杯和感谢!
  • 您使用 gmail 地址的电子邮件已于 5 月 5 日得到回复。检查你的“垃圾”gmail收件箱。
猜你喜欢
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多