Kraken HTTP Sniffer: ExceptionInInitializerError (Nutzt JNI)

Griffith

Neues Mitglied
Hallo,

auf der Suche nach einem TCP/IP-Stack und HTTP-Parser für libpcap bin ich auf Kraken PCAP und Kraken HTTP Decoder gestoßen. Dadurch ist es in Java möglich sämtlichen HTTP-Datenverkehr, der z.B. über www.youtube.com, übertragen wird mitzuschneiden. Damit das funktioniert muss allerdings ein PCAP-Netzwerktreiber im Betriebssystem installiert sein (unter Linux: libpcap; unter Windows: WinPCAP). Jeder der schonmal Wireshark benutzt hat, hat diesen Treiber bereits installiert.

Mein Problem ist, dass die Beispielanwendung Kraken HTTP Sniffer nicht startet. Diese Beispielanwendung besteht aus einer einzelnen .jar Datei und sollte eigentlich auf jedem System mit installiertem PCAP-Treiber sofort läuffähig sein. Trotzdem bricht das Javaprogramm sofort mit einem ExceptionInInitializerError ab.

Um aus Java aus auf libpcap zuzugreifen wird das JNI-Modul "kpcap" geladen. Die .dll bzw .so befindet sich in der .jar und wird normalerweise beim Start in das Arbeitsverzeichnis kopiert und dann geladen. Vermutlich liegt da der Fehler?

Download von KrakenHttpSniffer: kraken-http-sniffer-0.5.1-package.jar
Download von Wireshark (enthält den passenden Treiber): Wireshark Homepage

Command Line: java -jar kraken-http-sniffer-0.5.1-package.jar

Ausgabe mit Fehler:
Code:
[*] Device name is required
Error in GetInterfaceInfo
Exception in thread "main" java.lang.ExceptionInInitializerError
        at org.krakenapps.featurepack.sniffer.SnifferBase.run(SnifferBase.java:33)
        at org.krakenapps.featurepack.sniffer.http.HttpSniffer.main(HttpSniffer.java:20)
Caused by: java.lang.NullPointerException
        at java.util.Arrays$ArrayList.<init>(Unknown Source)
        at java.util.Arrays.asList(Unknown Source)
        at org.krakenapps.pcap.live.PcapDeviceManager.<clinit>(PcapDeviceManager.java:19)
        ... 2 more

Normalerweise sollte aber in der Ausgabe eine Liste aller Netzwerkinterfaces stehen ... z.B.:
Code:
[*] Device name is required
{BCEFC3FC-73EC-41C5-9EBC-25A4F645D748} MS Tunnel Interface Driver
{AFF4C6CC-2C74-485A-8A7F-807712D18A24} TAP-Win32 Adapter V8
{5E955A8C-E8A8-4A02-8EDB-161136A6886A} Microsoft
{FE8D1EF3-3E0B-46ED-B776-217C4F180D15} Marvell Yukon Ethernet Controller.
{A569FFF6-617E-4B48-92D3-D086C63857AD} Microsoft

Ich habe kaum Erfahrung mit Java und via Google und Javadocs bin ich bisher kein Stückchen weiter gekommen. Hab auch schon versucht den Autor des Beispielprogramms eine kurze E-Mail zu schreiben, allerdings gabs da seit 1 Woche leider noch keine Antwort ...

Wenn jemand ein paar Tipps hat, wie ich dieses Beispielprogramm zum Laufen bringen kann, bin ich wirklich dankbar dafür :)
 

Murray

Top Contributor
Es knallt vermutlich an dieser Stelle:
Java:
cachedDeviceMetadataList = Arrays.asList(getDeviceList());
getDeviceList() ist native implementiert; lt. Konsolenausgabe geht hier etwas schief:
Code:
        GetInterfaceInfo(NULL, &lSize);
59	        pInfo = (PIP_INTERFACE_INFO)malloc(lSize);
60	
61	        if(GetInterfaceInfo(pInfo, &lSize) != NO_ERROR) {
62	                fprintf(stderr, "Error in GetInterfaceInfo\n");
63	                return NULL;
64	        }
Mit GetInterfaceInfo sind wir mitten im Windows-API; da hört es mit Source-Code-Analyse auf. Leider ist die Fehlerbehandlung im C-Code nicht so toll, sonst könnte man eventuell mehr sehen.
 

