基于JPcap的数据包捕获实验报告
jpcap+API 使用

贵州大学2002级硕士研究生学年报告基于JPcap的网络流量分析研究与应用学科专业计算机软件与理论研究方向计算机软件导师李祥教授研究生赵新辉中国•贵州•贵阳2003 年6 月目录摘要第一章网络数据包捕获工具Jpcap1.1 Jpcap简介1.2Jpcap需求环境1.3Jpcap的安装1.4Jpcap类库的结构第二章Jpcap类库的分析与应用2.1 使用JpcapHandler接口2.2 使用DatalinkPacket类2.3 使用EthernetPacket类2.4 使用IPAddress类2.5 使用IPv6Option类2.6 使用Jpcap类2.7 使用Jpcap.JpcapInfo类2.8 使用JpcapSender类2.9 使用JpcapWriter类2.10 使用Packet类2.11 使用ARPPacket类2.12 使用IPPacket类2.13 使用ICMPPacket类2.14 使用TCPPacket类2.15 使用UDPPacket类第三章Jpcap在流量分析中的应用3.1 流量分析的研究概况3.1.1 流量分析概况3.1.2 国内研究状况3.1.3 网络流量自相似分析3.2 利用Jpcap实现网络流量图示分析3.3 利用Jpcap实现网络Ethereal工具参考文献摘要论文从JPcap的产生、发展到目前的最新版本,针对Jpcap 0.4版本,对类库中一个类做了必要的分析说明,列出了每个类的继承关系、数据成员、构造函数和成员函数,并对其的功能做了简要地说明。
针对类的功能,为每个类设计了一个Java程序,用实例说明该类的使用方法。
最后使用Jpcap类库设计了一个程序,实现了对局域网内用户上网的口令密码的监听,并做了实际的测试。
Jpcap是日本人Keita Fujiiy开发的一套能够捕获、发送网络数据包的java类库。
这个包用到了libpcap 和原始套接字API,Jpcap在FreeBSD 3.x, Linux RedHat 6.1, Solaris, and Microsoft Windows 2000/XP等系统上经过测试,并且支持Ethernet, IPv4, IPv6, ARP/RARP, TCP, UDP,ICMPv4协议。
嗅探器实验报告

基于JPCAP的网络嗅探器实验报告学号:1106840229姓名:陆凯一、平台和情况简述本实验是用java实现的网络抓包程序。
操作系统环境为windows 7和8 64位。
必要软件为winpcap4.0,jpcapx64,eclipse二、JPCAP简介(以下来自百度百科)众所周知,JAVA语言虽然在TCP/UDP传输方面给予了良好的定义,但对于网络层以下的控制,却是无能为力的。
JPCAP扩展包弥补了这一点。
JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用WINPCAP给JAVA语言提供一个公共的接口,从而实现了平台无关性。
三、程序整体设计从实际操作使用的角度上来讲,整个程序由三个.JAVA文件组成,其中两个文件都可以生成Jframe框架。
也就是说程序只有两个界面,一个主界面和一个选择网卡的Dialog界面。
摘取三个文件中的类和方法:1.MainProgram.java:public class MainProgram extends JFrame implements ActionListener:(1)public static void main(String[] args) 主函数(2)public MainProgram()(3)private void initGUI() 界面设计(4)public void actionPerformed(ActionEvent event) 菜单事件响应(5)public void dealPacket(Packet packet) 包处理(6)public String output(Packet p) 十六进制显示2.Jcapturedialog.javaPublic class Jcapturedialog extends JDialog implements ActionListener:(1)public Jcapturedialog(JFrame frame) 构造(2)public void actionPerformed(ActionEvent evt) 按键响应(3)public static JpcapCaptor getJpcap(JFrame parent)3.Jcaptor.javapublic class Jcaptor:(1)public void setJFrame(MainProgram frame)(2)public void capturePacketsFromDevice() 抓包(3)private void startCaptureThread() 开线程(4)public void stopCapture() 关闭线程从整个的抓包流程来讲,用JPCAP类中的函数(形参已省略)来表达,可以表达为:1.通过JpcapCaptor.getDeviceList()获取网卡列表2.通过jpcap.setFilter()设置过滤器3.通过JpcapCaptor.openDevice()打开相应的网卡4.在线程中采用jpcap.processPacket()来抓包5.通过自己编写的dealPacket()针对抓得的包按照不同的协议来分析并产生表格中的数据四、程序编写过程中的问题解决1.JAVA.SWING的使用(界面编写)因为是网工专业,所以在课程中接触JAVA仅仅是大二一门两个学分的专业选修课,在编写这个嗅探器之前完全不知道如何在JAVA中设计界面以及各个组件的方法。
使用jpcap编写抓包程序

