2014-02-11 32 views
2

我正在開發一個應用程序來捕獲所有的HTTP URL。我用pcap.LOOP_INFINATE持久捕獲,但是當我在谷歌上搜索時,它不捕獲任何數據包。請給我一個解決方案。無法使用jnetpcap捕獲谷歌搜索URL

這是我的示例代碼:

int snaplen = 64 * 1024;   
int flags = Pcap.MODE_PROMISCUOUS; 
int timeout = 10*1000; 
Pcap pcap = Pcap.openLive(device.getName(), snaplen, flags, timeout, errbuf); 

PcapPacketHandler<String> jpacketHandler = new PcapPacketHandler<String>() { 
    final Tcp tcp = new Tcp(); 

    final Ip4 ip = new Ip4(); Arp arp=new Arp();Payload payload = new Payload(); 
    Ethernet eth=new Ethernet();Http http = new Http();Udp udp=new Udp(); 

    public void nextPacket(PcapPacket packet, String user) { 

     if (packet.hasHeader(tcp) && packet.hasHeader(http)) { 

      if(tcp.destination() == 80) { 

       if(http.hasField(Http.Request.Accept) && http.fieldValue(Http.Request.Accept).contains("text/html")) 
       { 

        String host = http.fieldValue(Http.Request.Host); 
        String url = host + http.fieldValue(Http.Request.RequestUrl); 
        String referer = http.fieldValue(Http.Request.Referer); 
        System.out.println("Request: " +" - " + url); 
       } 
      } 
     } 
     } 
}; 
pcap.loop(pcap.LOOP_INFINATE,jpacketHandler, null); 
+0

谷歌搜索使用https,例如端口443而不是端口80.它被加密,所以你不會通過簡單的數據包捕獲獲得可用的數據。 –

回答

0

谷歌搜索使用https,例如端口443,而不是80端口。而且它是加密的,這樣你就不會通過簡單的數據包捕獲得到有用的數據

- 斯特芬·烏爾裏希

+1

不只是複製某人的評論,並把它作爲一個答案 – Chausser

+0

可能是一個元問題,但@Chausser ......爲什麼不呢?斯蒂芬在這裏有足夠的歷史知道評論是短暫的,如果他想要代表,他應該回答。該死的,你不需要代表回答,但你可以發表評論。什麼是錯誤的是複製一個答案,並將其作爲評論發佈。這個信息的正確位置就是答案。 – rolfl

+0

因爲複製其他人的評論並將其作爲答案發布,所以這樣做只是爲了獲得聲望。 SO旨在成爲高質量的問答服務。通過簡單地將評論中的信息「移動」到答案中,您不會提供任何其他內容。他也可能將其作爲評論發佈,而不是作爲其他原因的答案。在meta中有一個帖子,我現在無法找到,基本上只是說rep只有行動被壓制,並且只做一些爲網站增加質量和內容的事情。 – Chausser