本文原创,转载请注明出处~
在工作中经常需要抓包进行分析,我们可以使用各种工具来抓包,比如常用的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是使用java实现的抓包工具。该资源有详细的说明使用文档,
这是一个基于jpcap简单的抓包程序,要搭建Java的运行环境
用Java和jpcap写的一个抓包的程序。可以抓WiFi的包。
采用JPCAP开源库开发的一款网络抓包工具.简单易用.
包含64位和32位的,请注意区分,请先安装winPcap。。。
本jar包在win8.1 x64 系统下可用,其他未测试。通过该jar包,java可以方便的进行Tcp/IP协议的分析
使用JAVA库JPCAP来在传输层构造TCP数据包发送,并在网络层捕获数据包!
jpcap依赖jar包和动态链接库以及代码示例等等全部文件
文件包含64位的jpcap.dll,jpcap.jar以及WInPcap_4_1_2.exe, 里面还拥有一个小实验的java代码
jpcap抓包实验中的配置文件,jpcap.jar和jpcap.dll,还有图形界面的抓包工具JpcapDumper,版本X64
java抓包程序,使用jpcpa.jar包java的JPCAP.jar, 不过一直调用的都是winpcap(jpcap.dll)实现的许多接口。 压缩包包含 jpcap.jar和jpcap.dll 下载要积分了,本人也积分有限!见谅
jPCAP在JAVA中,并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用winpcap/libpcap,给 JAVA语言提供一个公共的接口,从而实现了平台无关性。
网络课程作业,使用Jpcap实现的java网络抓包程序,支持ipv6,内附源码及文档 使用前先安装wincap和jpcap
基于java的开发源码-网络抓包工具 jpcap.zip 基于java的开发源码-网络抓包工具 jpcap.zip 基于java的开发源码-网络抓包工具 jpcap.zip 基于java的开发源码-网络抓包工具 jpcap.zip 基于java的开发源码-网络抓包工具 ...
Jpcap 是捕获和发送网络包的 Java 库。Jpcap 是基于 libcap 和 winpcap 的,所以 Jpcap 可以运行在任意支持 libcap 或者 winpcap 的平台上(Linux ,Windows,FreeBSD 和 Mac OS X)。Jpcap 支持以下的集中数据包...
网络抓包工具 jpcap
jpcap结合ssm,前端是highchart 和 jquery 实现了一套抓包程序, 实现了基本的数据抓包,和基本包分类,可以以此为基础改出自己需要的功能,下载后遇到问题的可以私聊我。
基于Jpcap的网络抓包软件,自己做的,很仓促,不过还是可以实现对网络第四层的分析。
网络抓包必备 JPCAP and WINPCAP
Linux系统抓取数据库的包,进行解析的必要工具