PCAP Datei auslesen

Status
Nicht offen für weitere Antworten.
Hallo!

Ich such jetzt schon die ganze Zeit nach einer Java-API, die es ermöglicht PCAP-Dateien auszulesen. Ich habe jNetPCAP und jPCAP gefunden, aber weiß leider nicht, wie ich Dateien auslesen kann, nur wie ich von einem Device sniffern kann.

Aufgabenstellung ist folgende:
Mittels Wireshark wird Netzwerktraffic aufgezeichnet. Dieser Traffic wird wie üblich von Wireshark in eine PCAP-Datei gespeichert. Die Aufgabe des Javaprogramms ist es nun die PCAP-Datei einzulesen, den Traffic zu analysieren und dann in ein bestimmtes XML Format zu konvertieren.

Nur fehlt mir leider momentan der Ansatz wie man PCAP-Dateien mit Java am besten einliest, um dann deren Inhalt weiterverarbeiten zu können.

Bin sehr dankbar für jeden Hinweis!

lg,
Christian.
 

assoziatives pseudonym

Aktives Mitglied
ähm .... du willst etwas derart aufwendiges (Zeit) programmieren und kannst noch nichtmal Java-Grundlagen? Ich würde dir empfehlen, zuallererst programmieren zu lernen und DANN etwas derartiges anzugehen.

Was du suchst befindet sich in der Klasse "File", darauf kann man einen "FileReader" legen, mittels FileReader.readLine() bekommst du einzelne Zeilen, optimalerweise so (etwas anders jetzt):
Code:
File bla = new File("C:/Dokumente und Einstellungen/meinedatei.txt");
BufferedReader in = new BufferedReader(new FileInputStream(bla));
while(in != null) {
   in.readLine();
}
 
G

Guest

Gast
christian8287 hat gesagt.:
weiß leider nicht, wie ich Dateien auslesen kann, nur wie ich von einem Device sniffern kann.
bei jpcap mit openFile statt openDevice in JpcapCaptor?

tha_specializt hat gesagt.:
ähm .... du willst etwas derart aufwendiges (Zeit) programmieren und kannst noch nichtmal Java-Grundlagen? Ich würde dir empfehlen, zuallererst programmieren zu lernen und DANN etwas derartiges anzugehen.
was soll denn der unsinn, der code dafür sind 3 zeilen (aufwändig?) und wo steht dass er kein java kann?
und dein code hilft ihm auch null. erstens wird er wohl wissen wie man ne datei ausliest, zweitens sind libpcap dumps binärdateien keien textdateien und drittens is dein code ne endlosschleife :applaus:
 

Wildcard

Top Contributor
Anonymous hat gesagt.:
was soll denn der unsinn, der code dafür sind 3 zeilen (aufwändig?) und wo steht dass er kein java kann?
und dein code hilft ihm auch null. erstens wird er wohl wissen wie man ne datei ausliest, zweitens sind libpcap dumps binärdateien keien textdateien und drittens is dein code ne endlosschleife :applaus:
Tja, tha_specializt scheint sein möglichstes zu tun um schnell in der Troll Hierarchie aufzusteigen. Einfach ignorieren :roll:

EDIT:
*geteilt*
Wer sich den restlichen Unsinn des Spezialisten ansehen möchte, kann das hier tun
http://www.java-forum.org/de/viewtopic.php?p=438643
 
Danke für die Antwort.

Sollte ja ganz einfach funktionieren das auslesen. Nur verursacht mein Programm eine mir unbekannte java.lang.InstatiationException.

Mein Testprogramm sieht folgendermaßen aus:

Code:
public static void main(String[] args) {
        try {
            JpcapCaptor jc = JpcapCaptor.openFile("file.pcap");

            Packet p = jc.getPacket();
            
            System.out.println(p);
        }
        catch(IOException ioe) {
            
        }
    }

Jetzt bekomme ich folgende Exception:

Code:
Exception in thread "main" java.lang.InstantiationException: jpcap.packet.DatalinkPacket
        at jpcap.JpcapCaptor.getPacket(Native Method)
        at jpcaptest.Main.main(Main.java:28)
Java Result: 1

