นี่คือไฟล์ PCAP ที่แยกจากกันอย่างง่าย ๆ ที่เขียนด้วยตัวเองซึ่งสะดวกสำหรับการอ่านไฟล์ PCAP
การคัดลอกรหัสมีดังนี้:
inputStream คือ = dataParser.class.getClassLoader (). getResourceasstream ("baidu_cdr.pcap");
pcap pcap = pcapparser.unpack (IS);
is.close ();
ไบต์ [] t = pcap.getData (). รับ (0) .getContent ();
ไบต์ [] 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 แบบคงที่สาธารณะ unpack (inputstream คือ) พ่น IOException {
pcap pcap = null;
ไบต์ [] buffer_4 = ไบต์ใหม่ [4];
ไบต์ [] buffer_2 = ไบต์ใหม่ [2];
pcap = new pcap ();
ส่วนหัว PCAPHEADER = ใหม่ pCAPHEADER ();
int m = is.read (buffer_4);
ถ้า (m! = 4) {
คืนค่า null;
-
ReversebyTearray (buffer_4);
head.setMagic (byteArrayToint (buffer_4, 0));
m = is.read (buffer_2);
ReversebyTearray (buffer_2);
head.setMagor_version (bytearraytoshort (buffer_2, 0));
m = is.read (buffer_2);
ReversebyTearray (buffer_2);
head.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);
head.setsigflags (bytearraytoint (buffer_4, 0));
m = is.read (buffer_4);
ReversebyTearray (buffer_4);
head.setsnaplen (bytearraytoint (buffer_4, 0));
m = is.read (buffer_4);
ReversebyTearray (buffer_4);
head.setLinkType (byteArrayToint (buffer_4, 0));
pcap.setheader (ส่วนหัว);
รายการ <CapData> datalist = new ArrayList <CapData> ();
ในขณะที่ (M> 0) {
pcapdata data = new pcapdata ();
m = is.read (buffer_4);
ถ้า (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));
ไบต์ [] content = byte ใหม่ [data.getPlength ()];
M = IS.READ (เนื้อหา);
data.setContent (เนื้อหา);
datalist.add (ข้อมูล);
-
pcap.setData (Datalist);
ส่งคืน pcap;
-
private static int bytearraytoint (byte [] b, int offset) {
ค่า int = 0;
สำหรับ (int i = 0; i <4; i ++) {
int shift = (4 - 1 - i) * 8;
ค่า + = (b [i + ออฟเซ็ต] & 0x000000ff) << shift;
-
ค่าส่งคืน;
-
private static short bytearraytoshort (byte [] b, int offset) {
ค่าสั้น = 0;
สำหรับ (int i = 0; i <2; i ++) {
int shift = (2 - 1 - i) * 8;
ค่า + = (b [i + ออฟเซ็ต] & 0x000000ff) << shift;
-
ค่าส่งคืน;
-
-
* กลับอาร์เรย์
* @param arr
-
โมฆะคงที่ส่วนตัว 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] = อุณหภูมิ;
-
-
-
pcap.java
การคัดลอกรหัสมีดังนี้:
-
-
-
แพ็คเกจ com.hylanda.pcap;
นำเข้า java.util.list;
-
* @author Zhouqisheng
-
-
PCAP คลาสสาธารณะ {
ส่วนหัว PCAPHEADER ส่วนตัว
รายการส่วนตัว <CapData> ข้อมูล;
PCAPHEADER PCAPHEADER GETHEADER () {
ส่วนหัวกลับ;
-
โมฆะสาธารณะ Setheader (ส่วนหัว pcapheader) {
this.header = ส่วนหัว;
-
รายการสาธารณะ <CapData> getData () {
ส่งคืนข้อมูล
-
โมฆะสาธารณะ setData (รายการ <capdata> ข้อมูล) {
this.data = ข้อมูล;
-
@Override
สตริงสาธารณะ toString () {
StringBuilder s = new StringBuilder ();
S.Append ("ส่วนหัว {/n");
S.Append (header.toString ());
S.Append ("}/n");
S.Append ("จำนวนส่วนข้อมูล =") ผนวก (data.size ());
กลับ s.toString ();
-
-
pcapdata.java
การคัดลอกรหัสมีดังนี้:
แพ็คเกจ com.hylanda.pcap;
-
* @author Zhouqisheng
* ส่วนหัวแพ็คเก็ต
-
PCAPDATA คลาสสาธารณะ {
ส่วนตัว int time_s; // timestamp (วินาที)
ส่วนตัว int time_ms; // timestamp (บอบบาง)
private int plength; // ความยาวแพ็คเก็ต
ความยาว int ส่วนตัว; // ความยาวจริง
ไบต์ส่วนตัว [] เนื้อหา // ข้อมูล
สาธารณะ int getTime_s () {
กลับ time_s;
-
โมฆะสาธารณะ settime_s (int time_s) {
this.time_s = time_s;
-
สาธารณะ int getTime_ms () {
กลับ time_ms;
-
โมฆะสาธารณะ settim_ms (int time_ms) {
this.time_ms = time_ms;
-
สาธารณะ int getPlength () {
คืนความยาว;
-
โมฆะสาธารณะ setPlength (int plength) {
this.plength = plength;
-
สาธารณะ int getLength () {
ความยาวคืน;
-
โมฆะสาธารณะ setLength (ความยาว int) {
this.length = ความยาว;
-
ไบต์สาธารณะ [] getContent () {
ส่งคืนเนื้อหา;
-
โมฆะสาธารณะ setContent (byte [] เนื้อหา) {
this.content = เนื้อหา;
-
@Override
สตริงสาธารณะ toString () {
StringBuilder s = new StringBuilder ();
S.Append ("time_s ="). ผนวก (this.time_s);
S.Append ("/ntime_ms =") ผนวก (this.time_ms);
S.Append ("/nplength ="). ผนวก (this.plength);
S.Append ("/nlength =") ผนวก (this.length);
คืนค่า null;
-
-
pcapheader.java
การคัดลอกรหัสมีดังนี้:
แพ็คเกจ com.hylanda.pcap;
-
* @author Zhouqisheng
* ส่วนหัวไฟล์ PCAP
-
PCAPHEADER ชั้นเรียนสาธารณะ {
ส่วนหัวการจดจำไฟล์ส่วนตัว //, 0xa1b2c3d4
magor_version สั้นส่วนตัว; // รุ่นหลัก
ส่วนตัวสั้น ๆ minor_version; // รุ่นรองลงมา
เขตเวลา INT ส่วนตัว; // เวลามาตรฐานท้องถิ่น
sigflags int ส่วนตัว; // ความถูกต้องของการประทับเวลา
snaplen int ส่วนตัว; // ความยาวการจัดเก็บสูงสุด
-
* 0 BSD Loopback อุปกรณ์ยกเว้น OpenBSD ในภายหลัง
1 Ethernet และ Linux Loopback อุปกรณ์
6 802.5 แหวนโทเค็น
7 Arcnet
8 ลื่น
9 PPP
10 FDDI
ATM 100 LLC/SNAP-encapsulated
101“ IP ดิบ” โดยไม่มีลิงก์
102 BSD/OS สลิป
103 BSD/OS PPP
104 Cisco HDLC
105 802.11
108 ต่อมาอุปกรณ์ OpenBSD LOOPBACK (พร้อม AF_VALUE ในการสั่งซื้อเครือข่ายไบต์)
113 Linux พิเศษ "ปรุงสุก"
114 LocalTalk
-
private int linktype; // ประเภทลิงค์
สาธารณะ int getMagic () {
เวทมนตร์กลับ;
-
โมฆะสาธารณะ setMagic (int magic) {
this.magic = Magic;
-
Public Short GetMagor_Version () {
คืน Magor_version;
-
โมฆะสาธารณะ setmagor_version (magor_version สั้น) {
this.magor_version = magor_version;
-
Public Short GetMinor_Version () {
กลับ minor_version;
-
โมฆะสาธารณะ setminor_version (สั้น minor_version) {
this.minor_version = minor_version;
-
สาธารณะ int getTimezone () {
กลับเขตเวลา;
-
โมฆะสาธารณะ Settimezone (เขตเวลา int) {
this.timezone = เขตเวลา;
-
สาธารณะ int getSigFlags () {
กลับ sigflags;
-
โมฆะสาธารณะ setsigflags (int sigflags) {
this.sigflags = sigflags;
-
สาธารณะ int getNaPlen () {
กลับ Snaplen;
-
โมฆะสาธารณะ setsnaplen (int snaplen) {
this.snaplen = snapplen;
-
สาธารณะ int getLinktype () {
กลับ linktype;
-
โมฆะสาธารณะ setLinkType (int linkType) {
this.linkType = linkType;
-
@Override
สตริงสาธารณะ toString () {
StringBuilder s = new StringBuilder ();
S.Append ("magic ="). ต่อ ("0x" + integer.tohexstring (this.magic));
S.Append ("/nmagor_version =") ผนวก (this.magor_version);
S.Append ("/nminor_version =") ผนวก (this.minor_version);
S.Append ("/ntimezone =") ผนวก (this.timezone);
S.Append ("/nsigflags =") ผนวก (this.sigflags);
S.Append ("/nsnaPlen =") ผนวก (this.snaplen);
S.Append ("/nlinkType =") ผนวก (this.linkType);
กลับ s.toString ();
-
-