# Jpcap: Packet.data = ?



## th_pion (22. Sep 2009)

Hi, ich habe mit Jpcap ein DHCP-Paket empfangen und dieses liegt nun als eine Instanz der Klasse Packet (aus der Jpcap-Bibliothek) vor. Dieses Objekt hat ein byte-Array "data". Was genau steht da drin? Die Daten, das ist klar...aber auch der IP-Header und der DHCP-Header?

Zur Erklärung:
bisher habe ich mit einem DatagramSocket ein DatagramPacket empfangen, habe von diesem die Methode getData() aufgerufen und das zurueckgegebene byte-Array benutzt:

```
DHCPMessage dhcp = new DHCPMessage(packet.getData());
```
bei DHCPMessage handelt es sich um eine Klasse aus der JDHCP-Library.

Das hat soweit ganz gut funktioniert, da ich aber die Mac-Adresse des Servers haben will, habe ich das Paket jetzt eben mit Jpcap empfangen...wenn ich jetzt aber einfach das byte-Array aus der Packet-Klasse nehme, kriege ich in der oben genannten Zeile eine EOFException.


weiß jemand genaueres? also z.B. was da in dem Byte-Array genau drin steht?

P.S.: auslesen und "nachgucken" ist etwas doof, da das ja alles nur irgendwelche Bytes sind, mit denen ich wenig anfangen kann...


----------



## tuxedo (23. Sep 2009)

Du könntest mal WireShark (google hilft) benutzen und dessen Ausgabe mit den Daten in deinem Paket vergleichen. Dann kannst du vielleicht eher zuordnen was was ist. Oder die API lesen. Da müsste das auch drin stehen.


----------



## tuxedo (23. Sep 2009)

Hast du mal nach "jpcap get sender mac" gegoogelt? Da wärst du auf das gestoßen:

v15, i09: Listing 4 arp method

Bin mir nicht sicher ob du via "Packet" Klasse noch an die MAC kommst. Die MAC ist ja nur in den unteren Layern (siehe OSI-Modell ? Wikipedia) von interesse.


----------



## th_pion (23. Sep 2009)

hab mit einigem hin und her und wireshark alles rausgefunden was ich brauch =)

in Packet.data steht der Body des UDP/TCP-Paketes, in Packet.header alle Header bis dahin (Ethernet, IP, TCP/UDP). => DHCP-Header und Informationen stehen im .data-Teil.

Problem beim umwandeln war, dass das data-Feld auch wirklich nur so lang ist, wie der Body eben ist, der DHCPMessage-Konstruktor aber von der maximalgröße ausgeht.

arp ist keine Option, da die IP-Adresse die der Server im Header angibt nicht unbedingt die richtige ist und demnach evtl. nicht gefunden wird.

über Packet.datalink kommt man aber an die Mac-Adresse.


Also hab ich jetzt die Mac-Adresse und kann den Rest in ein DHCPMessage-Objekt konvertieren => Problem gelöst, thx  =)


----------

