Il s'agit d'un fichier PCAP d'analyse simple écrit par vous-même, ce qui est pratique pour la lecture des fichiers PCAP.
La copie de code est la suivante:
InputStream is = dataParser.class.getClassLoader (). GetResourCeasStream ("baidu_cdr.pcap");
PCAP PCAP = PCAPPARSER.UNPACK (IS);
is.close ();
Byte [] t = pcap.getData (). get (0) .getContent ();
octet [] data = arrays.copyofrange (t, 42, t.length);
Pcapparser.java
La copie de code est la suivante:
Package com.hylanda.pcap;
Importer java.io.ioException;
import java.io.inputStream;
import java.util.arraylist;
Importer java.util.list;
/ **
* @author zhouqisheng
*
* /
classe publique pcapparser {
Public Static PCAP Unpack (InputStream IS) lève IOException {
PCAP PCAP = NULL;
octet [] buffer_4 = nouveau octet [4];
octet [] buffer_2 = nouveau octet [2];
pcap = new pcap ();
En-tête pcaPHeader = new pcaPapheader ();
int m = is.read (buffer_4);
si (m! = 4) {
retourner null;
}
ReverseByTearray (Buffer_4);
header.setmagic (bytearraytoint (buffer_4, 0));
m = is.read (buffer_2);
ReverseByTearray (Buffer_2);
en-henter.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);
en-henter.setTimeZone (bytearrayToint (buffer_4, 0));
m = is.read (buffer_4);
ReverseByTearray (Buffer_4);
en-henter.setsigflags (bytearraytoint (buffer_4, 0));
m = is.read (buffer_4);
ReverseByTearray (Buffer_4);
en-tête.SetsNaplen (bytearrayToint (buffer_4, 0));
m = is.read (buffer_4);
ReverseByTearray (Buffer_4);
header.setLinkType (bytearrayToint (buffer_4, 0));
pcap.sethEader (en-tête);
List <capdata> datalist = new ArrayList <Capdata> ();
while (m> 0) {
PcapData data = new pcapData ();
m = is.read (buffer_4);
if (m <0) {
casser;
}
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 [] contenu = nouveau octet [data.getPlength ()];
m = is.read (contenu);
data.setContent (contenu);
datalist.add (données);
}
pcap.setData (datalist);
return pCAP;
}
private static int bytearraytoint (byte [] b, int offset) {
int value = 0;
pour (int i = 0; i <4; i ++) {
int shift = (4 - 1 - i) * 8;
valeur + = (b [i + offset] & 0x000000ff) << shift;
}
valeur de retour;
}
STATIQUE PRIVÉ STATIQUE BYTEARRAYTOSHORT (BYTE [] B, INT OFFSET) {
valeur courte = 0;
pour (int i = 0; i <2; i ++) {
int shift = (2 - 1 - i) * 8;
valeur + = (b [i + offset] & 0x000000ff) << shift;
}
valeur de retour;
}
/ **
* Inversez le tableau
* @param arr
* /
private static void reverseBytearray (octet [] arr) {
octet temp;
int n = arr.Length;
pour (int i = 0; i <n / 2; i ++) {
temp = arr [i];
arr [i] = arr [n-1-i];
arr [n-1-i] = temp;
}
}
}
Pcap.java
La copie de code est la suivante:
/ **
*
* /
Package com.hylanda.pcap;
Importer java.util.list;
/ **
* @author zhouqisheng
*
* /
classe publique PCAP {
En-tête PCAPHEDER privé;
Données de liste privée <capdata>;
public pcapapader getheader () {
En-tête de retour;
}
public void setheader (en-tête pcapheader) {
this.header = en-tête;
}
Liste publique <capdata> getData () {
retourner les données;
}
public void setData (list <capdata> data) {
this.data = data;
}
@Outrepasser
public String toString () {
StringBuilder s = new StringBuilder ();
S.APPEND ("En-tête {/ n");
S.APPEND (en-tête.ToString ());
S.APPEND ("} / n");
S.APPEND ("Data Part Count ="). APPEND (DATA.SIZE ());
retour s.toString ();
}
}
Pcapdata.java
La copie de code est la suivante:
Package com.hylanda.pcap;
/ **
* @author zhouqisheng
* En-tête de paquet
* /
classe publique pcapdata {
Time_s privé; // Timestamp (secondes)
Time_ms privé; // Timestamp (subtil)
private int slength; // longueur de paquet
Longueur privée int; // longueur réelle
contenu octet privé []; // données
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 flength;
}
public void setPlength (int pllongs) {
this.plength = pllong;
}
public int getLength () {
longueur de retour;
}
public void setLength (int longueur) {
this.length = longueur;
}
octet public [] getContent () {
retourner le contenu;
}
public void setContent (contenu byte []) {
this.Content = contenu;
}
@Outrepasser
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);
retourner null;
}
}
PCAaphEader.java
La copie de code est la suivante:
Package com.hylanda.pcap;
/ **
* @author zhouqisheng
* En-tête de fichier PCAP
* /
classe publique pcapaPheader {
private int magic; // En-tête de reconnaissance de fichiers, 0xa1b2c3d4
Private Short Magor_version; // Version principale
Private Short Minor_version; // Version mineure
Fiède intrigue privé; // heure standard locale
private int sigflags; // la précision des horodatages
private int snaplen; // longueur de stockage maximale
/ **
* 0 Dispositifs de bouclage BSD, sauf pour OpenBSD ultérieure
1 Ethernet et Linux Loopback Devices
6 802.5 Anneau de jeton
7 arcnet
8 Slip
9 PPP
10 FDDI
100 LLC / ATM encapsulant Snap
101 «IP brut», sans lien
102 BSD / OS Slip
103 BSD / OS PPP
104 Cisco HDLC
105 802.11
108 Dispositifs de bouclage OpenBSD ultérieurs (avec l'ordre AF_VALUE dans le réseau de réseau)
113 Capture spéciale "cuite"
114 localtalk
* /
private int linkType; // Type de lien
public int getmagic () {
retour de la magie;
}
public void setmagic (int magic) {
this.magic = magie;
}
public court getmagor_version () {
retour magor_version;
}
public void setmagor_version (court magor_version) {
this.magor_version = magor_version;
}
public court getminor_version () {
return minert_version;
}
public void setminor_version (court mineur_version) {
this.minor_version = mineur_version;
}
public int gettimeZone () {
RETOUR LE TEMPSONE;
}
public void setTimeZone (int timezone) {
this.timeZone = Timezone;
}
public int getsigflags () {
return sigflags;
}
public void setSigflags (int sigflags) {
this.sigflags = sigflags;
}
public int getSnaplen () {
return snaplen;
}
public void setsnaplen (int snaplen) {
this.snaplen = snapplen;
}
public int getLinkType () {
retour linkType;
}
public void SetLinkType (int linkType) {
this.linkType = linkType;
}
@Outrepasser
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.timeZone);
S.APPEND ("/ nsigflags ="). APPEND (this.sigflags);
S.APPEND ("/ nsnaplen ="). APPEND (this.snaplen);
S.APPEND ("/ nLinkType ="). APPEND (this.linkType);
retour s.toString ();
}
}