Jpcap JAVA捕捉并分析网络数据包

               

  读书时候,曾经做过一个sniffer软件。主要的开发语言是JAVA。主要的作用有很多,但是我个人测试的效果估计要比臭名远扬的绿坝要好了。主要的设计不是用于控制人家上网,这个软件业做技术统计,主要是用来把一个服务器的所有网络数据包直接保存到数据库,然后做日后的统计分析。

  配置jpcap基本步骤有3个:

  1、安装winpcap;

  2、http://netresearch.ics.uci.edu/kfujii/jpcap/doc/index.html下载最新的jpcap exe,做配置;

  3、导入jar包,在程序做开发。

 

  这是一个简单的源代码:

 

    

  这个是整个程序的一个核心类,主要的数据包都是通过这个程序捉取的。如果大家需要全部源码的话可以和我联系。

   package MonitorFunction;import Dao.JDBCDao;import jpcap.PacketReceiver;import jpcap.JpcapCaptor;import jpcap.packet.*;import jpcap.NetworkInterface;import vo.DataPacket;public class Monitor implements PacketReceiver  { /** *@author 康春华 */ public NetworkInterface[] devices;//描述网络接口    private JpcapCaptor pcap;//捕获包    int i=0;    int tcpid=1;    int udpid=1;    int arpid=1;       public Monitor(){          devices=JpcapCaptor.getDeviceList();        System.out.print(devices);    }        private void packetCap(){       try       {        pcap = JpcapCaptor.openDevice(devices[1],1024,true,1000);//打开一个特别的网络接口返回一个实例        pcap.loopPacket(-1,this); //连续捕获这个端口       }       catch(Exception e)       {        e.printStackTrace();       }      }      public void receivePacket(Packet packet) {  if(packet.getClass().equals(ARPPacket.class))    {     System.out.println("协议类型 :ARP协议");     try{      ARPPacket arpPacket = (ARPPacket)packet;       String target_ip=String.valueOf(arpPacket.getTargetProtocolAddress());       String target_mac=String.valueOf(arpPacket.getTargetHardwareAddress());       String src_ip=String.valueOf(arpPacket.getSenderProtocolAddress());       String src_mac=String.valueOf(arpPacket.getSenderHardwareAddress());              DataPacket d=new DataPacket();       d.setArpid(arpid);       d.setTarget_ip(target_ip);       d.setTarget_mac(target_mac);       d.setSrc_ip(src_ip);       d.setSrc_mac(src_mac);              JDBCDao j=new JDBCDao();       j.arpjdbcDao(d);       arpid++;           } catch( Exception e ) {      e.printStackTrace();     }     }    else      if(packet.getClass().equals(UDPPacket.class))     {      System.out.println("协议类型 :UDP协议");      try {       UDPPacket udpPacket = (UDPPacket)packet;       String target_ip = String.valueOf(udpPacket.dst_ip);        int target_port=udpPacket.dst_port;       String src_ip=String.valueOf(udpPacket.src_ip);       int src_port=udpPacket.src_port;              DataPacket d=new DataPacket();       d.setUdpid(udpid);       d.setTarget_ip(target_ip);       d.setTarget_port(target_port);       d.setSrc_ip(src_ip);       d.setSrc_port(src_port);              JDBCDao j=new JDBCDao();       j.udpjdbcDao(d);       udpid++;      } catch( Exception e ) {       e.printStackTrace();      }      }    else     if(packet.getClass().equals(TCPPacket.class)) {      System.out.println("协议类型 :TCP协议");      try {       TCPPacket tcpPacket = (TCPPacket)packet;              String target_ip = String.valueOf(tcpPacket.dst_ip);        int target_port=tcpPacket.dst_port;       String src_ip=String.valueOf(tcpPacket.src_ip);       int src_port=tcpPacket.src_port;              DataPacket d=new DataPacket();       d.setTcpid(tcpid);       d.setTarget_ip(target_ip);       d.setTarget_port(target_port);       d.setSrc_ip(src_ip);       d.setSrc_port(src_port);              JDBCDao j=new JDBCDao();       j.tcpjdbcDao(d);       tcpid++;      } catch( Exception e ) {       e.printStackTrace();      }     }    else     if(packet.getClass().equals(ICMPPacket.class))      System.out.println("协议类型 :ICMP协议");    else      System.out.println("协议类型 :GGP、EGP、JGP协议或OSPF协议或ISO的第4类运输协议TP4");   }       public void actionMonitor(){     Monitor m=new Monitor();     m.packetCap();    } }

核心类的代码 http://code.google.com/p/ken-javaframeword/source/browse/trunk/JavaFramework2.0/src/com/shine/framework/Jpcap/JpcapManager.java

           

猜你喜欢

转载自blog.csdn.net/qq_44952688/article/details/89467010