Weiß jemand, was das bedeuten kann? Hab mir auch schon Beispielcodes angesehen. Die sind ziemlich gleich aufgebaut, aber keine Rede von ner InstantiationException.

lg,
Christian.
 
U

Uncreativ

Gast
Mach es doch selbst hab ich auch gemacht =)

Hab mir einen Hex-Editor geholt + Wireshare dann erst mal geschaut wo was steht.
Hier mal mein ergebnis :
Code:
package pcap_ReaderV2;

import java.io.DataInputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import java.util.Vector;



public class PcapDecode extends Thread{
	
	private static String pcapHeader = "";
	
	
	/***
	 * 
	 * Config Variablen
	 * 
	 */
	private boolean readinPcapHeader = false;
	private boolean invSpeicher = true;
	/***
	 * 
	 * Klassen referezen
	 * 
	 */
	private HexToInt conv = new HexToInt();
	private Vector<FramePcap> decodePcap = new Vector<FramePcap>();
	/***
	 * 
	 * Laufzeiger
	 * 
	 */
	private int frameNr = 1;
	private int zeiger = 0;
	private int wireBytes = 0;
	private int captureBytes = 0;
	private boolean frameHeaderRead = false;
	private String source = "";
	private String destination = "";
	private String sourceMac = "";
	private String destinationMac = "";
	private String time = "";
	private String date = "";
	private String tms = "";
	File pcapFile, logFile;
	boolean checkModus[] = { true, true };
	
	/***
	 *
	 * Methoden 
	 * 
	 */
	
	private PcapDecode(){
		
	}
	
	public PcapDecode(File input, File output, boolean ip, boolean ts){
		pcapFile = input;
		logFile = output;
	}
	public static void main(String[] args) {
		PcapDecode m = new PcapDecode();
		m.run();
	}
	
