2010-11-03 47 views
2

我正在用Java解析魷魚日誌。使用URL類似乎很合適。但是,這個類會發出DNS請求,這會無限期地降低分析速度。是否有其他簡單的方法來從URL中提取主機名和端口?解析Java中沒有DNS查詢的URL

條件

  • URL模式可能在魷魚日誌中中省略
  • 缺席(默認)端口應爲FTP導出,HTTP,HTTPS協議

登錄例如:

1288763851.129 295 10.10.100.10 TCP_MISS/200 435 GET http://win.mail.ru/cgi-bin/checknew? - DIRECT/217.69.128.52 text/plain 
1288763881.110 275 10.10.100.10 TCP_MISS/200 434 GET http://win.mail.ru/cgi-bin/checknew? - DIRECT/217.69.128.52 text/plain 
1288763883.093 60001 10.10.102.202 TCP_MISS/503 0 CONNECT www.update.microsoft.com:443 - DIRECT/- - 
1288763884.301  0 10.10.102.202 NONE/400 3506 GET/- NONE/- text/html 
1288763911.194 359 10.10.100.10 TCP_MISS/200 435 GET http://win.mail.ru/cgi-bin/checknew? - DIRECT/217.69.128.52 text/plain 
1288763941.097 264 10.10.100.10 TCP_MISS/200 434 GET http://win.mail.ru/cgi-bin/checknew? - DIRECT/217.69.128.52 text/plain 
1288763944.094 59777 10.10.102.202 TCP_MISS/503 0 CONNECT www.update.microsoft.com:443 - DIRECT/- - 
1288763971.123 289 10.10.100.10 TCP_MISS/200 434 GET http://win.mail.ru/cgi-bin/checknew? - DIRECT/217.69.128.52 text/plain 
1288764002.257 1421 10.10.100.10 TCP_MISS/200 435 GET http://win.mail.ru/cgi-bin/checknew? - DIRECT/217.69.128.52 text/plain 

編輯:我不得不爲這個任務編寫我自己的類解析器。如果字符串的主機名具有IP或簡單字符串,則該想法是使用InetAddress。

+1

我寫了[galimatias](https://github.com/smola/galimatias),這是一個可用於作業的Java URL解析庫。一旦它解析了URL,就可以得到主機並檢查它是否是域名,IPv4或IPv6地址。它仍處於早期階段,但對於這種用例來說它非常穩固。 – smola 2014-01-02 00:17:40

回答

1

您可以嘗試Restlet的Reference類。

+0

我的debian發行版中沒有restlet關鍵字。我需要更常見的解決方案。 – Basilevs 2010-11-03 17:01:00

+0

如果您使用Java編程,大多數圖書館將不會與發行版捆綁在一起。如果你經過簡單的安裝,你可以考慮一個構建/分發系統,比如Maven(Restlet有它自己的Maven倉庫,你可以在你的項目中很容易地配置它)。 – Bruno 2010-11-03 17:10:51

1

使用java.net.URI類。

+0

它拒絕解析www.update.microsoft.com:443 – Basilevs 2010-11-04 02:23:20

+0

我並不感到驚訝。它解析「https://www.update.microsoft.com:443」,這是你可以在Java中使用該字符串的唯一方法。 – EJP 2010-11-04 06:09:32

+0

您是否需要額外的引號? – Basilevs 2010-11-14 05:00:07