亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java抓包后對(duì)pcap文件解析示例

 更新時(shí)間:2014年03月20日 09:14:42   作者:  
這篇文章主要介紹了java抓包后對(duì)pcap文件解析示例,需要的朋友可以參考下

這是自己寫(xiě)的簡(jiǎn)單的解析pcap文件,方便讀取pcap文件,大家參考使用吧

復(fù)制代碼 代碼如下:

InputStream is = 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

復(fù)制代碼 代碼如下:

package com.hylanda.pcap;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * @author zhouqisheng
 *
 */
public class PcapParser {

 public static Pcap unpack(InputStream is) throws IOException {
  Pcap pcap = null;
  byte[] buffer_4 = new byte[4];
  byte[] buffer_2 = new byte[2];
  pcap = new Pcap();

  PcapHeader header = new PcapHeader();
  int m = is.read(buffer_4);
  if(m != 4){
   return null;
  }
  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);

  List<PcapData> dataList = new ArrayList<PcapData>();
  while (m > 0) {
   PcapData data = new PcapData();
   m = is.read(buffer_4);
   if (m < 0) {
    break;
   }
   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(content);

   dataList.add(data);
  }

  pcap.setData(dataList);
  return pcap;
 }

 private static int byteArrayToInt(byte[] b, int offset) {
  int value = 0;
  for (int i = 0; i < 4; i++) {
   int shift = (4 - 1 - i) * 8;
   value += (b[i + offset] & 0x000000FF) << shift;
  }
  return value;
 }

 private static short byteArrayToShort(byte[] b, int offset) {
  short value = 0;
  for (int i = 0; i < 2; i++) {
   int shift = (2 - 1 - i) * 8;
   value += (b[i + offset] & 0x000000FF) << shift;
  }
  return value;
 }

 /**
  * 反轉(zhuǎn)數(shù)組
  * @param arr
  */
 private static void reverseByteArray(byte[] arr){
  byte temp;
  int n = arr.length;
  for(int i=0; i<n/2; i++){
   temp = arr[i];
   arr[i] = arr[n-1-i];
   arr[n-1-i] = temp;
  }
 }

}

Pcap.java

復(fù)制代碼 代碼如下:

/**
 *
 */
package com.hylanda.pcap;

import java.util.List;

/**
 * @author zhouqisheng
 *
 */
public class Pcap {
 private PcapHeader header;
    private List<PcapData> data;
 public PcapHeader getHeader() {
  return header;
 }
 public void setHeader(PcapHeader header) {
  this.header = header;
 }
 public List<PcapData> getData() {
  return data;
 }
 public void setData(List<PcapData> data) {
  this.data = data;
 }
    @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

復(fù)制代碼 代碼如下:

package com.hylanda.pcap;

/**
 * @author zhouqisheng
 *  數(shù)據(jù)包頭
 */
public class PcapData {
 private int time_s;//時(shí)間戳(秒)
 private int time_ms;//時(shí)間戳(微妙)
 private int pLength;//抓包長(zhǎng)度
 private int length;//實(shí)際長(zhǎng)度
 private byte[] content;//數(shù)據(jù)
 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 setpLength(int pLength) {
  this.pLength = pLength;
 }
 public int getLength() {
  return length;
 }
 public void setLength(int length) {
  this.length = length;
 }
 public byte[] getContent() {
  return content;
 }
 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);
  return null;
 }
}

PcapHeader.java

復(fù)制代碼 代碼如下:

package com.hylanda.pcap;

/**
 * @author zhouqisheng
 * pcap文件頭
 */
public class PcapHeader {
 private int magic;//文件識(shí)別頭,為0xA1B2C3D4
 private short magor_version;//主要版本
    private short minor_version;//次要版本
    private int timezone;//當(dāng)?shù)貥?biāo)準(zhǔn)時(shí)間
    private int sigflags;//時(shí)間戳的精度
    private int snaplen;//最大的存儲(chǔ)長(zhǎng)度
    /**
     * 0            BSD loopback devices, except for later OpenBSD
  1            Ethernet, and Linux loopback devices
  6            802.5 Token Ring
  7            ARCnet
  8            SLIP
  9            PPP
  10           FDDI
  100         LLC/SNAP-encapsulated ATM
  101         “raw IP”, with no link
  102         BSD/OS SLIP
  103         BSD/OS PPP
  104         Cisco HDLC
  105         802.11
  108         later OpenBSD loopback devices (with the AF_value in network byte order)
  113         special Linux “cooked” capture
  114         LocalTalk
     */
    private int linktype;//鏈路類型
 public int getMagic() {
  return magic;
 }
 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) {
  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 = snaplen;
 }
 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.timezone);
  s.append("\nsigflags=").append(this.sigflags);
  s.append("\nsnaplen=").append(this.snaplen);
  s.append("\nlinktype=").append(this.linktype);
     return s.toString();
    }
}

相關(guān)文章

  • 超級(jí)好用的輕量級(jí)JSON處理命令jq(最新推薦)

    超級(jí)好用的輕量級(jí)JSON處理命令jq(最新推薦)

    jq是一個(gè)輕量級(jí)的命令行工具,讓你可以非常方便地處理JSON數(shù)據(jù),如切分、過(guò)濾、映射、轉(zhuǎn)化等,就像sed、awk、grep文本處理三劍客一樣,這篇文章主要介紹了超級(jí)好用的輕量級(jí)JSON處理命令jq,需要的朋友可以參考下
    2023-01-01
  • Java套接字(Socket)網(wǎng)絡(luò)編程入門(mén)

    Java套接字(Socket)網(wǎng)絡(luò)編程入門(mén)

    這篇文章主要介紹了Java套接字(Socket)網(wǎng)絡(luò)編程入門(mén),Socket可以理解為是對(duì)TCP/IP協(xié)議的抽象,需要的朋友可以參考下
    2015-10-10
  • Java實(shí)現(xiàn)企業(yè)微信消息推送功能的詳細(xì)步驟

    Java實(shí)現(xiàn)企業(yè)微信消息推送功能的詳細(xì)步驟

    這篇文章主要介紹了Java實(shí)現(xiàn)企業(yè)微信消息推送功能,本文圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • 詳解Mybatis核心配置文件

    詳解Mybatis核心配置文件

    今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著Mybatis核心配置文件展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • J2EE基礎(chǔ)之EJB全面了解

    J2EE基礎(chǔ)之EJB全面了解

    下面小編就為大家?guī)?lái)一篇J2EE基礎(chǔ)之EJB全面了解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07
  • Spring security 自定義過(guò)濾器實(shí)現(xiàn)Json參數(shù)傳遞并兼容表單參數(shù)(實(shí)例代碼)

    Spring security 自定義過(guò)濾器實(shí)現(xiàn)Json參數(shù)傳遞并兼容表單參數(shù)(實(shí)例代碼)

    這篇文章主要介紹了Spring security 自定義過(guò)濾器實(shí)現(xiàn)Json參數(shù)傳遞并兼容表單參數(shù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Spring源碼解析 Bean的實(shí)例化

    Spring源碼解析 Bean的實(shí)例化

    這篇文章主要介紹了Spring源碼解析 Bean的實(shí)例化,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹沒(méi)具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • 基于Java向zip壓縮包追加文件

    基于Java向zip壓縮包追加文件

    這篇文章主要介紹了基于Java向zip壓縮包追加文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 深入淺出的講解Java關(guān)鍵字final的作用

    深入淺出的講解Java關(guān)鍵字final的作用

    final是Java中非常常見(jiàn)的一個(gè)關(guān)鍵字,可以說(shuō)每天都在使用它,雖然常見(jiàn),但卻也不見(jiàn)得都那么顯而易見(jiàn),今天就來(lái)研究一下final,以加深對(duì)它的理解和更合理的運(yùn)用,需要的朋友可以參考下
    2023-06-06
  • MyBatis實(shí)現(xiàn)插入大量數(shù)據(jù)方法詳解

    MyBatis實(shí)現(xiàn)插入大量數(shù)據(jù)方法詳解

    最近在公司項(xiàng)目開(kāi)發(fā)中遇到批量數(shù)據(jù)插入或者更新,下面這篇文章主要給大家介紹了關(guān)于MyBatis實(shí)現(xiàn)批量插入的相關(guān)資料,需要的朋友可以參考下
    2022-11-11

最新評(píng)論