	public void run(){
		  DataInputStream din = null;
	      FileInputStream fin = null;
	      try {
			fin = new FileInputStream(pcapFile);
	      } catch (FileNotFoundException e) {
			e.printStackTrace();
	      }
	      din = new DataInputStream(fin);
	      String pcap = "";
	      String tmp = "";
	      int z = 0;
		  int buf;
		  	try{
		      while(true){
		    	  buf = din.readUnsignedByte();
		    	  tmp = Integer.toHexString(buf).toUpperCase();
		    	  if(conv.doIt(tmp) < 16){
		    		  pcap += "0" + Integer.toHexString(buf);
		    	  }else{
		    	  pcap += Integer.toHexString(buf);
		    	  }  
		    	  pcap = pcap.toUpperCase();
		    	  
		    	  /**
		    	   * Pcap Header
		    	   */
		    	  if(!readinPcapHeader){
			    	  if(22 < z){
			    		  
			    		  setPcapHeader(pcap);
			    		  pcap = "";
			    		  readinPcapHeader = true;
			    		  zeiger = 22 + 17;
			    	  }
		    	  }else{
			    	  
			    	  /**
			    	   * Frame Header
			    	   */
			    	  if(!frameHeaderRead){
				    	  if((z == zeiger)){
				    		  setFrameHeader(pcap);
				    		  pcap = "";
				    		  frameHeaderRead = true;
				    		  zeiger += wireBytes;
				    		  
				    	  }
			    	  }else{
				    	  /**
				    	   * Frame
				    	   */
			    		  if(z == zeiger){
			    			  getSourceAndDestinationIp(pcap);
			    			  getSourceAndDestinationEt(pcap);
			    			  pcap = "";
			    			  zeiger += 16;
			    			  frameHeaderRead = false;
			    			  decodePcap.addElement(new FramePcap(frameNr, wireBytes, captureBytes, source,destination,sourceMac,destinationMac,date,time));
			    			  frameNr++;
			    		  }
			    	  }
			    	  
			    	  
		    	  }
		    	  z++;
		      }
		  	}catch(EOFException e){
		  		try {
					din.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
		  	} catch (IOException e) {
				e.printStackTrace();
			}
		  	
		  	if(logFile != null)
		  		writeLogFile();
		  		
	}
	PcapFilter ff = new PcapFilter();
	@SuppressWarnings("unchecked")
	public Vector getVec(){
			return decodePcap;
	}
	
	public void writeLogFile(){
		LogFileWrite log = new LogFileWrite(this.decodePcap, logFile);
		log.makeLog();
	}
	
	String getInvertHex(String hex){
		
		String invHex = "";
		
		for(int i = hex.length()-1;i>=0;i = i-2){
			invHex += hex.charAt(i-1);
			invHex += hex.charAt(i);
		}

		if(invSpeicher){
			return invHex;
		}else{
			return hex;
		}
	}
	
	void setPcapHeader(String pcap){
		pcapHeader = pcap;
		if(pcapHeader.charAt(pcapHeader.length()-1)==48){
				invSpeicher = true;
		}else{
				invSpeicher = false;
		}
	}
	
	void setFrameHeader(String pcap){
		getTimeStamp(pcap);
		String size = pcap.substring(16, pcap.length());
		wireBytes = (int)conv.doIt(getInvertHex(size.substring(8, size.length())));
		captureBytes = (int)conv.doIt(getInvertHex(size.substring(0, 8)));
	}
	
	void getTimeStamp(String frameHeader){
		
		String hexSec = this.getInvertHex(frameHeader.substring(0,8));
		String hexMilliSec = this.getInvertHex(frameHeader.substring(8,14));
		long sec = conv.doIt(hexSec);
		long milli = conv.doIt(hexMilliSec);
		Date test = new Date(sec*1000);
		tms = test.toString();
		date = tms.substring(0, 10);
		date = date.concat(" "+ tms.substring(tms.length()-4, tms.length()));
		time = tms.substring(11, 19);
		time = time.concat("."+milli);
	}
	
	void getSourceAndDestinationIp(String frame){
		source = "";
		destination = "";
		String hexSource = frame.substring(52, 60);
		String hexDestination = frame.substring(60,68);
		String tmp = "";
		hexSource = hexSource.toUpperCase();
		hexDestination = hexDestination.toUpperCase();
		for(int i = 0;i<=6;i+=2){
			tmp += String.valueOf(hexSource.charAt(i));
			tmp += String.valueOf(hexSource.charAt(i+1));
			source += conv.doIt(tmp);
			source += ".";
			tmp = "";
		}
		source = source.substring(0, source.length()-1);
		for(int i = 0;i<=6;i+=2){
			tmp += String.valueOf(hexDestination.charAt(i));
			tmp += String.valueOf(hexDestination.charAt(i+1));
			destination += conv.doIt(tmp);
			destination += ".";
			tmp = "";
		}
		destination = destination.substring(0, destination.length()-1);
	}
	
	void getSourceAndDestinationEt(String frame){
		sourceMac = "";
		destinationMac = "";
		String hdm = frame.substring(0,12);
		String hsm = frame.substring(12, 24);
		String tmp = "";
		for(int i = 0;i<12;i = i+2){
			tmp = tmp.concat(String.valueOf(hdm.charAt(i)));
			tmp = tmp.concat(String.valueOf(hdm.charAt(i+1)));
			tmp += ":";
		}
		tmp = tmp.substring(0,tmp.length()-1);
		destinationMac = tmp;
		tmp = "";
		for(int i = 0;i<12;i = i+2){
			tmp = tmp.concat(String.valueOf(hsm.charAt(i)));
			tmp = tmp.concat(String.valueOf(hsm.charAt(i+1)));
			tmp += ":";
		}
		tmp = tmp.substring(0,tmp.length()-1);
		sourceMac = tmp;
	}
	
}

Kannst es umbauen alle Methoden darin Post ich jetzt nicht kannst du ja selbst machen.
 
T

tuxedo

Gast
Ist in der Tat etwas "Uncreativ" das Rad neu zu erfinden statt dem Fehler auf die Spur zu gehen ...

- Alex
 
U

Uncreativ.

Gast
Also mich bringt sowas immer weiter ;)
Wenn ich nicht gleich was nehm was es schon gibt bzw ist auch langweile und es hat mir den gewünschten effect gebracht.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Bei FTP Übertragung wird Datei nicht komplett übertragen Netzwerkprogrammierung 2
J Datei Download vom Server Netzwerkprogrammierung 8
H Datei mit Anhang via http "hochladen" Netzwerkprogrammierung 16
E JCIFS - Smb - Datei kann nur von einem Benutzer bearbeitet werden Netzwerkprogrammierung 1
Aruetiise Socket Datei Endung Netzwerkprogrammierung 6
A FTP wie kann ich von java auf datei in fpt://192.168.178.1 lesen/schreiben? Netzwerkprogrammierung 3
K HTTP Formulare füllen und Datei downloaden Netzwerkprogrammierung 23
B JSch Filetransfer ohne KnownHosts Datei? Netzwerkprogrammierung 0
A Datei erzeugen und auf der Weboberfläche downloaden (Tomcat) Netzwerkprogrammierung 4
Sogomn HTTP Datei herunterladen Netzwerkprogrammierung 13
C Inhalt einer .JPG Datei in einen OutputStream schreiben? Netzwerkprogrammierung 10
F FTP FTPClient Datei lässt sich nicht öffnen Netzwerkprogrammierung 4
F HTTP Serialisierte Objekte aus Datei von Server Netzwerkprogrammierung 1
T Anwendungseinstellungen ohne Datei übertragen? Netzwerkprogrammierung 8
F FTP Einzelne Datei von FTP-Server überprüfen Netzwerkprogrammierung 0
L FTP Lesen einer Datei vom Server - Aufgehangen Netzwerkprogrammierung 0
M jsf-seite beim hinzufügen einer csv-datei in einen ordner aktualiseren Netzwerkprogrammierung 0
D Einfache Verbindung zu Linux Server und Datei auslesen Netzwerkprogrammierung 13
S Datei(XML) per RMI an Server schicken Netzwerkprogrammierung 0
V Datei Download Fenster Netzwerkprogrammierung 9
S Datei schreiben über Applet Netzwerkprogrammierung 8
C Socket Datei Übertragung Netzwerkprogrammierung 5
D Datei hochladen zu PHP Server Netzwerkprogrammierung 8
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
T Datei downloaden ohne den Dateinamen zu kennen Netzwerkprogrammierung 2
H Datei in DropBox schreiben Netzwerkprogrammierung 23
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
V Datei auf Server Schreiben Netzwerkprogrammierung 18
N Einen Server als ausführbare Datei exportieren Netzwerkprogrammierung 15
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
B FTP Datei auslesen ohne einloggen möglich? Netzwerkprogrammierung 19
C Datei auf server speichern Netzwerkprogrammierung 16
P FTP Nochmal wachsende Datei per FTP lesen Netzwerkprogrammierung 9
W Datei automatisiert kopieren! Netzwerkprogrammierung 5
P Wachsende Datei per FTP lesen Netzwerkprogrammierung 2
U Datei über das Netzwerk einlesen und speichern Netzwerkprogrammierung 8
S Servlet - Datei kann nicht gelöscht werden Netzwerkprogrammierung 12
G Txt datei von Website downloaden Netzwerkprogrammierung 8
R HTTP Apache HTTP Client: Request mit angehängter Datei Netzwerkprogrammierung 2
I HTTP Datei Uploaden mit http und Sprache anpassen Netzwerkprogrammierung 7
1 Datei senden/empfangen funzt nicht... Netzwerkprogrammierung 5
S ActiveMQ, JMS und Datei übertragen Netzwerkprogrammierung 25
M Socket Datei über Socket versenden Netzwerkprogrammierung 5
U Web Datei downloaden und bei Änderungen wieder zurückspielen Netzwerkprogrammierung 5
M Class-Datei aus Eclipse mit Xampp Netzwerkprogrammierung 4
A HTTP Download einer Datei mit "Statistiken" Netzwerkprogrammierung 2
B Zugriff auf eine Text- und XML-Datei Netzwerkprogrammierung 4
Dit_ FTP, Datei Hochladen Netzwerkprogrammierung 4
Ollek Download einer Datei durch SFTP mit Java Netzwerkprogrammierung 12
J Datei übertragen ja String + datei übertragen nein Netzwerkprogrammierung 5
P Name der Download-Datei ermitteln Netzwerkprogrammierung 8
N Socket TCP Datei Transfer Netzwerkprogrammierung 2
L Java über php datei lesen? Netzwerkprogrammierung 18
P Socket Datei von Client zum Server übertragen --> Weiterleitung an Clients Netzwerkprogrammierung 16
Akrillo Datei per Netzwerk senden Netzwerkprogrammierung 10
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
L Größe einer Datei auslesen die im Netz liegt Netzwerkprogrammierung 4
weeego Ping über CMD, Umweg über Batch Datei sparen. Netzwerkprogrammierung 17
R Versenden einer MIME-Datei per E-Mail [solved] Netzwerkprogrammierung 5
O Mehrere Datei per DataInput/OutputStream über Socket Netzwerkprogrammierung 12
S StringArray in .txt Datei --> langsam wegen Client/Server!? Netzwerkprogrammierung 16
S Bild-Datei von Servlet an Browser senden Netzwerkprogrammierung 8
U Datei via UDP Netzwerkprogrammierung 8
C Dateigröße einer Datei im Internet ermitteln Netzwerkprogrammierung 2
S Error 404 obwohl die Datei existiert Netzwerkprogrammierung 9
T Datei Herunterladen und ausführen Netzwerkprogrammierung 5
S Mittels Java XML abfragen und nicht die Ausgabe-HTML-Datei Netzwerkprogrammierung 5
F Applet Datei Zugriff Netzwerkprogrammierung 13
G Datei performant im Netzwerk verschieben Netzwerkprogrammierung 4
M [Commons NET] Prüfen, ob auf FTP Datei vorhanden ist Netzwerkprogrammierung 2
Rontu Problem beim Übertragen einer Datei Netzwerkprogrammierung 9
E Größe der Datei vor Download ermitteln Netzwerkprogrammierung 3
C Dateiübertragung - Datei immer ein 4096faches von n Netzwerkprogrammierung 2
E Applet zum Datei-Upload Netzwerkprogrammierung 3
A FileChannel+SocketChannel:Datei wird nur teilweise übertrage Netzwerkprogrammierung 4
J Gibts die Datei? Netzwerkprogrammierung 3
K Datei-Upload per FTP Netzwerkprogrammierung 2
G Fehlermeldung beim Erzeugen der WSDL Datei unter Axis Netzwerkprogrammierung 2
S über rmi datei übertragen? Netzwerkprogrammierung 2
J Zeilenweises auslesen aus einer Datei über Server Netzwerkprogrammierung 6
G Datei über ObjectInputStream versenden Netzwerkprogrammierung 8
G.I.Joe Datei per POST übertragen Netzwerkprogrammierung 2
B Umfangreiche Batch Datei (Rmiregistry prüfung + Prog. start) Netzwerkprogrammierung 4
V Einen Eintrag aus einer Zip Datei von einem Server laden Netzwerkprogrammierung 2
M Datei auf einem Server ausführen Netzwerkprogrammierung 4
N Dateigröße einer Datei auf einem HTTP-/Web-Server. Netzwerkprogrammierung 9
W fehlerhafte Datei nach Dateitransfer per ServletOutputStream Netzwerkprogrammierung 2
F Datei senden und empfangen Netzwerkprogrammierung 4
B Via Java Datei zu PHP-Script auf Apache hochladen Netzwerkprogrammierung 4
B knacken bei download von mp3 datei Netzwerkprogrammierung 2
T Datei senden Netzwerkprogrammierung 3
M Datei auf Remoteserver kopieren Netzwerkprogrammierung 8
B Datei speichern unter Netzwerkprogrammierung 10
B Laden einer *.csv Datei von einem Webserver (http-request) Netzwerkprogrammierung 8
R In Text Datei schreiben die auf einem Server liegt Netzwerkprogrammierung 8
S Unix Datei vom Server nach Windows übertragen Netzwerkprogrammierung 8
T Musik-Stream: Server sendet die Datei zu schnell ? Netzwerkprogrammierung 3
T Mit FTP verbinden, einen Ordner erstellen und Datei löschen Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben