1. 程式人生 > >手把手教你用jpcap抓包

手把手教你用jpcap抓包

本文原創,轉載請註明出處~

在工作中經常需要抓包進行分析,我們可以使用各種工具來抓包,比如常用的tcpdump和wireshark。但有時候我們想用程式來進行控制,比如把抓到的包儲存到資料庫中,以後可以進行查詢等等。我在工作中用的是Java,那麼就用它來做示範吧。

本教程在centos和ubuntu上測試通過。

1)安裝libpcap庫

先安裝底層使用的庫吧,我們用到了libpcap庫,tcpdump也是用的這個庫,所以先去http://www.tcpdump.org/#old-releases

下載原始碼進行編譯安裝,不需要用太新的庫吧,因為jpcap挺老的。這裡我選了1.1.1版本。

解壓,configure,make,make install,完成了。

2)安裝jpcap庫

我們使用v0.01.16版本,下載為:

http://sourceforge.net/projects/jpcap/files/jpcap/v0.01.16/

我們下載的是原始碼版本,雖然有rpm包提供,但卻是32位版本的,我們的伺服器是64位的,只能自己編譯生成了。

解壓後編譯scripts/env_jpcap檔案,配置編譯過程中的環境變數,只需要改其中的兩項:

# 你解壓後的目錄
export PROJECT_HOME=~/dev/sourceforge/jpcap
# 生成目錄
export RELEASE_HOME=~/dev/releases
# 選填,指定你的JDK目錄
#export JAVA_HOME=/usr/java/jdk1.3 ; export PATH=$JAVA_HOME/bin:$PATH

然後讓配置生效

. ./scripts/env_jpcap

編譯

make clean && make

哈哈,發現出錯了:

g++ -Wall -O2 -I/usr/include/pcap -I/usr/local/jdk1.6.0_29/include -I/usr/local/jdk1.6.0_29/include/linux jpcap.c process.cpp -fPIC -shared -o libjpcap.so -lnsl /usr/lib/libpcap.a
g++: /usr/lib/libpcap.a: No such file or directory

 說是沒有libpcap.a,我們剛才不是安裝好了嗎!!find一下發現原來在/usr/local/lib目錄中。拷貝過去就好了:

sudo cp /usr/local/lib/libpcap.a /usr/lib

OK,繼續。

恭喜,又報錯了:

jpcap.c:678: error: lvalue required as left operand of assignment

因為這個版本的jpcap是2004年的,我們的機器的gcc版本是4.4.6,也許gcc的版本太新了吧。可以考慮安裝多個版本的gcc,但這裡直接把程式碼改改就好:

vi capture/jpcap.c

定位到678行,進行修改:

