Wget debuglog獲取系統認證信息

接到一個case,客戶反應我們的監控系統訪問不了他們的網絡,而監控系統所在的機子,是可以通過瀏覽器訪問的。馬上獲取相關log進行分析,找到以下報錯

java.io.IOException: Authentication failure
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1319)
	at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:318)
	。。。。。。。。
	。。。。。。。。
	。。。。。。。。
	at sun.reflect.GeneratedMethodAccessor72.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	。。。。。。。。
	。。。。。。。。
	at com.sun.proxy.$Proxy78.call(Unknown Source)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:662)

報錯是跟認證相關的,查ReleaseNotes,我們產品只支持HTTP Basic Authentication,搭建了一個簡單的Basic Authentication小應用,用我們產品來監控,亂填一些認證信息,得到以下401報錯,初步推測,用戶遇到的問題跟賬戶密碼是否正確無關。


java.io.IOException: Server returned HTTP response code: 401 for URL: http://localhost:8011/hash/BasicAuthServlet
	at sun.reflect.GeneratedConstructorAccessor88.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)	
	。。。。。。。。
	。。。。。。。。
	。。。。。。。。

考慮到用戶是把系統部署在windows環境,windows環境常用的認識方式有NTLM,於是把測試應用改爲NTLM認證,再次用我們產品來監控,得到了跟客戶類似的認證相關的報錯"java.io.IOException: Authentication failure",於是懷疑客戶的系統是使用了NTLM認證。

final String authTypeStr = "NTLM"; //"Basic realm"
response.setHeader("WWW-authenticate", authTypeStr);

怎樣才能確定客戶是真的使用了NTLM認證呢?想到了一個很好的工具wget,使用的是windows版本的,讓客戶執行以下語句,並把結果給我們。

wget -dv --http-user=<username> --http-password=<password> --output-file=debug-log.txt --output-document=doc.txt <monitoring url>

拿到wget結果後,一下子就看到,客戶的系統果然是使用NTLM認證的,於是,把實際情況反饋給客戶,系統暫時不支持NTLM認證,問題得到解決。

---request begin---
GET /default.aspx HTTP/1.0

User-Agent: Wget/1.10.2

Accept: */*

Authorization: NTLM 



發佈了63 篇原創文章 · 獲贊 18 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章