使用jpcap编写抓包程序大致原理:winpcap提供底层工具,我们只需要使用它的函数就可以编程,然而很繁琐。
java就再封装一层,就出现JPcap这个中间件了。
使用对比之后,JPcap尼玛不要太方便。
附:工具:winpcap要安装,这个我就不说了。
JPcap作为中间件你需要下载,我没有安装。
1.将JPcap.dll动态链接库加入到我的 C:\Program Files\Java\jdk1.7.0_71\jre\bin 中。
2.Jpacp.jar我直接外部配置路径了。
不多说,贴可用代码主程序类,用于读取网卡接口,并开多线程从各个网卡上读取包package com.sock1;import java.util.Scanner;import jpcap.JpcapCaptor;import workInterface;import jpcap.PacketReceiver;import jpcap.packet.*;/*** 使用jpcap显示网络上的各种数据包* @author */public class sock_main {private static int model;//程序启动主方法public static void main(String args[]){try{System.out.println('请输入你需要抓取的类型包:');System.out.println('TCP包输入‘1’');System.out.println('UDP包输入‘2’');System.out.println('ICMP包输入‘3’');System.out.println('ARP包输入‘4’');Scanner in=new Scanner(System.in);model = in.nextInt();//获取本机上的网络接口对象数组final NetworkInterface[] devices = JpcapCaptor.getDeviceList();for(int i=0;i<devices.length;i ){NetworkInterface nc=devices[i];//创建某个卡口上的抓取对象,最大为2000个JpcapCaptor jpcap = JpcapCaptor.openDevice(nc, 2000, true, 20);startCapThread(jpcap); //线程执行抓包System.out.println('开始抓取第' i '个卡口上的数据');}}catch(Exception ef){ef.printStackTrace();System.out.println('启动失败: ' ef);}}//将每个Captor放到独立线程中运行public static void startCapThread(final JpcapCaptorjpcap ){JpcapCaptor jp=jpcap;ng.Runnable rnner=new Runnable(){ //创建线程public void run(){//使用接包处理器循环抓包jpcap.loopPacket(-1, new TestPacketReceiver(model)); //-1无限抓取包,抓包监听器获取包}};new Thread(rnner).start();//启动抓包线程}}抓包类,实现抓包功能,并输出信息package com.sock1;import jpcap.PacketReceiver;import jpcap.packet.ARPPacket;import jpcap.packet.DatalinkPacket;import jpcap.packet.EthernetPacket;import jpcap.packet.ICMPPacket;import jpcap.packet.Packet;import jpcap.packet.TCPPacket;import jpcap.packet.UDPPacket;/*** 抓包监听器,实现PacketReceiver中的方法:打印出数据包说明*/class TestPacketReceiver implements PacketReceiver {public int model;public TestPacketReceiver (int n){this.model = n;}/*** 实现的接包方法:*/public void receivePacket(Packet packet) {//Tcp包if(packet instanceof jpcap.packet.TCPPacket && model== 1){TCPPacket p=(TCPPacket)packet;String s='TCPPacket:| 目的ip及端口 ' p.dst_ip ':' p.dst_port '|源ip及端口 ' p.src_ip ':' p.src_port' |数据长度: ' p.len;System.out.println(s);}//UDP包else if(packet instanceof jpcap.packet.UDPPacket && model== 2){UDPPacket p=(UDPPacket)packet;String s='UDPPacket:| 目的ip及端口 ' p.dst_ip ':' p.dst_port '||源ip及端口 ' p.src_ip ':' p.src_port' |数据长度: ' p.len;System.out.println(s);}//ICMPPacket包else if(packet instanceof jpcap.packet.ICMPPacket && model== 3){ICMPPacket p=(ICMPPacket)packet;//ICMP包的路由链String router_ip='';for(int i=0;i<p.router_ip.length;i ){router_ip =' ' p.router_ip[i].getHostAddress();}String s='@ @ @ ICMPPacket:| 路由IP: ' router_ip' |redir_ip: ' p.redir_ip' |最大传输单元: ' p.mtu' |长度: ' p.len;System.out.println(s);}//ARP请求包else if(packet instanceof jpcap.packet.ARPPacket && model== 4){ARPPacket p=(ARPPacket)packet;//Returns the hardware address (MAC address) of the senderObject saa= p.getSenderHardwareAddress();Object taa=p.getT argetHardwareAddress();String s='* * * ARPPacket:| 发送硬件地址: ' saa'|目标硬件地址: ' taa' |长度: ' p.len;System.out.println(s);}//取得链路层数据头 :如果你想局网抓包或伪造数据包,嘿嘿DatalinkPacket datalink =packet.datalink;//如果是以太网包if(datalink instanceof jpcap.packet.EthernetPacket){ EthernetPacket ep=(EthernetPacket)datalink; String s=' 以太包: ''|目的MAC: ' ep.getDestinationAddress()'|源MAC: ' ep.getSourceAddress();System.out.println(s);}}}。
基于Sharpcap的数据包捕获应用设计

基于Sharpcap的数据包捕获应用设计银国徽,巩微中国传媒大学计算机学院摘要:研究了基于Sharpcap的局域网数据包的捕获机制(再细化一点),实现了.NET平台下的原始数据包捕获应用设计(再多两句话说明一下设计方法),解决了.Net下使用原始套接字抓包慢、丢包严重的问题,填补了.Net程序员捕获原始数据包的空白,实践证明此方法快速、准确、稳定、高效(较多的称赞话应放在结论部分,此处只说明实现了并得到一个什么结果)。
关键词:Sharpcap;数据包;捕获;C#;.Net;1、引言Internet的飞速发展使网络用户及规模逐渐变大,网络维护与安全日益重要。
目前,C++开发人员用Winpcap来捕获底层数据包,Java开发人员则采用Jpcap来捕获底层数据包,而C#程序员还是使用原始套接字进行网络抓包,但是Raw Socket(这只是中英文的两种称呼,应统一。
若是,英文文章就无所谓了,也就只能是一种称呼)不仅只能抓IP层以上的包,且抓包慢、丢包严重的缺陷一直困扰着大家,因此底层网络控制被定位为.Net的软肋(有引用吗?有的话,加上引用;没有的话,这句话不合适,不像是学术文章,更像是大白话)。
本文介绍了.Net 平台下使用Sharpcap捕获原始数据包的始末,并展示了C#编写的程序运行界面,希望以此帮助那些想在.Net平台下对捕获原始数据包而束手无策的人(还是刚才的问题,要更学术一些)。
2、局域网数据包捕获原理局域网使用的是广播信道,从一个站点可以很方便的访问全网。
计算机与外界局域网的连接是通过通信适配器(Adapter),适配器和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的。
所谓广播通信就是一台计算机发送数据时,总线上的所有计算机都能检测到这个数据。
为了在总线上实现一对一通信,每个计算机都配备了全球唯一的MAC地址,在发送数据帧时,在帧的首部写明接收站的地址,总线上的每台计算机在检测到该数据帧时,适配器都会把数据帧的地址与自己的MAC地址匹配,如果一致则接收,否则丢弃。
0219_基于Jpcap的TCPIP数据包分析2