// for(;ifr < last; (char*)ifr += ifrSize) {
for(;ifr < last; ifr = (ifreq*)((char*)ifr + ifrSize)) {

 OK,繼續。

沒有報錯,完成了,再執行:

make release

就可以在之前配置的RELEASE_HOME目錄下發現編譯好的檔案了:

javadoc_net.sourceforge.jpcap-0.01.16.jar

net.sourceforge.jpcap-0.01.16.jar

解壓後者,發現libjpcap.so也在裡面,需要把這個庫也安裝到合適的地方,你可以把庫放到下面程式碼列印的任意一個目錄中:

System.out.println(System.getProperty("java.library.path"));

下面就開始寫Java程式碼了,需要引入3個Jar包,分別是前面生成的net.sourceforge.jpcap-0.01.16.jar,還有之前下載的jpcap-0.01.16/thirdParty/jars目錄下的包。

net.sourceforge.jpcap-0.01.16.jar中其實就包含了很多例子程式,如圖所示:


 

例子就不寫了,附上java doc文件地址:

http://jpcap.sourceforge.net/javadoc/index.html

使用過程需要注意2個地方:

1,必須使用root許可權執行,因為要使網絡卡進入混雜模式必須要有root許可權,不過不使用root會報這樣的錯誤:

Exception in thread "main" net.sourceforge.jpcap.capture.CaptureDeviceNotFoundException: no suitable device found

2,如果你發現抓到的tcp的data的資料跟實際傳送的資料少了一段,那麼在程式碼中需要注意要這樣使用:

Instead of pcap.open(device, true);
try pcap.open(device, 65535, true, 1000);

 原因參考:

http://stackoverflow.com/questions/17906635/get-full-tcp-packet-data-using-jpcap

相關推薦

手把手jpcap

本文原創,轉載請註明出處~ 在工作中經常需要抓包進行分析,我們可以使用各種工具來抓包,比如常用的tcpdump和wireshark。但有時候我們想用程式來進行控制,比如把抓到的包儲存到資料庫中,以後可以進行查詢等等。我在工作中用的是Java,那麼就用它來做示範吧。 本教程在centos和ubuntu上測

手把手npm釋出

一、釋出一個新包 第一步:進入要釋出的專案根目錄,初始化為npm包: npm init 依次按提示填入包名、版本、描述、github地址、關鍵字、license等 這步完成之後會生成一個package.json檔案,上面輸入的這些資訊可以在該檔案中修改 注意:如果你的包引用

手把手npm發布一個,詳細教程

文件夾 模塊 .com png keyword tor 速度慢 index bsp 我們已經實現了路由的自動化構建,但是我們可以看到,一大串代碼懟在裏面。當然你也可以說,把它封裝在一個JS文件裏面,然後使用require(‘./autoRoute.js‘)給引入進來,那也行

獨家 | 手把手Python進行Web取(附程式碼)

作為一名資料科學家,我在工作中所做的第一件事就是網路資料採集。使用程式碼從網站收集資料,當時對我來說是一個完全陌生的概念,但它是最合理、最容易獲取的資料來源之一。經過幾次嘗試,網路抓取已經成為我的第二天性,也是我幾乎每天使用的技能之一。 在本教程中,我將介紹一個簡單的例子,說明如何抓取一個網站,

手把手jumpserver搭建堡壘機!

ict 添加用戶 以及 這一 用戶名 端口 cal cti tom 首先,jumpserver是什麽呢? Jumpserver 是一款由Python編寫開源的跳板機(堡壘機)系統,實現了跳板機應有的功能。基於ssh協議來管理,客戶端無需安裝agent。 特點: 完全開源,G

手把手ngrx管理Angular狀態

cli emit spl 工作 準備就緒 優雅 spa 現在 改字體 本文將與你一起探討如何用不可變數據儲存的方式進行Angular應用的狀態管理 :ngrx/store——Angular的響應式Redux。本文將會完成一個小型簡單的Angular應用,最終代碼可以在這裏下

手把手EST進行固件降級

希捷固件降級範例型號: ST3600057SS 固件版本 EN03 為DELL EQL存儲設備用的硬盤固件,像這類使用非標準扇區字節數,又或者關閉硬盤寫入緩存的情況,是不能在普通PC上使用,或者表速度很慢,所以我們進行降級固件,讓其能在普通PC上正常使用。本文出自 “EST硬盤之家” 博客,請務必保留此出處

手把手webpack3搭建react項目(開發環境和生產環境)(一)

stc reac config nod top llb cor git history 開發環境和生產環境整個配置源碼在github上,源碼地址:github-webpack-react 如果覺得有幫助,點個Star謝謝!! (一)是開發環境,(二)是生產環境。 一、首

手把手Rancher創建產品質量數據庫設置

max 模板 此外 以及 參考 -o 努力 otto 引入 目標:在本文中,我們將介紹如何運行一個分布式產品質量數據庫設置,它由Rancher進行管理,並且保證持久性。為了部署有狀態的分布式Cassandra數據庫,我們將使用Stateful Sets (有狀態集)以及Ra

手把手Python實踐深度學習|深度學習視頻教程

視頻 ref ati pan 人工神經網絡 com 深度學習 encoder auto 手把手教你用Python實踐深度學習網盤地址:https://pan.baidu.com/s/1mkoC9ELXDglvTNN_xPUWlQ 提取碼: zgpy備用地址(騰訊微雲):ht

手把手玩轉npm

【npm是什麼】 官網是這個:https://www.npmjs.com/, 官網介紹:npm is the package manager for javascript, npm是js的包管理器,更多的用於nodejs端。 基本上每種語言都有自己的包管理器,nodejs是

手把手 | 幾行Python和消費資料做客戶細分

    細分客戶群是向客戶提供個性化體驗的關鍵。它可以提供關於客戶行為、習慣與偏好的相關資訊,幫助企業提供量身定製的營銷活動從而改善客戶體驗。在業界人們往往把他吹噓成提高收入的萬能藥,但實際上這個操作並不複雜,本文就將帶你用簡單的程式碼實現這一專案。 客戶

手把手 幾行Python和消費資料做客戶細分

  細分客戶群是向客戶提供個性化體驗的關鍵。它可以提供關於客戶行為、習慣與偏好的相關資訊,幫助企業提供量身定製的營銷活動從而改善客戶體驗。在業界人們往往把他吹噓成提高收入的萬能藥,但實際上這個操作並不複雜,本文就將帶你用簡單的程式碼實現這一專案。 我們需要建立什麼?

手把手node擼一個簡易的handless爬蟲cli工具

眾所周知,node功能很強大,為前端提供了更多的可能。今天,就跟大家分享一下我是如何用node寫一個handless爬蟲的。原文連結leeing.site/2018/10/17/… 用到的工具 puppeteer commander inquirer chal

手把手Ucos

Ucos作業系統的學習   實時作業系統: 任務切換,排程 分式作業系統   不可剝奪型核心 Ucosii嵌入式實時作業系統的原始碼分為三部分:與硬體無關的核心程式碼,與處理器有關的移植程式碼和使用者配置檔案。   Ucos最多支援64個任務,

【Python量化】手把手python做股票分析入門

內容來自:微信公眾號:python金融量化 關注可瞭解更多的金融與Python乾貨。 目前,獲取股票資料的渠道有很多,而且基本上是免費的,比如,行情軟體有同花順、東方財富等,入口網站有新浪財經、騰訊財經、和訊網等。Python也有不少免費的開源api可以獲取交易行情資料,如pandas自

手把手Delphi實現硬體版hello world程式設計控制點亮電燈泡

之前我們已經給廣大愛好者或程式設計師朋友們,帶來了硬體版的或者說物聯網版本的Hello World C++Builder版的程式原始碼和教學資料,讓大家對硬體控制帶來一個嶄新的認識。今天我們再出一套兄弟版本Delphi程式語言的教程與例項原始碼。 Delphi的開發與C++B

人工智慧應用-手把手Python硬體程式設計實現開啟或關閉電燈泡

之前我們已經給廣大愛好者或程式設計師朋友們,帶來了硬體版的或者說物聯網版本的Hello World C++Builder版、Delphi、Visual Basic.Net等的程式原始碼和教學資料,讓大家對硬體控制帶來一個嶄新的認識。有不少讀者使用者,建議我們出一套Python

手把手springboot配置多資料來源

<project xmlns="http://maven.apache.org/POM/4.0.0"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://maven.apache