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

时间:2015-06-30 14:04:52

标签: java packet-sniffers jnetpcap

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

<p>
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris vestibulum in turpis non egestas. Nunc feugiat fermentum mi, vel pulvinar libero condimentum vel. Ut nisi est, consectetur ut lectus nec, mattis interdum nibh. Etiam ut interdum est. Nulla
  dictum ornare risus et scelerisque. In sodales a sem in aliquet. Donec at luctus orci, nec hendrerit tortor. Integer feugiat a metus ac sollicitudin. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam ac
  erat ut sem congue aliquet. Ut tellus ligula, fringilla vel egestas ut, facilisis posuere urna. Praesent condimentum ipsum et sapien pretium bibendum. Praesent feugiat sem lacus, ut ultricies quam convallis quis. Cras malesuada nunc in velit iaculis,
  vel tincidunt purus aliquet. Etiam tempus metus quis vulputate placerat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Praesent posuere, erat ut sollicitudin accumsan, dui dui dapibus arcu, a tincidunt
  ex neque vel lacus. Vestibulum pulvinar felis sit amet justo ultrices interdum. Vestibulum ultrices urna nec purus consectetur porta. Vestibulum id cursus turpis, eget iaculis erat. Proin efficitur pulvinar velit. Maecenas vel odio urna. Donec suscipit
  placerat varius. Donec sapien ante, interdum et mauris id, egestas posuere lectus. Sed mauris nunc, finibus sed magna ac, consequat efficitur erat. Etiam dignissim velit ante, at bibendum urna cursus sit amet. Nullam suscipit blandit nulla vitae auctor.
  Proin in tellus nibh. Praesent pellentesque sem nisl, at semper felis cursus a. Nullam tempor varius enim. Suspendisse pharetra at lectus sit amet maximus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cum
  sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin elementum pellentesque mollis. Fusce commodo commodo urna, in euismod est ornare a. Integer dictum aliquet velit. Aliquam erat volutpat. Sed dictum ligula at elementum
  placerat. Integer eget consequat turpis, a bibendum risus. Nulla facilisi. Ut ac malesuada eros, bibendum cursus leo. Fusce non lacinia erat. Aenean quis euismod nulla, nec auctor lectus. Integer varius, turpis et volutpat iaculis, lectus enim ullamcorper
  libero, ut ullamcorper sem ligula in mi. Fusce elementum, dui ac posuere cursus, nunc felis lacinia mi, et egestas turpis tellus eu erat. Donec pulvinar nibh id massa tristique, et maximus velit efficitur. Nam ullamcorper, eros et mattis vestibulum,
  diam ligula dapibus eros, id hendrerit eros lorem eget mauris. Nullam tincidunt sit amet mauris et tincidunt. Vivamus semper sem in hendrerit consequat. Aenean laoreet, justo non egestas tristique, ligula enim venenatis ex, sed lobortis magna risus
  at nulla. Donec vulputate mi nec urna euismod, vel pellentesque lacus rutrum. Aliquam condimentum lacus risus, non faucibus nulla tempor in. Ut fermentum fringilla dignissim. In auctor, nisi ut convallis lobortis, risus magna convallis erat, sit amet
  imperdiet sapien dui ac erat. Vestibulum congue ut lorem in auctor. Maecenas bibendum eros ut sem dictum finibus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur eu justo quis diam mollis pretium
  gravida sed felis.
</p>

但它甚至没有进入:

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(http)) { 

我可以进入 if block 并可以检索源和目标IP地址。

我基本上需要和http://jnetpcap.com/?q=node/937做同样的事情。

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

或者只是有人可以帮助我弄清楚如何从数据包中获取网站名称? 一些代码片段会很棒。

任何人都可以帮忙。

提前致谢。

1 个答案:

答案 0 :(得分:0)

以下代码有效:

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));
    }
}

如果我为http://www.stackoverflow.com运行此操作,我会得到以下输出:

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
...

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