基于Jpcap的TCP/IP数据包分析2001 赵新辉目录第一章以太网的结构和TCP/IP1.1 以太网的结构1.1.1 基于网络架构的以太网1.1.2 以太网的数据交换1.1.3 以太网帧的结构1.2 IP数据报的构成1.2.1 IP地址1.2.2 路由1.2.3 IP数据报的构成1.2.4 其他报文结构1.3 TCP/UDP1.3.1 TCP/UDP的作用1.3.2 TCP和UDP报文的结构第二章Jpcap类库2.1 Jpcap的使用2.1.1 Jpcap的运行环境的安装2.1.2 Jpcap的开发环境的安装2.2 Jpcap介绍2.2.1 Packet基类及其子类2.2.2 Jpcap的主要功能第三章数据包监听程序的设计3.1 数据包监听原理3.2 以太网帧的解析3.2.1 获取MAC地址3.2.2 数据包类型的判断3.3 IP数据报的监听3.3.1 IP数据报的解析3.3.2 ARP和ICMP数据报解析3.4 TCP和UDP监听3.4.1 TCP数据报的解析3.4.2 UDP数据报的解析第四章数据包分析4.1 流量分析4.1.1 数据包大小的表示4.1.2 数据包流量观测4.2 数据包分类分析4.2.1 数据包过滤4.2.2 利用数据包分析解决网络问题第五章数据包发送5.1 构造发送IP数据包5.1.1 IP数据包构造与发送5.1.2 发送结果分析5.2 构造发送TCP数据包5.2.1 TCP数据包构造与发送5.2.2 发送结果分析第一章太网的结构和TCP/IP1.1 以太网的结构以太网是当今现有局域网采用的最通用的通信协议标准。
该标准定义了在局域网(LAN)中采用的电缆类型和信号处理方法。
以太网在互联设备之间以10~100Mbps的速率传送信息包,双绞线电缆10 Base T以太网由于其低成本、高可靠性以及10Mbps的速率而成为应用最为广泛的以太网技术。
许多制造商提供的产品都能采用通用的软件协议进行通信,开放性最好。
基于Jpcap的入侵检测数据源获取方法

第33卷第1期2017年2月昆明冶金高等专科学校学报Journal of Kunming Metallurgy College Yol. 33 No. 1 Feb. 2017doi:10.3969/j.issn.1009 -0479.2017.01.010基于Jpcap的入侵检测数据源获取方法许卫la,许辰铭2,王素琼lb(l a.昆明冶金高等专科学校实训处,云南昆明650033; 2.云南文化艺术职业学院通识中心,云南昆明650111;l b.昆明冶金高等专科学校校工会,云南昆明650033)摘要:网络入侵检测系统(N ID S)是当今网络攻防战中保护网络安全的有力手段之一。
国内外众多研究者的 目光也都聚焦于此,在检测模型、检测方法、实际运用等方面都取得了巨大成就,但在众多的研究成果中,关于入侵检测测试数据的获取方法却一直鲜有涉足。
至今,KDDCUP 99’数据集仍然是用于入侵检测系统测试实 验的较好的数据源,但它是一个静态数据源,这使得在KDDCUP 99’数据集测试下效果很好的NIDS在动态网 络状态下效果不理想。
基于这一问题,提供了一种通过JAVA类包Jpcap捕获网络IP数据包,提取其中信息,建 立一个新的具有KDDCUP 99’数据集部分特征的数据源的方法。
关键词:入侵检测;数据源;Jpcap; KDDCUP 99’;实用性中图分类号:TP393. 08 文献标志码:A 文章编号:1009 - 0479 - (2017)01 -0057 - 04 Jpcap-based Method to Obtain the NIDS Data SourceXU W eila, XU Chenming2, WANG Suqionglb(la. Practical Training Division, Kunming Metallurgy College, Kunming 650033, China;2. General Education Centre, Yunnan Vocational College of Arts and Culture, Kunming 650111 , China;lb. Labor Union, Kunming Metallurgy College, Kunming 650033, China.)Abstract:Network Intrusion Detection System ( NIDS) is one of the most effective methods in internet security protection. Numerous researchers at home and abroad have focused on it and obtained tremendous achievements in detection model, detection methods and practical application. Nowadays KDDCUP 99^data sets are still the preferable data source to be used in testing the experiments of NIDS. However,as a static data source, it doesn’t work well in dynamic situations. Therefore, this paper establishes a new method with some characteristics of KDDCUP 99, by the data packet of Jpcap of JAVA to capture networkIP and pick up the information.Key words:intrusion detection;data source; Jpcap; KDDCUP99 ^ ;practicability〇引言对于用于实验的网络入侵检测数据源,国内外很多研究者都倾向于采用KDDCUP99’数据集。
jPcap网络流量数据采集模块实现

