هذا ملف PCAP بسيط من قبل نفسك ، وهو مناسب لقراءة ملفات PCAP.
نسخة الكود كما يلي:
inputStream هو = dataparser.class.getClassLoader (). getResourCeasStream ("Baidu_cdr.pcap") ؛
PCAP PCAP = pcapparser.unpack (IS) ؛
is.close () ؛
byte [] t = pcap.getData (). get (0) .getContent () ؛
byte [] data = arrays.copyofrange (t ، 42 ، t.length) ؛
pcapparser.java
نسخة الكود كما يلي:
حزمة com.hylanda.pcap ؛
استيراد java.io.ioException ؛
استيراد java.io.inputstream ؛
استيراد java.util.arraylist ؛
استيراد java.util.list ؛
/**
* Author Zhouqisheng
*
*/
الطبقة العامة pcapparser {
إلغاء PCAP الثابت العام (InputStream) يلقي ioexception {
PCAP PCAP = NULL ؛
byte [] buffer_4 = new byte [4] ؛
byte [] buffer_2 = new byte [2] ؛
PCAP = جديد pcap () ؛
pcapheader header = جديد pcapheader () ؛
int m = is.Read (buffer_4) ؛
إذا (م! = 4) {
العودة لاغية.
}
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 (رأس) ؛
قائمة <PCAPDATA> DATALIST = New ArrayList <PCAPDATA> () ؛
بينما (M> 0) {
بيانات pcapdata = جديد pcapdata () ؛
M = IS.Read (buffer_4) ؛
if (m <0) {
استراحة؛
}
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 (content) ؛
data.setContent (المحتوى) ؛
Datalist.add (البيانات) ؛
}
pcap.setData (Datalist) ؛
إرجاع PCAP ؛
}
private static int bytearraytoint (byte [] b ، int arfset) {
قيمة int = 0 ؛
لـ (int i = 0 ؛ i <4 ؛ i ++) {
int shift = (4 - 1 - i) * 8 ؛
value + = (b [i + Offset] & 0x000000ff) << shift ؛
}
قيمة الإرجاع
}
ثابت خاص باختصار BYTEARRAYTOSHORT (BYTE [] B ، Int Offset) {
القيمة القصيرة = 0 ؛
لـ (int i = 0 ؛ i <2 ؛ i ++) {
int shift = (2 - 1 - i) * 8 ؛
value + = (b [i + Offset] & 0x000000ff) << shift ؛
}
قيمة الإرجاع
}
/**
* قلب المصفوفة
* param arr
*/
private static void reversebytearray (byte [] arr) {
بايت مؤقت
int n = arr.length ؛
لـ (int i = 0 ؛ i <n/2 ؛ i ++) {
temp = arr [i] ؛
arr [i] = arr [n-1-i] ؛
arr [n-1-i] = temp ؛
}
}
}
PCAP.JAVA
نسخة الكود كما يلي:
/**
*
*/
حزمة com.hylanda.pcap ؛
استيراد java.util.list ؛
/**
* Author Zhouqisheng
*
*/
الفئة العامة PCAP {
رأس pcapheader الخاص ؛
قائمة خاصة <PCAPDATA> بيانات ؛
PCAPHEADER GETHEADER () {
رأس العودة
}
setheader public void (pcapheader header) {
this.header = header ؛
}
القائمة العامة <PCAPDATA> getData () {
إرجاع البيانات ؛
}
public void setData (قائمة <CPAPDATA> DATA) {
this.data = البيانات ؛
}
@تجاوز
السلسلة العامة tostring () {
StringBuilder s = new StringBuilder () ؛
S.Append ("Header {/n") ؛
S.Append (header.toString ()) ؛
S.Append ("}/n") ؛
S.Append ("count part data ="). append (data.size ()) ؛
إرجاع S.ToString () ؛
}
}
PCAPDATA.JAVA
نسخة الكود كما يلي:
حزمة com.hylanda.pcap ؛
/**
* Author Zhouqisheng
* حزمة رأس
*/
فئة عامة pcapdata {
private int time_s ؛ // timestamp (Seconds)
private int time_ms ؛ // timestamp (خفية)
Private Int Plenge ؛ // طول الحزمة
طول الباحث الخاص ؛ // الطول الفعلي
محتوى بايت خاص [] // البيانات
العام int getTime_S () {
إرجاع time_s ؛
}
public void settime_s (int time_s) {
this.time_s = time_s ؛
}
العام int getTime_MS () {
إرجاع time_ms ؛
}
public void settime_ms (int time_ms) {
this.time_ms = time_ms ؛
}
عام int getplength () {
عودة بلفة.
}
public void setplength (int plenge) {
this.plength = plenge ؛
}
عام int getLength () {
عودة طول
}
public void setlength (int length) {
this.length = الطول ؛
}
البايت العام [] getContent () {
إرجاع المحتوى ؛
}
public void setContent (byte [] content) {
this.content = المحتوى ؛
}
@تجاوز
السلسلة العامة tostring () {
StringBuilder s = new StringBuilder () ؛
S.Append ("time_s ="). append (this.time_s) ؛
S.Append ("/ntime_ms ="). إلحاق (this.time_ms) ؛
S.Append ("/nplength ="). إلحاق (this.plength) ؛
S.Append ("/nlength ="). إلحاق (this.length) ؛
العودة لاغية.
}
}
PCAPHEADER.JAVA
نسخة الكود كما يلي:
حزمة com.hylanda.pcap ؛
/**
* Author Zhouqisheng
* رأس ملف PCAP
*/
الطبقة العامة pcapheader {
Private Int Magic ؛ // Header File التعرف على الملفات ، 0xa1b2c3d4
MAGOR_VERSION الخاص ؛ // الإصدار الرئيسي
خاص قصير minor_version ؛ // نسخة صغيرة
int int timezone ؛ // الوقت القياسي المحلي
int sigflags ؛ // دقة الطوابع الزمنية
Private Int Snaplen ؛ // طول التخزين القصوى
/**
* 0 أجهزة الاسترجاع BSD ، باستثناء OpenBSD لاحقًا
1 أجهزة Ethernet و Linux Loopback
6 802.5 Token Ring
7 arcnet
8 انزلاق
9 PPP
10 FDDI
100 LLC/Snap Captated ATM
101 "RAW IP" ، بدون رابط
102 BSD/OS Slip
103 BSD/OS PPP
104 Cisco HDLC
105 802.11
108 في وقت لاحق OpenBSD أجهزة الاسترجاع (مع AF_VALUE في ترتيب بايت الشبكة)
113 التقاط Linux "المطبوخ" الخاص
114 محلي
*/
private int linktype ؛ // نوع الرابط
الجمهور int getMagic () {
إرجاع السحر
}
setMagic public void (int magic) {
this.magic = السحر ؛
}
Public Short GetMagor_Version () {
إرجاع magor_version ؛
}
public void setmagor_version (magor_version) {
this.magor_version = magor_version ؛
}
الجمهور القصيرة getMinor_Version () {
إرجاع minor_version ؛
}
public void setminor_version (Short minor_version) {
this.minor_version = minor_version ؛
}
العام int getTimeZone () {
إعادة المنطقة الزمنية ؛
}
public void settimezone (int timezone) {
this.timezone = timezone ؛
}
الجمهور int getsigflags () {
إرجاع sigflags.
}
setSigFlags public void (int sigflags) {
this.sigflags = sigflags ؛
}
العام int getNaplen () {
إرجاع Snaplen.
}
public void setSnaplen (int snaplen) {
this.snaplen = snapplen ؛
}
العام int getLinkType () {
إرجاع linktype ؛
}
public void setLinkType (int linktype) {
this.linktype = linktype ؛
}
@تجاوز
السلسلة العامة tostring () {
StringBuilder s = new StringBuilder () ؛
S.Append ("magic ="). append ("0x" + integer.toHexString (this.magic)) ؛
S.Append ("/nmagor_version ="). إلحاق (this.magor_version) ؛
S.Append ("/nminor_version ="). إلحاق (this.minor_version) ؛
S.Append ("/ntimezone ="). oppend (this.timezone) ؛
S.Append ("/nsigflags ="). إلحاق (this.sigflags) ؛
S.Append ("/nsnaplen ="). إلحاق (this.snaplen) ؛
S.Append ("/nlinktype ="). إلحاق (this.linktype) ؛
إرجاع S.ToString () ؛
}
}