如何获取发送请求的客户端的IP?

时间:2016-07-28 09:34:15

标签: java sockets server network-programming

我是新手,我不知道怎么做,所以我的高级研究员请帮助!!!!

有下面描述的情况:

HTTP客户端正在发送直接命中Loadbalancer的请求(请求可以是任何类型,不关心请求类型)。然后,Loadbalancer根据流量负载将流量重定向到在两个V440 Server中运行的“Gateway”系统,GW逻辑用Java编写,实际上逻辑上将此请求路由到实际处理请求的另外两个服务器节点

enter image description here

现在的情况是这样的:从多个HTTP客户端与此网关建立了几个并行连接。每个客户端一个连接。据观察,在连接到此GW时,如果某些客户端的CPU利用率为98-99%。

客户端正在特定端口上与GW建立一个连接。打开套接字连接:

ServerSocket _ss = new ServerSocket(_port);
Socket s = _ss.accept();

然后GW等待来自客户端的输入。

现在我的问题是:

  1. 为什么会出现这种情况,因为它看起来很好 对于其余的客户和那里的联系。 只有少数与GW建立联系的客户正在制造这种情况?

  2. 无论如何,我们可以跟踪此客户的IP,以便我们能够理解这一点 每次都是由同一个客户发生的?

  3. 有没有解决方案?

1 个答案:

答案 0 :(得分:0)

由于所有客户都没有这样做,我们当然不会立即找到答案。然而,这是我对该问题产生的有限研究

首先,问题2

配置F5以捕获客户端的IP。由于它是HTTP,因此有多种方法可以跟踪请求。一个是

  

嗅探标题Private Function OptionBoxGroupHasASelection(inputControl As MSForms.Control) As Boolean Dim ctrl As MSForms.Control Dim sGroup As String Dim bOutput As Boolean If TypeName(inputControl) <> "OptionButton" Then OptionBoxGroupHasASelection = False Exit Function End If If inputControl.Value = True Then OptionBoxGroupHasASelection = True Exit Function End If sGroup = inputControl.GroupName bOutput = False For Each ctrl In Me.Controls If TypeName(ctrl) = "OptionButton" Then If ctrl.GroupName = sGroup Then If ctrl.Value = True Then bOutput = True Exit For End If End If End If Next ctrl OptionBoxGroupHasASelection = bOutput End Function ,它将提供客户端的IP   地址

或尝试在日志记录引擎中添加此规则

  

X-FORWARDED-FOR

     

如果您还需要其他数据,例如资源,您可以使用其中一个   其他事件,如HTTP_REQUEST:

     

when CLIENT_ACCEPTED { log local0. "clientIP:[IP::client_addr] accessed" }

请参阅上面的here

链接

其次,问题1

为此,您需要查看可用的流量统计机制。我看了thisthisthis。启用统计信息,实时监控它们,测试,模拟请求并分析输出。我现在还不知道除此之外的任何其他选择。

如果可以修改Java程序,另一个选择是为每个请求包含某种性能日志记录机制。但这意味着有很多发展,我根本不推荐。

第三,问题3

这主要是基于意见的。据我所知,如果你弄清楚问题,你可以解决它。