如果上面的例子你理解了,那么统计流量数据将是一件非常简单的事;我们的需求就是怎么将这个小模块设计得更加紧凑以便其它对象调用。
流量采集器对外提供调用的类是Tcpdump.java,这个类要根据网卡个类启动对应的后台线程抓取统计数据---也就是说这个启只能启动一次所有线程,无论其它对象如何调用它。
因此我们将Tcpdump.java设计为单实例类;Tcpdump类所要启动的后台线程是LoopPacketThread.java,这个类是实现了Thread的线程,它的run方法中将运行对应的网卡数据统计调用; Tcpdump类中有一个Map,用以存放对应网卡上采集的数据,采集线程会将统计到的数据根据其对应的网卡名字放入到Map中保存。
首先我们看LoopPacketThread.java类的实现:Java代码/***统计某一个网卡上流线的线程* @author */class LoopPacketThread extends Thread{private JpcapCaptor jpcap ;private String ipAdd;/*** 构造器* @param jpcap:cap对象* @param ipAdd:网络地址名字*/public LoopPacketThread(JpcapCaptor jpcap,String ipAdd){ this.jpcap=jpcap;this.ipAdd=ipAdd;}public void run(){//-1表示永远抓取this.jpcap.loopPacket(-1, new DumpPacket(this.ipAdd));}}这个类很简单,关键是它的run方法中,在loopPacket时传入了DumpPacket对象,DumpPacket.java是实现了PacketReceiver接口的类,在其中对网卡数据进行统计,并将统计结果放入缓存:Java代码/*** 抓包监听器,实现PacketReceiver中的方法,当数据包到达时计数.* @author */class DumpPacket implements PacketReceiver {private String ipAdd;DumpPacket(String ipAdd){this.ipAdd=ipAdd;}//实现包统计public void receivePacket(Packet packet) {//将数据加入缓存表中待图片生成servlet提取Tcpdump.ins().putNetValue(ipAdd, packet.len);System.out.println(currentTime()+": "+ipAdd+" 收到长为:*"+ packet.len);System.out.println(packet);}/***日志时间信息* @return:日志内容时间*/private static String currentTime(){Date d = new Date();SimpleDateFormat kk=new SimpleDateFormat("mm:ss");String strTime=kk.format(d);return strTime;}}OK,接下来就是关键的Tcpdump类实现了:Java代码/*** 1.使用jpcap抓取网络流量的主类,* 2.这个类要根据网卡个数,启动线程分别抓取各个网卡上的流量入中* 3.生成图表的对象从流量表中取出数据* 4.这个类设计为单实例,在第一次调用时启动抓数据线程;* 5.目前没有设计停止抓取机制....* @author */public class Tcpdump {/*** 单实例调用:其它对象调用这个类的方法时,必须通过这个方法 * 这样,保证了流量统计线程的启动,且只启动了一次* */public synchronized static Tcpdump ins(){if(null==tcpdump){tcpdump=new Tcpdump();tcpdump.init();}return tcpdump;}/**生成报表的Servlet调用用于生成图表中数据*/public Map<String, Integer> getNameTrafficMap(){return nameTrafficMap;}/*** 根据网卡个数,启动统计线程* 注意:本地地址,即127.0.0.1上的不统计*/private void init() {try{//获取本机上的网络接口对象final NetworkInterface[] devices = JpcapCaptor.getDeviceL ist();for(int i=0;i<devices.length;i++){NetworkInterface nc=devices[i];//大与零则为有效网卡,不抓本机地址.if(nc.addresses.length>0){//一个网卡可能有多个地址,只取第一个地址String addr=nc.addresses[0].address.toString();// 创建某个卡口上的抓取对象,JpcapCaptor jpcap = JpcapCaptor.openDevice(nc, 200 0, true, 20);//创建对应的抓取线程并启动LoopPacketThread lt=new LoopPacketThread(jpcap,add r);lt.start();System.out.println( addr+"上的采集线程己启动************");}}}catch(Exception ef){ef.printStackTrace();System.out.println("start caputerThread error ! ! ! !"+ef);}}/**IP和抓到包的长度放入hash表中,用表中长度加入放入的长度*/void putNetValue(String name,int value){if(nameTrafficMap.containsKey(name)){value=nameTrafficMap.get(name)+value;nameTrafficMap.put(name, value);}else{nameTrafficMap.put(name, value);}}private Tcpdump(){}/**存入某个地址名字和流量统计值*/private Map<String, Integer> nameTrafficMap=new java.util .HashMap();//单实例private static Tcpdump tcpdump=null;}这个类除了要注意单实例设计模式个,关键的一个方法是:Java代码/**IP和抓到包的长度放入hash表中,用表中长度加入放入的长度*/ void putNetValue(String name,int value){if(nameTrafficMap.containsKey(name)){value=nameTrafficMap.get(name)+value;nameTrafficMap.put(name, value);}else{nameTrafficMap.put(name, value);}}这个方法保证了采集到的数据在内存中的连续性,生成图片的Servlet从这个map中每取一次对应网卡的数据,就将其历史统计值清零。
JAVA课程设计--抓取数据包

**大学计算机科学与技术学院实验报告(2007 ~2008 学年度第一学期)课程名称网络编程技术项目名称网络抓包姓名学号专业计算机班级地点教师一实验目的:1. 通过学习,使大家熟练掌握JA VA的安装,配置及其运行环境。
2. 初步掌握如何连接JA VA和数据库。
3.从网络上采集至10万个数据包分别存入TXT文件和数据库中。
4.完成协议统计、包长统计。
5.实现数据包流量的时间变化(10分钟为单位)直观的统计图。
二.软硬件环境操作系统:Windows xp数据库:SQL Server 2000开发环境:JDK_1_5-0-07, WinPcap_4_0_1,JCreator Pro 3.5三实验原理:1. Java语言具有以下特点:简单、面向对象、分布式、解释执行、安全、跨平台、高性能、多线程等特点。
首先安装上述开发环境中的各个软件,Winpcap 是一个第三方类库,为Jpcap提供基础类Jpcap是一个静态库,可以被包截获程序直接调用,它应用Packet.dll导出的服务向上层应用程序提供强有力的截获界面。
它是应用程序的一部分。
1)建立获取网络数据包的程序为JpcapTip.java2)建立数据包流量的时间变化直观图和包长统计为ImageTest.java3)建立对数据进行协议统计的程序为ConnServer.java2. 在JpcapTip.java中向txt文件写入10万个IP数据包,包括(IP的源地址,目标地址,高层协议,长度, 版本号,标识符,标志,段偏移量,数据报的寿命数值,服务型号,数据),然后在把IP数据包的信息存放到SQL server 2000的数据库中。
3. 在ImageTest.java中统计共收集多少个数据包,计算平均包长,并统计包长。
4. 在ConnServer.java中协议统计。
四、网卡设置1:openDevicepublic static Jpcap openDevice(ng.String device, int snaplen, boolean promisc, int to_ms),第一个参数为string,指定要打开的设备名;第二个参数为int,指定每个包返回数据的长度;第三个参数为混杂标志,如果设为1,将网卡设置为混杂模式,监听全网段。
基于JPcap的数据包捕获实验报告

