老大说用java搞一个抓包器试试。ok,咔咔那就干:
首先,自己从底层开始写肯定不现实,然后就是一顿搜,了解到了libpcap,libpcap是个啥呢,看一看简介:
Libpcap: 是 unix/linux 平台下的网络数据包捕获函数包,大多数网络监控软件都以它为基础。Libpcap
提供了系统独立的用户级别网络数据包捕获接口,并充分考虑到应用程序的可移植性。
Libpcap 在windows系统下有另外一个名字:winpcap,所以在windows下开发的小伙伴是安装winpcap,linux下则是安装libpcap。
记得一定要先安装libpcap/winpcap 哟
(在文章末尾我会甩上连接,里面有涉及到的所有包供大家下载)
顺藤摸瓜,找到了好几款用java完整封装了libpcap的函数库。
比如:JNetCap、Pcap4j、Jpcap。
作为小白的我,选择了从JNetCap下手:
JNetCap
-
JNetCap地址:https://sourceforge.net/projects/jnetpcap/files/jnetpcap/
源码也是很近没有更新了,因为网上有朋友说1.4版本有问题,为了求稳先下了1.3版本的。 -
解压:
windows环境: 将jnetpcap.dll 文件放入jre的bin目录下,如C:\Program Files\Java\jre7\bin
Linux环境:将libjnetpcap.so 文件放入你安装的jdk jdk/jre/lib/amd64 目录下
-
导入jar包。新建一个java项目,将jar到导入到项目中,相信各位应该都知道怎么导吧!
-
下面是一个demo:
package com.test;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.jnetpcap.packet.PcapPacket;
import org.jnetpcap.packet.PcapPacketHandler;
import org.jnetpcap.protocol.tcpip.Http;
import org.jnetpcap.protocol.tcpip.Tcp;
import org.jnetpcap.Pcap;
import org.jnetpcap.PcapBpfProgram;
import org.jnetpcap.PcapDLT;
import org.jnetpcap.PcapIf;
public class TestJNetCap {
public static void main(String[] args) {
StringBuilder errbuf = new StringBuilder();
List<PcapIf> alldevs = new ArrayList<PcapIf>();
int r = Pcap.findAllDevs(alldevs, errbuf);
if (r == Pcap.NOT_OK || alldevs.isEmpty()) {
System.err.