Java 使用Jnetpcap从数据包中获取网站名称

Java 使用Jnetpcap从数据包中获取网站名称,java,packet-sniffers,jnetpcap,Java,Packet Sniffers,Jnetpcap,我已经向Jnetpcap论坛提出了这个问题。没有得到任何回应。 我一直在尝试从请求/响应数据包中获取网站名称。 这就是我尝试过的: PcapPacketHandler<String> jpacketHandler = new PcapPacketHandler<String>() { final Tcp tcp = new Tcp(); final Http http = new Http(); final Ip4 ip = new I

我已经向Jnetpcap论坛提出了这个问题。没有得到任何回应。 我一直在尝试从请求/响应数据包中获取网站名称。 这就是我尝试过的:

PcapPacketHandler<String> jpacketHandler = new PcapPacketHandler<String>() {  
    final Tcp tcp = new Tcp();  
    final Http http = new Http();  
    final Ip4 ip = new Ip4();

    public void nextPacket(PcapPacket packet, String user) {
        if (packet.hasHeader(http)) {    
            packet.getHeader(http);  
            final String content_length =     http.fieldValue(Response.Content_Length);  
            final String response_code = http.fieldValue(Response.ResponseCode);  
            //Find if the given packet is a Request/Response Pkt : First get the TCP header   
            packet.getHeader(tcp);  
            Integer int_tcp_source = new Integer(tcp.source());  
            Integer int_tcp_destination = new Integer(tcp.destination());  
            if(int_tcp_source!=80 && content_length==null){  
                //It is a Request pkt :   
                packet.getHeader(http);  
                final String ref = http.fieldValue(Request.Referer);  
                final String req_url = http.fieldValue(Request.RequestUrl);  
                String page_url = http.fieldValue(Request.Host);   
                System.out.printf("\n Referer  " +ref +req_url );//Get the URL  
                System.out.printf("\nHost " +page_url);
            }
        }
    }
};
我正在使用windows笔记本电脑和无线连接。

如果我尝试:

if (packet.hasHeader(ip)) {//Ip4
我可以进入if块并检索源和目标IP地址

我基本上需要做和你一样的事情

我真的被卡住了,真的需要别人的帮助

或者干脆请某人帮我找出如何从数据包中获取网站名称? 一些代码片段会很棒。

谁能帮忙吗


提前感谢。

以下代码有效:

PcapPacketHandler<String> handler = new PcapPacketHandler<String>() {
    // Protocol handlers
    private final Tcp tcp = new Tcp();
    private final Http http = new Http();

    @Override
    public void nextPacket(PcapPacket packet, String userString) {
        if (!packet.hasHeader(tcp)) {
            return; // not a TCP package, skip
        }
        if (!packet.hasHeader(http)) {
            return; // not a HTTP package, skip
        }
        if (http.isResponse()) {
            return; // not a HTTP request, skip
        }

        System.out.println("Referer: " + http.fieldValue(Request.Referer));
        System.out.println("Request URL: " + http.fieldValue(Request.RequestUrl));
        System.out.println("Host: " + http.fieldValue(Request.Host));
    }
}

您确定您没有尝试访问HTTPS资源吗?在这种情况下,调用packet.hasHeader(http)将失败。

面临类似问题。你能解决这个问题吗?
PcapPacketHandler<String> handler = new PcapPacketHandler<String>() {
    // Protocol handlers
    private final Tcp tcp = new Tcp();
    private final Http http = new Http();

    @Override
    public void nextPacket(PcapPacket packet, String userString) {
        if (!packet.hasHeader(tcp)) {
            return; // not a TCP package, skip
        }
        if (!packet.hasHeader(http)) {
            return; // not a HTTP package, skip
        }
        if (http.isResponse()) {
            return; // not a HTTP request, skip
        }

        System.out.println("Referer: " + http.fieldValue(Request.Referer));
        System.out.println("Request URL: " + http.fieldValue(Request.RequestUrl));
        System.out.println("Host: " + http.fieldValue(Request.Host));
    }
}
Referer: https://www.google.com/
Request URL: /
Host: stackoverflow.com
Referer: http://stackoverflow.com/
Request URL: /Js/stub.en.js?v=eb1d547a9670
Host: cdn.sstatic.net
Referer: http://stackoverflow.com/
Request URL: /Sites/stackoverflow/all.css?v=4e41902aa7a6
Host: cdn.sstatic.net
...