Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何打印所有HTTP包_Java_Linux_Server - Fatal编程技术网

Java 如何打印所有HTTP包

Java 如何打印所有HTTP包,java,linux,server,Java,Linux,Server,a我只想像贝娄一样打印所有的包裹。其简单的HTTP分析器java代码。请检查一下我的主页。如何打印协议名称或其他函数。多谢各位 //package jdumper.analyzer; import jpcap.packet.*; import java.util.*; import java.io.*; public class HTTPAnalyzer extends JDPacketAnalyzer { private static HTTPAnalyzer analy; publ

a我只想像贝娄一样打印所有的包裹。其简单的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;

}

}

问题出在这里。HTTP是一种基于流的协议,它在TCP/IP流上运行。为了准确地解析/提取HTTP流的报头,首先需要从数据包中重新组装流。一旦您(准确地)完成了,您就可以解析流并提取头。但是,如果只查看HTTP流中的各个数据包,就无法可靠地判断哪些数据包包含头,哪些数据包是HTTP请求或响应体的一部分



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

我想从您使用jpcap的扩展类开始。如果是这样的话,请更具体地说明你需要打印什么。谢谢你回答我的问题。您能告诉我如何打印HTTP所有包吗?我很乐意,但我需要理解您所说的“包”是什么意思。你是说页眉吗?响应机构?数据包的全文?是的,我是指HTTP头,如果我想在Linux终端上打印所有捕获的数据包。如何做到这一点?安装tcpdump或wireshark或类似产品。这不是编程问题。