读书时候,曾经做过一个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