实验报告实验名称基于JPcap的数据包捕获器课程名称计算机网络原理与技术姓名李辉成绩班级软件0806学号3901080608日期2010.4地点电子楼四楼实验室备注:小组合作实验,组员:李辉、黄钰1.实验目的基于java第三方包JPcap编写数据包捕获器,该捕获器具有以下功能:a)监听并捕获以太网帧b)分析IP数据报c)分析ARP/RARPd)分析TCP、UDP数据报e)分析ICMP报文f)分析HTTP报文g)简单的网络流量分析功能2.实验环境(软件、硬件及条件)1)Jpcap和Wincap简介Jpcap是一个能够捕获、发送网络数据包的java类库包。
这个包用到了Libpcap/Winpcap和原始套接字API,目前,Jpcap在FreeBSD 3.x, Linux RedHat 6.1, Solaris, and Microsoft Windows 2000/XP 系统上已经做过测试,并且支持Ethernet, IPv4, IPv6, ARP/RARP, TCP, UDP, ICMPv4协议。
Jpcap是由在美国加利福尼亚大学Irvine 分校(UCI)攻读博士学位的日本人Keita Fujiiy研制发布的,其主页为/kfujii/ 。
其最初版本是2000.6发布的Jpcap0.1版,此后几经修改,到2003.4发布了发布Jpcap0.4版。
JAVA语言虽然在TCP/UDP传输方面给予了良好的定义,但对于网络层以下的控制,却是无能为力的。
JPCAP扩展包弥补了这一点。
JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用wincap/libpcap,给JAVA语言提供一个公共的接口,从而实现了平台无关性,并能够捕获、发送网络数据包。
Winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。
开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。
课程设计(论文)_基于WinPcap的网络数据包捕获与分析

基于WinPcap的网络数据包捕获与分析一、WinPcap介绍1.WinPcap简介WinPcap是一个在Windows操作系统下的免费、公开的用于直接访问网络的开发工具包(编程API)。
大多数Windows网络应用程序都是通过Winsock API(Windows套接口)这类高级编程接口访问网络的。
这种方法允许在网络上进行简单的数据传送,因为操作系统的TCP/IP协议栈实现软件会处理底层细节(协议操作、流程重组等等),并提供一个类似于读写文件的函数接口。
然而,有时候“简便方法”并不能满足实际需要。
有些程序希望绕过TCP/IP协议栈,直接处理底层网络中的通信数据,它们需要对网络进行底层进行直接访问,即在没有类似协议栈(TCP/IP协议栈)的实体介入条件下对网络进行原始访问。
基于Winsock API编程,应用程序是通过调用操作系统提供的编程接口访问TCP/IP协议栈实现网络通信的。
基于WinPcap编程,网络程序实际上是绕开操作系统的TCP/IP协议栈直接通过底层网络发送数据,因此,网络程序可以实现一些更低级、更灵活的功能。
2.WinPcap的组成与结构如图1.1,WinPcap由一个数据包监听设备驱动程序(NPF)、一个底层的动态连接库()和一个高层的不依赖于操作系统的静态库()共三个部分构成。
这里,NPF在操作系统的内核级,、在用户级。
1)数据包监听设备驱动程序Array技术实现上,为了实现抓包,系统必须绕过操作系统的协议栈来访问在网络上传输的原始数据包(rawpacket)。
这就要求WinPcap的一部分运行在操作系统核心内部,直接与网络接口驱动交互。
由于这个部分是系统依赖(system dependent)的,在Winpcap的解决方案中它被视为是一个设备驱动,称作NPF(Netgroup Packet Filter)。
图1.1 WinPcap的组成和结构2)底层的动态连接库()和高层静态库()为了方便编程,WinPcap必须提供一个编程接口(API),这就是WinPcap的底层的动态连接库()和高层静态库()。
基于Jpcap的数据包捕获器的设计与实现

基于Jpcap的数据包捕获器的设计与实现
翟光群;胡贵江
【期刊名称】《微计算机信息》
【年(卷),期】2009(025)021
【摘要】本文研究了以太网数据包的捕获机制,实现了基于JPcap的网络数据包捕获工具,其基本原理是通过调用Jpcap库捕获本地网络上的所有数据包,然后对数据包进行协议解码,从而可以实时地监视网络的运行情况.局域网使用结果表明此工具稳定,效果较好.
【总页数】3页(P197-199)
【作者】翟光群;胡贵江
【作者单位】450001,郑州,郑州大学信息工程学院;450001,郑州,郑州大学信息工程学院
【正文语种】中文
【中图分类】TP393.08
【相关文献】
1.基于WinPcap的网络数据包捕获系统设计与实现 [J], 黄培花;宋科
2.基于Jpcap的TCP/IP数据包捕获与发送 [J], 陈鹏
3.基于Libpcap的网络数据包捕获器的设计与实现 [J], 贾翔;秦雯;严沛
4.嵌入式数据包捕获器的设计与实现 [J], 曾敏;李峰
5.基于Winpcap的数据包捕获和协议分析系统的设计与实现 [J], 李延会;岳彩祥;徐金艳;李亚斐
因版权原因,仅展示原文概要,查看原文内容请购买。
基于Jpcap的数据包捕获器的设计与实现

软件时空
基于 Jpcap 的数据包捕获器的设计与实现
Development and implementation of packet sniffer based on Jpcap
(郑州大学) 翟 光 群 胡 贵 江
图 1 基于 JPcap 的数据包捕获
图 2 传输层协议分析
图 3 应用层协议分析 4.2 数据包捕获和分析流程 本 包 捕 获 器 采 用 JAVA 多 线 程 设 计 实 现 ,其 数 据 包 捕 获 和 分析的结构流程图如图 4 所示。 该流程图上标明的主线程其实 也是作为整个程序中的一个子线程而运行的,也就是说当用户 点击了开始捕获菜单项时,启动该线程开始工作,当用户点击 停止捕获时候,线程接收到终止信号从而终止该线程释放系统 资源。 4.3 监听程序捕获的数据流分析 经过内核过滤后获得的数据包存放在包获取组提供的缓 冲 区 中,此时 获 得 的数 据 包 是数 据 链 路层 的 帧,帧格 式 如 下:7 字 节的先导字段,各字节值为 10101010,目的是 使接 收 器 与发 送 器 的时 钟 同 步 ;其 后 1 字 节 的 帧 始 符 ;6 字 节 的 目 的 地 址,为 接 收
用。 如 果 想 捕获 Java 程 序 中 的 网 络 数 据 包, 在 Windows 或 U-
NIX 上 , 必 须 有 其 他 的 辅 助 类 库 , 分 别 是 WinPcap 和 LibPcap,
这是两个广泛应用的系 统 抓 包库, 因 为 核心 的 Java API 不 能访
问底层的网络数据, 但 Jpcap 是一种提供在 Windows 或 Unix 系
数据包捕获实验实验报告

