如何打印所有包HTTP

时间:2015-09-02 08:16:47

标签: java linux server

只是想打印像波纹管这样的所有包裹。其简单的HTTP分析器java代码。请查看我的主要内容。我如何打印协议名称或其他功能。谢谢

//package jdumper.analyzer;
import jpcap.packet.*;
import java.util.*;
import java.io.*;



public class HTTPAnalyzer extends JDPacketAnalyzer
{

private static HTTPAnalyzer analy;

public static void main(String arg[] )
{
    System.out.println(boom.getValueNames());;
}

private static final String[] valueNames={
    "Method",
    "Header"
};

String method;

Vector headers=new Vector();

public HTTPAnalyzer(){
    layer=APPLICATION_LAYER;
}

public boolean isAnalyzable(Packet p){
    if(p instanceof TCPPacket &&
       (((TCPPacket)p).src_port==80 || ((TCPPacket)p).dst_port==80))
        return true;
    else return false;
}



public String getProtocolName(){
    return "HTTP";
}

public String[] getValueNames(){
    return valueNames;
}

public void analyze(Packet p){
    method="";
    headers.removeAllElements();

    if(!isAnalyzable(p)) return;

    try{
        BufferedReader in=new BufferedReader(new StringReader(new String(p.data)));

        method=in.readLine();

        if(method==null || method.indexOf("HTTP")==-1){

            // this packet doesn't contain HTTP header
            method="Not HTTP Header";

            return;
        }


        String l;

        //read headers

        while((l=in.readLine()).length()>0)

            headers.addElement(l);

    }catch(IOException e){}

}



public Object getValue(String valueName){

    if(valueNames[0].equals(valueName)) return method;

    if(valueNames[1].equals(valueName)) return headers;

    return null;

}



Object getValueAt(int index){

    if(index==0) return method;

    if(index==1) return headers;

    return null;

}



public Object[] getValues(){

    Object[] values=new Object[2];

    values[0]=method;

    values[1]=headers;



    return values;

}

}

1 个答案:

答案 0 :(得分:1)

这是问题所在。 HTTP是基于流的协议 - 它在TCP / IP流上运行。为了准确地解析/提取HTTP流,首先需要从数据包中重新组合流。完成后(准确地说),然后您可以解析流并提取标题。但是,如果您只是查看HTTP流中的各个数据包,则无法可靠地确定哪些数据包包含标头,哪些是HTTP请求或响应主体的一部分。

忽略这个问题,我很难搞清楚什么版本的jpcap / jpcap / jdumper /你应该构建的任何类。这使得很难弄清楚应该如何使用JDPacketAnalyzer的子类。但我很确定它不应该有main方法。