Griffith

Neues Mitglied
Ah. Danke für die schnelle Antwort.

Gut, dann weiß ich jetzt ja endlich wo ich suchen muss. Das ist schonmal das wichtigste.
Werd wohl nicht drum herum kommen, den C-Code selbst zu fixen. Bzw. zu versuchen :eek: :(

Und wenn ich mir den C-Code so anschaue, dann vermute ich mal, dass es zumindest unter Linux sofort läuft.

Das merkwürdige ist: Der Fehler tritt nur auf, wenn ich versuche die fertige .jar auszuführen.
In der NetBeans-IDE als Maven-Projekt funktioniert es einwandfrei.

Dependencies: kraken-pcap-1.3.0
Und natürlich die .dll per Hand ins Arbeitsverzeichnis entpackt.

Java:
import org.krakenapps.pcap.live.*;

public class Test {
    public static void main(String[] args) {
        System.out.println("Device Enumeration:");
        for(PcapDeviceMetadata metadata : PcapDeviceManager.getDeviceMetadataList()) {
            System.out.println(metadata.getName() + " " + metadata.getDescription());
        }
    }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Kraken Asset Names Java Basics - Anfänger-Themen 17
M Rest- Api mit HTTP BASIC Authentication Java Basics - Anfänger-Themen 16
L Webseite aufrufen (HTTP) Java Basics - Anfänger-Themen 8
P Maven-Dependencies (package org.apache.http.nio does not exist) Java Basics - Anfänger-Themen 6
S XML mittels HTTP Get Anfrage Java Basics - Anfänger-Themen 4
W Netwerkprogrammierung und Http Server Java Basics - Anfänger-Themen 10
R HTTP-Links in Java Class finden Java Basics - Anfänger-Themen 3
P Http Header, Http Proxy Java Basics - Anfänger-Themen 19
W HTTP-Stream auf Ajax umbauen Java Basics - Anfänger-Themen 7
F Http Post von mehreren Daten Java Basics - Anfänger-Themen 5
K URL ohne http:// Java Basics - Anfänger-Themen 8
F HTTP Get Queue Java Basics - Anfänger-Themen 7
J HTTP Request auf eine PHP Session Java Basics - Anfänger-Themen 1
E HTTP Client - Login durchführen? Java Basics - Anfänger-Themen 4
T Input/Output HTTP 403 aber im Browser gehts Java Basics - Anfänger-Themen 2
O get HTTP Headers Java Basics - Anfänger-Themen 5
L Methodenzerlegung HTTP Java Basics - Anfänger-Themen 4
S HTTP Adresse von offenem Browserfenset einlesen Java Basics - Anfänger-Themen 6
C HTTP POST-Request Java Basics - Anfänger-Themen 3
G http-Port beim Apache Tomcat ändern Java Basics - Anfänger-Themen 1
G HTTP Server Java Basics - Anfänger-Themen 2
S HTTP Request Umlaut Problem Java Basics - Anfänger-Themen 3
N Http-Request : Google Suche Java Basics - Anfänger-Themen 6
G http-Request auf Apache Tomcat Java Basics - Anfänger-Themen 13
G HTTP Body? Java Basics - Anfänger-Themen 4
A HTTP-Request Java Basics - Anfänger-Themen 15
K Problem mit javax/servlet/http/HttpServletRequest.java Java Basics - Anfänger-Themen 2
J Mehrdimensionales Array im Http-Request Java Basics - Anfänger-Themen 5
M Http Redirect Java Basics - Anfänger-Themen 5
M HTTP-Anfragen und Socket Java Basics - Anfänger-Themen 2
T mit einem string der form"[url]http://www.*.*/*"[/url] datei Java Basics - Anfänger-Themen 3
J HTTP Request Auslösen Java Basics - Anfänger-Themen 2
P HTTP-Request Parameter übergeben Java Basics - Anfänger-Themen 8
G http client Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben