• Jpcap


    转载----http://java-mzd.iteye.com/blog/1005945

      首先,使用Jpcap的几个小问题:

    1. 我们为什么需要Jpcap?
    2. 什么是Jpcap?Jpcap的工作原理是什么?
    3. 怎么配置Jpcap(Jpcap的安装)?
    4. Jpcap使用步骤
    5. Jpcap有啥特性?

    一。我们为什么需要Jpcap?

    Java的.net包中,给出了传输层协议 TCP和UDP有关的API,用户只能操作传输层数据,要想直接操作网络层{比如自己写传输层数据报(自己写传输层包头),或者自己写好IP数据包向网络中发}则是无能为力的。 而JPCAP扩展包弥补了这一点,使我们可以支持从网卡中接收IP数据包,或者向网卡中发送IP数据包。

      

    二。什么是Jpcap?Jpcap的工作原理是什么?

    Jpcap实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用wincap/libpcap,而给JAVA语言提供一个公共的接口,从而实现了平台无关性。

     

    三。怎么配置Jpcap(Jpcap的安装)?  

    Jpcap下载地址:   http://netresearch.ics.uci.edu/kfujii/Jpcap/doc/download.html

    下载后,直接安装,安装,将生成的jar文件和动态库 dll 文件分别拷到

    %JAVA_HOME%libext  和 %JAVA_HOME%jrein   目录下。

    因为Jpcap是调用的wincap,所以必须将动态库放入jre/bin下。  将jar放入ext下,则无需在项目中再加载该jar包

    四。Jpcap使用步骤

    1.首先,获得所有网卡列表

    NetworkInterface[] devices = JpcapCaptor.getDeviceList();

    2.通过网卡,打开一个捕捉器。 //openDevice(NetworkInterface intrface, int snaplen, boolean promics, int to_ms); JpcapCaptor captor=JpcapCaptor.openDevice(device[index], 65535, false, 20);

    
    

      各个参数意义:

     intrface 需要监听的网卡

     snaplen 每次捕获的数据包最大长度(设置为IP包最大长度即可)  

    promics 是否过滤(Mac地址不是当前网卡的IP数据包)

    to_ms 超时时间

    3.通过捕捉器捕获数据:

         有两种方式:

    3.1.回调方法

    3.1.1.实现一个方法处理器接口的类PacketReceiver,并将该类的一个对象,注册到捕获器中。(回调方法的实现, 其实就是监听器模型)

    3.1.2.将消息处理器(PacketReceiver) 注册到捕获器(JpcapCaptor)有两种方式

    captor.processPacket(int number,PacketReceiver reciver);//1 loopPacket(int number,PacketReceiver reciver);//2

    
    
    

    参数意义:

    第一个参数为需要捕获的IP包个数,-1表示一直捕获。

    第二个参数表示需要注册的处理器。  

    processPacket() 和 loopPacket() 的区别:

    Tutorial中给出的说法为:

    Usually you might want to use processPacket() because it supports timeout and non_blocking mode, while loopPacket() doesn't.

    3.2.主动获取。

    通过捕获器的getPacket()  可以主动的,一个数据包一个数据包的获取。

    比较:

    主动获取,可以每次需要处理数据包的时候,自己去主动获取。然后写出处理逻辑。但是因为不知道何时去产生数据包,而一直去调用getPacket() 的话,无疑效率是很低的。(主动获取,不管有没有包,都会一直执行循环去获取)

    通过回调方法,可以在产生需要的数据包时,调用我们的处理逻辑,无疑更优美。

     

    五。使用Jpcap能做的事
    1.Jpcap是直接抓取经过数据链路层的数据包。 因此可以自己写IP数据包直接发送给数据链路层。
    2.Jpcap会对抓取到的数据包进行一定程序的解析,根据数据包内容,将数据包封装为对应的对象()。
    3.根据用户设定的信息,过滤数据包(其实就是在解析的时候,对不需要的数据直接丢弃,不解析)
    4.Jpcap 只是直接从数据链路层上读取数据,并向数据链路层中发送数据,因此,Jpcap并不能操作 其他程序从数据链路层中读数据或者向网卡中发送数据。(IP层协议程序)

     因此,我们可以使用Jpcap:
    1.监控网络内容
    2.自定义传输层乃至网络层网络协议(net包中,我们只能自定义引用此协议)
     

     正在进行:使用Jpcap,进行ARP欺骗,从而使整个子网的IP包都发给我,于是,可以监控整个局域网。

  • 相关阅读:
    .net 5.0
    多线程synchronized锁
    多线程(Thread、线程创建、线程池)
    电商秒杀方法
    sb @EnableAsync与@Async 20210310
    spring boot @EnableAsync 异步调用
    五代十国军事人物
    唐朝末年,七大割据军阀势力
    盘点万历之后,镇守辽东的8位军事统帅,堪称有军事作为的仅三人
    Cookie-Session or JWT
  • 原文地址:https://www.cnblogs.com/joycelishanhe/p/4704304.html
Copyright © 2020-2023  润新知