我们在语言,界面,协议方面都充分考虑到了其可扩展性。所以,要在这个版本的基 础上开发新的版本相对来说还是不难的。这样可以很好的复用现在的代码。 5. 操作方便
实验报告
学生姓名:
学 号:
一、实验室名称:软件实验室
二、实验项目名称:数据包捕获实验
三、SnifferFox 工作原理:
软件首先把网卡设置为混杂模式,然后获得网卡接收到的数据,按 TCP/IP 协议对数据包进 行分析,按照用户的要求把一部分包过滤掉,然后再把这些等剩下的数据包写入缓冲区(一块 指定大小的内存块,可以根据用户计算机的内存大小手工设置),显示在用户界面上,当缓冲 区满了的时候,系统会自动把缓冲区的数据写入到外存中去。
报告评分:
指导教师签字:
下图是一个简单的说明。
图表 1 SnifferFox Data Flow Diagram
SnifferFox 是一个多线程的系统,大致可以分成 3 个线程(实现的时候实际只用了 2 个),抓 包线程(Sniffer Thread),协议分析和过滤的线程,用户界面。工作在数据链路层,因此可以获 得原始的数据帧,所以 SnifferFox 可以支持 ARP,RARP 等底层协议。
这是我们考虑得比较多的一个问题,我们在尽量地让系统的操作方式符合人们的习惯, 使得用户觉得它方便好用。 6. 支持了比较多的协议
以太网中,SnifferFox 分析了 TCP/IP 族的几乎应用层以下的所有协议,应用层的协议 能够识别 112 个。
计网实验报告抓取本地网卡的IP数据包

