您的位置:首页 > 理论基础 > 计算机网络

Wget在排查网络问题时的小应用

2014-03-06 11:37 302 查看
接到伦敦一客户发来的case,问题是在用我们一个产品监控他们网站的时候,出现“403-forbidden”错误。看了客户提供的截屏,并且分析log,发现这个问题还是比较明显的,以下是部分log 。

2013-06-30 12:08:12.125 ECHO    XXXXXXXXXXXXXXX Request page content for the URL: [http://IP/ui/] error!
java.io.IOException: Server returned HTTP response code: 403 for URL: http://IP/ui/ at sun.reflect.GeneratedConstructorAccessor50.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1491)
at java.security.AccessController.doPrivileged(Native Method)
at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1485)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1139)


根据对HTTP的一些了解,觉得这个问题可能是由客户的服务端引起的,有3个可怀疑的地方:

1.网络不稳定或存在其它网络问题
2.服务器做了访问限制
3.应用程序做了访问限制


根据初步的认识,让客户ping一下服务器,同时让他们的网络人员排查一下网络和服务器方面的问题,并且换其它IP来访问,产品是否能够正常工作。得到的回复是,ping没问题的,并且确认网络没问题,换其它网站如google.com是可以访问的,而且用浏览器也是可以访问他们的网站,所以用户觉得还是我们产品存在问题。其实这个结果基本可以确定我们的产品是可以正常工作的,可能是他们的应用做了限制,但是怎么跟用户解释呢?不能直接跟他们说,我们的产品没问题,问题在你们那边,你们自己找去吧,哈。。。

这种情况下,最好有一个大家公认的工具,Linux下面有一些比较好的工具,如wget,我不知道windows平台是否也有类似的工具,查了一下,没发现。还在继续想办法怎样处理这个问题。一同事说wget也有windows版本的,可以试一下。根据该同事的建议,让客户用wget和telnet分别测试一下。用Telnet访问是可以访问,用Wget来访问,返回以下结果。

C:\>wget.ext http://IP/uiConnectng to IP ... connected.

HTTP request sent, awaiting response ... 403 Access forbidden
2013-07-10 15:33:23 ERROR 403: Access forbidden


结果很明显了,确实是他们的应用有问题,应用方面做了限制。我们可以做个简单的模拟,如果是非浏览器的软件来访问,就返回403,如果是浏览器来访问,就可以正常访问,如下所示:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//get browser info
String Agent = request.getHeader("User-Agent");
boolean isBrowser = true;//check whether it's a browser from Agent, here I hardcode true
if(!isBrowser){
response.setStatus(403);
}
request.getRequestDispatcher("").forward(request, response);
%>


根据客户返回的结果,再次建议他们协同开发人员一起检查,确认应用没做限制之后再用我们的产品来做监控。现在有了wget的返回结果做证据,客户老老实实地叫来开发人员进行排查。过了2天,结果回来了,确实是他们的应用出问题,此问题得到解决。

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//get browser info
String Agent = request.getHeader("User-Agent");
boolean isBrowser = true;//check whether it's a browser from Agent, here I hardcode true
if(!isBrowser){
response.setStatus(403);
}
request.getRequestDispatcher("").forward(request, response);
%>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: