java利用Jpcap实现抓包

Jpcap简介和环境搭建

Jpcap是一个可以监控当前网络情况的中间件,弥补了java对网络层以下的控制,

可以达到抓包的效果。

Jpcap运行需要依赖winCap和Jpcap的dll动态库和Jpcap.jar包。

这个我贴出来两个exe文件,一 一安装后

http://note.youdao.com/noteshare?id=040315a1e04a6146d4f950017f52e83c&sub=FAF884B3EE0E4912AAFA05B56459F87B

http://note.youdao.com/noteshare?id=af8fa2323b41fa8164096cc6a04f85ad&sub=49EEC856E57241E8805A0348A273034B

jdk–>bin目录会多了一个Jpcap.dll

clipboard

jre–>bin目录会多了一个Jpcap.dll

clipboard

jre–>lib–>ext会多一个Jpcap的jar包

image-20220602122120886

在eclipse中修改jre的环境

image-20220602122139306

常用类

JpcapHandler :这个接口用来定义分析被捕获数据包的方法

ARPPacket :这个类描述了ARP/RARP包,继承了Packet类

DatalinkPacket :这个抽象类描述了数据链路层

EthernetPacket :这个类描述了以太帧包,继承DatalinkPacket类

ICMPPacket :这个类描述了ICMP包,继承了IPPacket类

IPAddress :这个类描述了IPv4和IPv6地址,其中也包含了将IP地址转换为域名的方法

IPPacket :这个类描述了IP包,继承了Packet类,支持IPv4和IPv6

IPv6Option :这个类描述了IPv6选项报头

Jpcap :用来捕获数据包

Jpcap.JpcapInfo :Jpcap的内部类, 它包含被捕获数据包的信息(在jpcap0.4修改部分BUG之后不再使用这个类)

JpcapSender :它用来发送一个数据包

JpcapWriter :它用来将一个被捕获的数据包保存到文件

Packet :这个类是所有被捕获的数据包的基类

TCPPacket :这个类描述TCP包,继承了IPPacket类

UDPPacket :这个类描述了UDP包,继承了IPPacket类

常用api

clipboard (2)

clipboard (1)

Jpcap实现抓包demo

import java.io.IOException;
import java.util.Scanner;
 
import jpcap.JpcapCaptor;
import jpcap.NetworkInterface;
import jpcap.NetworkInterfaceAddress;
import jpcap.PacketReceiver;
import jpcap.packet.Packet;  
 
/**
 * Jpcat实现抓包
 * @date 2018年2月7日
 */
public class NetFetcher implements PacketReceiver{  
  
    @Override  
    public void receivePacket(Packet arg0) {  
        System.out.println(arg0);  
    }  
      
    public static void main(String[] args){  
          
        //获得网卡设备列表  
        NetworkInterface[] devices = JpcapCaptor.getDeviceList();  
        if(devices.length==0){  
              
            System.out.println("无网卡信息!");  
            return;  
        }  
        //输出网卡信息  
        for(int i=0;i<devices.length;i++){  
              
            System.out.println("网卡"+i+"信息:"+devices[i].name);  
            for(NetworkInterfaceAddress address:devices[i].addresses){  
                  
                System.out.print(address.address+" ");  
            }  
            System.out.println("\n");  
        }  
          
        Scanner scan = new Scanner(System.in);  
        System.out.println("请选择您要监听的网卡序号:");  
        int index = scan.nextInt();  
          
        //监听选中的网卡  
        try {  
            JpcapCaptor jpcapCaptor = JpcapCaptor.openDevice(devices[index], 2000, false, 20);  
            jpcapCaptor.loopPacket(-1, new NetFetcher());  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
    }  
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

terrybg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值