Jpcap简介和环境搭建 Jpcap是一个可以监控当前网络情况的中间件,弥补了java对网络层以下的控制, 可以达到抓包的效果。 Jpcap运行需要依赖winCap和Jpcap的dll动态库和Jpcap.jar包。 获取winCap和Jpcap安装包 一 一安装后 jdk–>bin目录会多了一个Jpcap.dll jre–>lib–>ext会多一个Jpcap的jar包 常用类 * JpcapHandler : :用来捕获数据包 * Jpcap.JpcapInfo :Jpcap的内部类, 它包含被捕获数据包的信息(在jpcap0.4修改部分BUG之后不再使用这个类) * JpcapSender :它用来发送一个数据包 ; import jpcap.NetworkInterfaceAddress; import jpcap.PacketReceiver; import jpcap.packet.Packet;
我们上一节成功使用jpcap获得了网卡硬件,我们要重新构造tcp/ip协议栈,那么就需要做两部分工作。 我们在工程下新建一个文件叫DataLinkLayer.java,其实现内容如下: import jpcap.packet.DatalinkPacket; import jpcap.packet.EthernetPacket ; import jpcap.packet.ICMPPacket; import jpcap.packet.IPPacket; import jpcap.packet.Packet; import jpcap.packet.TCPPacket ; import jpcap.packet.UDPPacket; public class DataLinkLayer implements jpcap.PacketReceiver { String (device, 2000, true, 20); jpcap.loopPacket(-1, (jpcap.PacketReceiver) new DataLinkLayer());
目录下,进入lib目录,然后选择jpcap.jar,接着进入bin目录,选取jpcap.bin,完成后配置如下图: ? 然后进入jpcap目录下的src/main/c目录,如果像我一样使用macos,那么就打开makefil,找到ifeq else部分代码,然后在该部分的末尾添加如下代码: ifeq ($(PLATFORM 然后在java工程下新建一个文件ProtocolEntry.java,然后添加如下代码: import java.io.IOException; import jpcap.JpcapCaptor; import jpcap.NetworkInterface; import jpcap.NetworkInterfaceAddress; import jpcap.packet.Packet; public class 通过jpcap,我们成功访问了网卡硬件,其中”Open captor on device0“,表示我们可以使用名为device0这个网卡来实现数据包的发送和接收,如果你有多块可用网卡,那么这些网卡都可以成功
jpcap.packet.EthernetPacket; import jpcap.packet.Packet; import utils.IMacReceiver; import utils.PacketProvider ; import jpcap.JpcapSender; import jpcap.NetworkInterface; public class DataLinkLayer extends PacketProvider 它通过jpcap获得网卡对象,然后得到本机mac地址和ip地址,同时导出一个接口叫sendData,该接口从上层接收要发送的数据,然后封装一个数据链路层包头后,调用网卡将数据发送出去。 receiver); } package utils; import java.util.ArrayList; import jpcap.PacketReceiver; import jpcap.packet.Packet ; import jpcap.packet.ARPPacket; import jpcap.packet.EthernetPacket; import jpcap.packet.Packet; import
JPCAP 简介: 众所周知,JAVA语言虽然在TCP/UDP传输方面给予了良好的定义,但对于网络层以下的控制,却是无能为力的。JPCAP扩展包弥补了这一点。 JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用wincap/libpcap,而给JAVA语言提供一个公共的接口,从而实现了平台无关性。 在官方网站上声明,JPCAP支持FreeBSD 3.x, Linux RedHat 6.1, Fedora Core 4, Solaris, and Microsoft Windows 2000/XP等系统 JPCAP的整个结构大体上跟wincap/libpcap是很相像的,例如NetworkInterface类对应wincap的typedef struct _ADAPTERADAPTER,getDeviceList 使用 JPCAP 实现监听利用的是所谓的“ARP欺骗”技术。
实现网络协议的模块单独形成一个独立部分,实现具体网络协议的对象都继承统一的接口IProtocol: package protocol; import java.util.HashMap; import jpcap.packet.Packet Application.ApplicationManager; import Application.IApplication; import datalinklayer.DataLinkLayer; import jpcap.PacketReceiver ; import jpcap.packet.EthernetPacket; import jpcap.packet.IPPacket; import jpcap.packet.Packet; public ; import jpcap.packet.EthernetPacket; import jpcap.packet.Packet; public class ICMPProtocolLayer implements java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.HashMap; import java.util.Random; import jpcap.packet.Packet
ICMPProtocolLayer; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Arrays; import jpcap.PacketReceiver ; import jpcap.packet.EthernetPacket; import jpcap.packet.Packet; public class ICMPProtocolLayer implements Destination Unreachable错误数据报的处理对象,其代码如下: package ICMPProtocolLayer; import java.nio.ByteBuffer; import jpcap.packet.IPPacket
protocol; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.HashMap; import jpcap.packet.Packet limit错误消息的对象,其代码如下: package protocol; import java.nio.ByteBuffer; import java.util.HashMap; import jpcap.packet.Packet
之后对于Windows环境,采用JPcap获取网卡对象,并在网卡上设置tcp过滤器来统计一段时间内的端口流量。 内存、连接数等(top等命令) /proc目录下各进程子目录:包括CPU、内存等信息、磁盘读写等信息 执行脚本:包括Linux环境下的端口流量数据采集 第三方工具包:包括win环境下的端口流量数据采集(JPcap
java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.HashMap; import java.util.Random; import jpcap.packet.Packet
= null) { app.handleData(headerInfo); } } 一旦程序通过JPCap收到TCP包后,它会让上面实现的TCPProtocolLayer