计网大型实验报告姓名汪敏倩课程计算机网络原理大型实验201226100117 学号计科班级1201一、实验目的Route的工作原理及使用。
、Arp、、1.1任务一:了解常用网络命令PingTracert/traceroute了解交换机的工作原理,掌握常用交换机的配置和应用以及静态路由的配1.2任务二:置。
数据包的各个部分字段。
IP抓取本地网卡的数据包,并且分析IP1.3任务三:二、实验软件命令解释程序2.1任务一:cmd.exe 模拟器2.2任务二:Packet.Tracer 语言编程器,javaWincap网络抓包器,jnetpcap开源包,eclipes2.3任务三:三、实验步骤或实验原理任务一:3.13.1.1◆实验原理:1、Ping是Windows下的一个命令在Unix和Linux下也有这个命令。
ping 也属于一个通信协议,是TCP/IP协议的一部分。
利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。
它所利用的原理是这样的:利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,时延是多少。
使用格式:Ping空格IP地址。
该命令还可以加许多参数使用,具体是键入Ping按回车即可看到详细说明。
2、Tracert/traceroute 的用处和PING是差不多的。
但是也有本质的区别。
用ping的时候是不会显示经过的路径的。
但是用tracerert的时候就可以显示经过的路由,并且显示它经过那个路由,花了多少时间,并且每个路由都会测试3次。
它可以让你知道,你的计算机离目的计算机在网络上的距离有多远,经过多久才能到达。
.地址。
空格IP使用格式:Tracert/traceroute。
主机发送协议IP地址获取物理地址的一个TCP/IP3、ARP即地址解析协议,是根据以此确并接收返回消息,地址的ARP请求广播到网络上的所有主机,信息时将包含目标IP缓存中并保留一定ARPIP地址和物理地址存入本机定目标的物理地址;收到返回消息后该缓存一节约资源。
4.1.2 用Jpcap窃取数据包[共10页]
![4.1.2 用Jpcap窃取数据包[共10页]](https://img.taocdn.com/s3/m/198ce23c172ded630a1cb626.png)
微博是这样炼成的:从聊天室到Twitter的技术实现2064.1.2 用Jpcap窃取数据包1.Jpcap说明与安装JDK中提供的API在操作TCP/UDP通信方面有较强的功能,但对于网络层以下的控制却是无能为力的。
如果在通信过程中,需要实现TCP或链路层数据包的抓取分析,利用JDK现有的API 是无法做到的。
Jpcap扩展包弥补了这一点,Jpcap是可以让Java工作在链路层的开源类库,调用Jpcap中的API可以“抓取”到通过机器网卡上的字节数据及数据包的相关信息。
当然,它的底层还是使用了本机API通过Jini调用在JavaAPI中得到数据。
Jpcap实际上并非真正去实现对数据链路层的控制,而是一个“中间件”,Jpcap调用wincap/libpcap,从而给Java语言提供一个公共的接口,实现了平台无关性。
Jpcap支持FreeBSD 3.x、Linux RedHat 6.1、Fedora Core 4、Solaris和Windows 2000/XP等系统。
Jpcap下载地址为:/kfujii/jpcap/doc/index.html。
用户可以从Jpcap网站上直接下载它的桌面应用程序进行测试,全面地统计本机的网络数据流量和查看收发的数据包。
本项目中使用的是Jpcap 0.6版本,从网站下载Source build后,可以看到如图4.6所示目录结构。
▲ 图4.6 下载后的目录结构其中文档、源码、例程及本机应用程序一应俱全,用户可以马上安装应用程序体验Jpcap的网格功能。
使用Jpcap可以编写出功能完备的网络嗅探程序。
本节中,只是使用其非常简单的一个功能:显示本机每块网卡上收发的数据。
特别注意:Jpcap运行时依赖WinCap的类库,使用前必须在本机安装WinCap (/)(如果是在linux系统上,则请到/下载)。
本节中Jpcap版本为0.6,WinCap版本为4.0,运行于Windows系统上。
IP数据包的捕获与分析设计报告---精品管理资料

CENTRAL SOUTH UNIVERSITY计算机网络课程设计报告题目IP数据包的捕获与分析学生姓名胡壮班级学号计科1106班 0909112924 指导教师穆帅设计时间2014年1月目录第一章绪论 (3)1.1 课题研究的意义 (3)1.2 捕获数据包的常用方法 (3)第二章系统需求分析 (4)2.1 课程设计题目与要求 (4)2。
2 IP数据包格式 (6)2.3 程序流程图 (7)2。
4 实验环境 (9)第三章系统总体框架 (9)3。
1 套接字模块 (9)3。
2 IP数据包的捕获模块 (9)3。
3 IP数据包分析模块 (9)3。
4 输出模块 (9)第四章详细设计与实现 (10)4。
1 数据结构的定义 (10)4。
2 初始化工作 (11)4.3 套接字的创建和设置 (12)4。
4 数据包的捕获与分析 (13)4。
5 信息的输出 (14)第五章程序运行结果与分析 (15)5。
1 程序运行结果截图 (15)5。
2 程序中有待改进的地方 (16)第六章总结 (17)参考文献 (17)附录 (18)第一章绪论现如今,计算机网络已经彻彻底底地改变了人们的生活。
大量的数据都是经过计算机网络传输的,而TCP/IP协议是计算机网络中最重要的协议之一.计算机网络中绝大多数数据都是以IP数据包的形式发送和接受的。
所以IP数据包的捕获是很多计算机安全技术的基础。
1.1 课题研究的意义计算机之间进行通信时,交互的所有信息都封装在数据包中。
因此,通过采集网络数据并对其进行相应的分析,可以清楚地了解到进行通信的计算机的通信目的。
首先,分析采集到的数据包,可以确定网络是否受到攻击入侵;其次,也可以使用采集到的数据包来分析网络应用程序可能出现的问题的原因;此外,通过网络数据采集和统计可以清楚的了解整个网络在各个时段内的网络负载情况,从而判断网络使用得是否合理。
除了以上谈到的几个方面以外,数据包采集分析还有其他很多用途.在研究IPv4网络的同时,我们还对IPv6协议进行了初步的研究并通过对数据报的分析,了解了在不同网络环境下IPv6数据包的封装格式以及在网络中的传输路径。
用VC_实现基于Winpcap的网络数据包捕获与分析.

GA从本质上是一种不依赖具体问题
算法与语言
106
文献标识Байду номын сангаас:A
文章编号:1672-7800(200703-0104-02
图1
WinPcap基本体系结构
算法与语言
104
dapterNames((char*AdapterName,&Ada-
pterLength函数值为TRUE则可以得到网络适配器列表及描述,否则返回为FALSE,意为查找失败。
(2打开适配器,如果调用成功返回一个类型为lpadapter指针的包捕获描述字lpadapter=PacketOpenAdapter(Adapter-List。
结构描述_IP
typedef struct_IP{
union{BYTE Version;//版本
BYTE HdrLen;//IHL
};
BYTE ServiceType;//服务类型
WORD TotalLen;//总长
WORD ID;//标识
union{WORD Flags;//标志
WORD FragOff;//分段偏移
PacketSetBuff(lpadapter,500*1024
//设置捕获数据报的内核级缓冲区大小
PacketInitPacket(pthis->lppacketr, (char*recvbuf,sizeof(recvbuf
//初始化一个LPACKET结构
PacketReceivePacket(pthis->lpada-pter,pthis->lppacketr,TRUE
[6]周正军.网络入侵检测系统的设计与实现
[M ].北京:电子工业出版社,2002.[7]唐正春.精通Visual C ++6.0[M ].北京:电子
网络终端监控本流量监测

成都信息工程学院课程设计报告网络终端监控姓名:陈黎苗专业:信息安全班级:08级4班提交日期:2009年12月13日基于Jpcap的本地流量监控器摘要在互联网迅速发展的今天,网络安全问题日益成为人们关注的焦点,病毒、恶意攻击、非法访问等都容易影响网络的正常运行,多种网络防御技术被综合应用到网络安全管理体系中,本地流量监测是其中一种分析网络状况的有效方法,它从数据包流量分析角度,通过实时地收集和监视网络数据包信息,来检查是否有违反安全策略的行为和网络工作异常的迹象。
本课题就是基于Jpcap的本地流量监控器的实现,来抓去局域网中的数据包并对其进行分析。
关键词:局域网;数据包抓取;流量统计;Jpcap目录1.背景与意义 (1)1.1背景 (1)1.2意义 (1)2. 系统设计 (2)2.1系统主要目标 (2)2.2主要软件需求(运行环境) (2)3 系统功能程序设计 (2)3.1基本要求部分 (2)3.1.2页面制作函数 (2)3.1.3日志输出函数 (4)3.2程序界面预览 (5)4. 测试报告 (5)5.结论 (8)参考文献 (9)1.背景与意义1.1 背景Jpcap是2003年日本开发的一套能够捕获、发送网络数据包的java类库。
因为核心JavaAPI不能访问底层的网络数据,但Jpcap是一种提供在Windows 或UNIX系统上进行这种访问的JavaAPI。
Jpcap不是一种纯粹的Java解决方案,它依赖本地库的使用。
在Windows或UNIX上,你必须有必要的第三方库,分别是WinPcap或libpcap。
要在java中使用Jpcap类库需要安装Jpcap的运行和开发环境。
Jpcap类库结构1.2 意义计算机网络的普及应用已渗透到社会各个层面,给社会带来便利的同时也随之带来的安全和管理问题。
互联网络是一把双刃剑;就如一个企业而言有些员工利用工作时间看新闻、玩游戏、干私活、聊天、泄密公司资料、炒股票、下电影、听歌曲、浏览色情站点、甚至在公司网上边拿老板工资边找工作等等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告实验名称基于JPcap的数据包捕获器课程名称计算机网络原理与技术姓名李辉成绩班级软件0806学号3901080608日期2010.4地点电子楼四楼实验室备注:小组合作实验,组员:李辉、黄钰1.实验目的基于java第三方包JPcap编写数据包捕获器,该捕获器具有以下功能:a)监听并捕获以太网帧b)分析IP数据报c)分析ARP/RARPd)分析TCP、UDP数据报e)分析ICMP报文f)分析HTTP报文g)简单的网络流量分析功能2.实验环境(软件、硬件及条件)1)Jpcap和Wincap简介Jpcap是一个能够捕获、发送网络数据包的java类库包。
这个包用到了Libpcap/Winpcap和原始套接字API,目前,Jpcap在FreeBSD 3.x, Linux RedHat 6.1, Solaris, and Microsoft Windows 2000/XP 系统上已经做过测试,并且支持Ethernet, IPv4, IPv6, ARP/RARP, TCP, UDP, ICMPv4协议。
Jpcap是由在美国加利福尼亚大学Irvine 分校(UCI)攻读博士学位的日本人Keita Fujiiy研制发布的,其主页为/kfujii/ 。
其最初版本是2000.6发布的Jpcap0.1版,此后几经修改,到2003.4发布了发布Jpcap0.4版。
JAVA语言虽然在TCP/UDP传输方面给予了良好的定义,但对于网络层以下的控制,却是无能为力的。
JPCAP扩展包弥补了这一点。
JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用wincap/libpcap,给JAVA语言提供一个公共的接口,从而实现了平台无关性,并能够捕获、发送网络数据包。
Winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。
开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。
2)编程环境要求i.安装Java SDK()ii.安装最新版本的LibPcap(对于UNIX平台,/) 或者WinPcap (对于Windows平台,http://winpcap.polito.it/)iii.下载并解压缩Jpcap的最新版本(/kfujii/jpcap/doc/index.html )。
iv.以Window XP系统为例,具体准备工作如下:1.复制Jpcap.dll到C:\WINDOWS\system322.安装winpcap4.0.23.在工程中导入 jpcap.jar3.实验方法Jpcap0.4版本共有1个分析器接口14个分析器类,分别简介如下:1、接口综述JpcapHandler :这个接口用来定义分析被捕获数据包的方法2、类综述ARPPacket :这个类描述了ARP/RARP包,继承了Packet类DatalinkPacket :这个抽象类描述了数据链路层EthernetPacket :这个类描述了以太帧包,继承DatalinkPacket类ICMPPacket :这个类描述了ICMP包,继承了IPPacket类IPAddress :这个类描述了IPv4和IPv6地址,其中也包含了将IP·地址转换为域名的方法IPPacket :这个类描述了IP包,继承了Packet类,支持IPv4和IPv6IPv6Option :这个类描述了IPv6选项报头Jpcap :用来捕获数据包Jpcap.JpcapInfo :Jpcap的内部类,它包含被捕获数据包的信息(在jpcap0.4修改部分BUG之后不再使用这个类)JpcapSender :它用来发送一个数据包JpcapWriter :它用来将一个被捕获的数据包保存到文件Packet :这个类是所有被捕获的数据包的基类TCPPacket :这个类描述TCP包,继承了IPPacket类UDPPacket :这个类描述了UDP包,继承了IPPacket类具体api帮助文档见附录。
4.实验分析以下以抓取ip数据包为例讲解抓包基本步骤:1.绑定网络设备2.抓包3.分析以下代码见Test工程import java.io.IOException;import jpcap.JpcapCaptor;import workInterface;import jpcap.packet.IPPacket;import jpcap.packet.Packet;/***ip数据包捕获演示例子*@author李辉**/public class IPPacketTest {public static void main(String[] args) {/*-------------第一步绑定网络设备--------------------*/NetworkInterface[] devices=JpcapCaptor.getDeviceList(); //返回一个网络设备列表for(NetworkInterface n : devices)System.out.println( + " | " + n.description );System.out.println("------------------------------------");JpcapCaptor jpcap=null;int caplen = 1512;boolean promiscCheck = true;//caplen限制每一次收到一个数据包,只提取该数据包中前多少字节//Promisc:设置是否混杂模式。
处于混杂模式将接收所有数据包,若之后又调用了包过滤函数setFilter()将不起任何作用//50这个参数主要用于processPacket()方法,指定超时的时间try {jpcap=JpcapCaptor.openDevice(devices[1],caplen,promiscCheck,50);} catch (IOException e) {e.printStackTrace();}/*----------------第二步抓包---------------*/int i = 0;while(i < 10){Packet packet = jpcap.getPacket();if(packet instanceof IPPacket && ((IPPacket)packet).version==4) {i++;IPPacket ip=(IPPacket)packet; //将包强制转为IP包System.out.println("版本:IPv4");System.out.println("优先权:" + ip.priority);System.out.println("区分服务:最大的吞吐量:" + ip.t_flag);System.out.println("区分服务:最高的可靠性:" + ip.r_flag);System.out.println("长度:" + ip.length);System.out.println("标识:" + ip.ident);System.out.println("DF:Don't Fragment:" + ip.dont_frag); System.out.println("MF:More Fragment:" + ip.more_frag); System.out.println("片偏移:" + ip.offset);System.out.println("生存时间:" + ip.hop_limit);String protocol = null;switch(new Integer(ip.protocol)){case 1:protocol = "ICMP";break;case 2:protocol = "IGMP";break;case 6:protocol = "TCP";break;case 8:protocol = "EGP";break;case 9:protocol = "IGP";break;case 17:protocol = "UDP";break;case 41:protocol = "IPv6";break;case 89:protocol = "OSPF";break;default:break;}System.out.println("协议:" + protocol);System.out.println("源IP:" + ip.src_ip.getHostAddress()); System.out.println("目的IP:" + ip.dst_ip.getHostAddress()); System.out.println("源主机名:" + ip.src_ip);System.out.println("目的主机名:" + ip.dst_ip);System.out.println("------------------------------------");}}}}其他抓包过程类似,已经能够抓取的数据包:详细程序代码见附录PacketCapure工程5.实验结论数据包捕获器界面6.参考资料1.贵州大学2002级硕士研究生学年报告《基于JPcap的网络流量分析研究与应用》李祥赵新辉2.JpcapDumper ver.0.3 Keita Fujiiy7.附件1. 代码文件夹下有Test工程和PacketCapure工程,其中PacketCapure即为本实验所做的捕获器,Test为原理演示工程。
2. API文件夹下是帮助文件3. 所需第三方类库文件夹下是所需的第三方类库4. 参考资料文件夹下有《基于JPcap的网络流量分析研究与应用》和JpcapDumper ver.0.35.根目录下有本实验报告电子版和演示ppt。