我正在一个Java(Android)项目中工作,主要思想是捕获网址并阻止对危险页面的访问,因此要获取用户访问的网址,我正在使用pcap4j
库中,如下所示:
IpV4Packet ipV4Packet = packet.get (IpV4Packet.class);
Inet4Address srcAddr = ipV4Packet.getHeader().GetSrcAddr();
System.out.println(srcAddr);
因此,如果我访问 url (https://es.wikipedia.org/wiki/Google),代码将生成域名,例如:(wikipedia.org),但我真正需要的是生成请求的主 url,如何获取完整的 URL (https://es.wikipedia.org/wiki/Google)?
我认为这真的很难。
为了获取URL,您需要查看HTTP数据包的请求行。但是 Pcap4J 现在不支持 HTTP,因此您需要编写数据包类来剖析 HTTP 数据包。
而且,HTTP在TCP上,通常会对上层数据包进行分段。您需要先重新组装 HTTP 数据包,然后才能对其进行剖析。
更重要的是,如果https,HTTP数据包由TLS层加密和分段。在这种情况下,您需要重新组装并解密 HTTP 数据包以获取 URL。要解密 TLS 数据包,您需要 HTTP 服务器的密钥。但是,即使您有密钥,当在TLS会话中使用Diffie-Hellman密钥交换算法时,也无法解密数据包。