Dies ist eine einfache Parsing -PCAP -Datei, die sich selbst geschrieben hat, was zum Lesen von PCAP -Dateien bequem ist.
Die Codekopie lautet wie folgt:
InputStream ist = dataparser.class.getClassloader (). GetResourceAsStream ("baidu_cdr.pcap");
Pcap pcap = pcapparser.unpack (ist);
is.close ();
byte [] t = pcap.getData (). get (0) .getContent ();
byte [] data = arrays.copyofrange (t, 42, t.Length);
Pcapparser.java
Die Codekopie lautet wie folgt:
Paket com.hylanda.pcap;
importieren java.io.ioException;
importieren java.io.inputstream;
Import Java.util.ArrayList;
importieren java.util.list;
/**
* @Author Zhouqisheng
*
*/
öffentliche Klasse pcapparser {
public statische PCAP -Entpack (InputStream) löst IOException {aus
PCAP PCAP = NULL;
byte [] buffer_4 = neues byte [4];
byte [] buffer_2 = neues byte [2];
PCAP = new PCAP ();
PcAPHEADER -Header = new pcAPHEADER ();
int m = is.read (buffer_4);
if (m! = 4) {
null zurückkehren;
}
ReverseByTearray (Buffer_4);
Header.SetMagic (bytearraytoint (buffer_4, 0));
m = is.read (buffer_2);
ReverseByTearray (Buffer_2);
Header.SetMagor_version (bytearraytoshort (buffer_2, 0));
m = is.read (buffer_2);
ReverseByTearray (Buffer_2);
Header.SetMinor_version (bytearraytoshort (buffer_2, 0));
m = is.read (buffer_4);
ReverseByTearray (Buffer_4);
Header.Settimezone (bytearraytoint (buffer_4, 0));
m = is.read (buffer_4);
ReverseByTearray (Buffer_4);
Header.SetSIGFLAGS (bytearraytoint (buffer_4, 0));
m = is.read (buffer_4);
ReverseByTearray (Buffer_4);
Header.Setsnaplen (bytearraytoint (buffer_4, 0));
m = is.read (buffer_4);
ReverseByTearray (Buffer_4);
Header.SetLinkType (bytearraytoint (buffer_4, 0));
pcap.setheader (Header);
Liste <Capdata> datalist = new ArrayList <Capdata> ();
while (m> 0) {
Pcapdata data = new pcapdata ();
m = is.read (buffer_4);
if (m <0) {
brechen;
}
ReverseByTearray (Buffer_4);
Data.settime_s (bytearraytoint (buffer_4, 0));
m = is.read (buffer_4);
ReverseByTearray (Buffer_4);
data.settime_ms (bytearraytoint (buffer_4, 0));
m = is.read (buffer_4);
ReverseByTearray (Buffer_4);
Data.SetPlength (bytearraytoint (buffer_4, 0));
m = is.read (buffer_4);
ReverseByTearray (Buffer_4);
Data.SetLength (bytearraytoint (buffer_4, 0));
byte [] content = new Byte [data.getPlength ()];
M = IS.Read (Inhalt);
Data.SetContent (Inhalt);
Datalist.Add (Daten);
}
PCAP.SetData (Datalist);
PCAP zurückgeben;
}
private static int bytearraytoint (byte [] b, int offset) {
int value = 0;
für (int i = 0; i <4; i ++) {
int Shift = (4 - 1 - i) * 8;
Wert + = (b [i + offset] & 0x000000ff) << Shift;
}
Rückgabewert;
}
private statische kurze Bytearraytoshort (Byte [] b, int offset) {
kurzer Wert = 0;
für (int i = 0; i <2; i ++) {
int Shift = (2 - 1 - i) * 8;
Wert + = (b [i + offset] & 0x000000ff) << Shift;
}
Rückgabewert;
}
/**
* Umgeben Sie das Array
* @param arr
*/
private static void ReverseByTearray (Byte [] arr) {
Byte -Temperatur;
int n = arr.length;
für (int i = 0; i <n/2; i ++) {
temp = arr [i];
arr [i] = arr [n-1-i];
arr [n-1-i] = temp;
}
}
}
Pcap.java
Die Codekopie lautet wie folgt:
/**
*
*/
Paket com.hylanda.pcap;
importieren java.util.list;
/**
* @Author Zhouqisheng
*
*/
öffentliche Klasse PCAP {
privater PCAPHEADER -Header;
private Liste <Capdata> Daten;
public pcapheader getheader () {
Return Header;
}
public void setheader (pcapheader header) {
this.Header = Header;
}
öffentliche Liste <Capdata> getData () {
Daten zurückgeben;
}
public void setData (Liste <Capdata> Daten) {{
this.data = Daten;
}
@Override
public String toString () {
StringBuilder s = new StringBuilder ();
S.Append ("Header {/n");
S.Append (Header.ToString ());
S.Append ("}/n");
S.Append ("Data Part count ="). append (data.size ());
return s.tostring ();
}
}
Pcapdata.java
Die Codekopie lautet wie folgt:
Paket com.hylanda.pcap;
/**
* @Author Zhouqisheng
* Paketheader
*/
öffentliche Klasse pcapdata {
private int time_s; // Zeitstempel (Sekunden)
private int time_ms; // Zeitstempel (subtil)
private intlength; // Paketlänge
Private int Länge; // Tatsächliche Länge
Private Byte [] Inhalt; // Daten
public int GetTime_s () {
return time_s;
}
public void settime_s (int time_s) {
this.time_s = time_s;
}
public int GetTime_ms () {
return time_ms;
}
public void settime_ms (int time_ms) {
this.time_ms = time_ms;
}
public int getPlength () {
return plength;
}
public void setEllgth (intplength) {
this.Plength = Plength;
}
public int getLength () {
Rücklauflänge;
}
public void setLength (int länge) {
diese.länge = Länge;
}
public byte [] getContent () {
Inhalt zurückgeben;
}
public void setContent (byte [] content) {
this.content = content;
}
@Override
public String toString () {
StringBuilder s = new StringBuilder ();
S.Append ("time_s ="). append (this.time_s);
S.Append ("/ntime_ms ="). append (this.time_ms);
S.Append ("/nPlength ="). append (this.plength);
S.Append ("/nLength ="). append (this.Length);
null zurückkehren;
}
}
Pcapheader.java
Die Codekopie lautet wie folgt:
Paket com.hylanda.pcap;
/**
* @Author Zhouqisheng
* PCAP -Datei -Header
*/
öffentliche Klasse pcapheader {
Private int Magic; // Dateierkennungsheader, 0xa1b2c3d4
Private Short Magor_version; // Hauptversion
Private Short Minor_version; // Minor Version
Private int TimeZone; // Lokale Standardzeit
Private int Sigflags; // die Genauigkeit von Zeitstempeln
private int snaplen; // Maximale Speicherlänge
/**
* 0 BSD -Loopback -Geräte mit Ausnahme später OpenBSD
1 Ethernet- und Linux -Loopback -Geräte
6 802.5 Token -Ring
7 Arcnet
8 Slip
9 Ppp
10 FDDI
100 LLC/Snap-Kapsulated ATM
101 "Raw IP" ohne Link
102 BSD/OS Slip
103 BSD/OS PPP
104 Cisco HDLC
105 802.11
108 später OpenBSD -Loopback -Geräte (mit AF_Value in Netzwerk -Byte -Reihenfolge)
113 Special Linux "gekocht" Capture
114 localTalk
*/
private int linkType; // Link -Typ
public int getMagic () {
Zauberung zurückkehren;
}
public void setmagic (int Magic) {
this.magic = Magic;
}
public Short getMagor_version () {
return Magor_version;
}
public void setMagor_version (Short Magor_version) {
this.magor_version = mAGOR_VERSION;
}
public Short getMinor_version () {
return minor_version;
}
public void setminor_version (Short Minor_version) {
this.minor_version = minor_version;
}
public int GetTimezone () {
Return Timezone;
}
public void setTimezone (int timezone) {
timezone = timezone;
}
public int getSigflags () {
Return Sigflags;
}
public void setSsigflags (int sigflags) {
this.SiGflags = Sigflags;
}
public int GetNaplen () {
Return Snaplen;
}
public void setsnaplen (int snaplen) {
this.snaplen = snapPlen;
}
public int getLinkType () {
return linkType;
}
public void setlinkType (int linkType) {
this.linkType = linkType;
}
@Override
public String toString () {
StringBuilder s = new StringBuilder ();
S.Append ("Magic ="). append ("0x" + Integer.tohexString (this.magic));
S.Append ("/nmagor_version ="). append (this.magor_version);
S.Append ("/nminor_version ="). append (this.minor_version);
S.Append ("/ntimezone ="). append (this.imezone);
S.Append ("/NSIGFLAGS ="). Anhänge (this.SiGflags);
S.Append ("/nsnaplen ="). append (this.snaplen);
S.Append ("/nlinkType ="). append (this.linkType);
return s.tostring ();
}
}