2015-09-02 3 views
-1

просто хотите распечатать все пакеты, например, ниже. Его простой HTTP-анализатор java-кода. Пожалуйста, проверьте мою основную информацию. Как я могу напечатать имя протокола или другую функцию. СпасибоКак распечатать весь пакет HTTP

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

Я полагаю, из класса, который вы распространяете, вы используете jpcap из http://jpcap.sourceforge.net/. Если это так, пожалуйста, уточните, что вам нужно печатать. – Ostap

+0

Спасибо ответ на мой вопрос. Можете ли вы показать мне, как я могу печатать HTTP все пакеты – tanya

+2

Я был бы рад, но мне нужно понять, что вы подразумеваете под «пакетом». Вы имеете в виду Заголовки? Тело ответа? Полный текст пакета? – Ostap

ответ

1

В этом проблема. HTTP - это протокол, основанный на потоке, - он работает через поток TCP/IP. Чтобы точно разобрать/извлечь заголовки потоком HTTP, вам сначала необходимо собрать поток из пакетов. Как только вы это сделаете (точно), вы сможете разобрать поток и извлечь заголовки. Однако, если вы просто посмотрите на отдельные пакеты в потоке HTTP, вы не можете достоверно определить, какие из них содержат заголовки, а какие из них являются частью запроса HTTP или тела ответа.


Игнорирование этого вопроса, я с трудом, выяснить, какую версию jpcap/jpcap/jdumper/все, что вы класс должен быть построено против. Это затрудняет определение того, как предполагается использовать подкласс JDPacketAnalyzer. Но я уверен, что он НЕ должен иметь метод main.

+0

Если я хочу распечатать все захваченные пакеты в терминале в Linux. Как я могу это сделать? – tanya

+0

Установите tcpdump или wirehark или аналогичный. Это НЕ проблема программирования. –