如果不显示图片,或者出现排版错误,抽风,崩坏,节操丢失等一系列不正常情况,请点击下面链接观看,点我

IP数据包的流量统计(JAVA语言)

要求:编制程序,监控网络,捕获一段时间内网络上的IP数据包,按数据包的源地址统计出该源地址在该时间段发出的IP包的个数,将其写入日志文件中或者用图形表示出来.

课程设计,感觉挺有意思的.就想做出来,但自己虽然学过一点JAVA语言但是有些东西并不会,并且对网络协议也不是特别熟悉,但是,这并不妨碍把它做出来,就是这样有些东西至少你想不想去做而已.老罗说:

我并不在乎输赢,我只想证明我认真!

思路

用jpcap捕获到IP数据包,然后写入本地,最后用PHP读取本地文件,将数据做成柱状图.

工具

jdk(我的版本:1.8.0_05)

jpcap(我的版本:0.01.16-win32)

Winpcap(我的版本:4_1_3)

eclipse

操作系统:windows8.1,32位

jpcap和Wincap是环境所需要的,在网上也能下到,这里我放在网盘里:点我下载

环境配置

JDK配置

这个就不多说了,会点JAVA的人都懂的…

JPACAP配置

这个我也是参照网上的教程,查看这个博客的第二个部分eclipse的配置.

值得注意的是,Jpcap.jar文件就是net.sourceforge.jpcap-0.01.16.jar.

问题1:

配置完可能会出现的问题:

PacketCapture: loading native library jpcap.. ok

Exception in thread "main" java.lang.UnsatisfiedLinkError: findDevice

at net.sourceforge.jpcap.capture.PacketCapture.findDevice(Native Method)

at subjectprogram.CapturePacketTest.main(CapturePacketTest.java:57)

解决办法

将Jpcap.dll文件放入jre中,两个都放.也就是JDK下有个jre文件夹,也将这个文件放出对应的目录中,我是这么解决的.

问题2:ECLIPSE中出现-访问限制由于对必需的库XX具有一定限制,因此无法访问类型

解决办法:

也是参考别人的方法,博客地址.

代码部分

配置完所有的环境,没有错误就可以开始写代码了,代码不多,基本上都是用包中的方法:

CapturePacketTest.java

import net.sourceforge.jpcap.capture.*;

import net.sourceforge.jpcap.net.*;

import java.io.IOException;

import java.io.RandomAccessFile;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

public class CapturePacketTest implements RawPacketListener,PacketListener{

public static int number = 1;

Map statics = new HashMap();

public static void main(String[] args)throws Exception{

PacketCapture pcap = new PacketCapture();

//查看所有的网卡

String[] capDevices = PacketCapture.lookupDevices();

int capdevice_num = capDevices.length;

//打印网卡列表

System.out.println("---------网卡列表:-------------------------");

for(int i = 0 ;i

System.out.println("第"+(i+1)+"号网卡:\n"+capDevices[i]);

}

System.out.println("---------默认采用6号网卡,下面开始捕获:----------");

//暂停2秒

for(int i =0 ;i<20;i++){

Thread.sleep (100);

System.out.print(">>");

}

System.out.println();

//获取第6号网卡的物理地址,我的是6号网卡,你的并不一定是,在网卡列表中查看你说用的网卡,并选择序号,capDevices[0]表示1号网卡

String capdevice_6 = capDevices[5].split("\n")[0];

// 开始捕获,并设置为混杂模式

pcap.open(capdevice_6,true);

//递归调用

CapturePacketTest t1= new CapturePacketTest();

//原始数据包监听

pcap.addRawPacketListener(t1);

//数据包监听

pcap.addPacketListener(t1);

//结束捕获

pcap.capture(-1);

}

//接口实现,没用

public void rawPacketArrived(RawPacket rawPacket) {

// TODO 自动生成的方法存根

}

//当获取到IP数据包

public void packetArrived(Packet packet) {

//判断是否是IP数据包,如果是,则进行统计

if( packet instanceof IPPacket){

IPPacket ippacket = ((IPPacket)packet);

//获取当前时间

Date d = new Date();

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");

String current_time=sdf.format(d);

//String echo = "IP包个数:"+(number++)+"||当前时间("+current_time+")::源地址("+ippacket.getSourceAddress()+")-->目的地址("+ippacket.getSourceAddress()+")";

String echo = "Number of IP Package:"+(number++)+"||Current Time("+current_time+")::Source IP:("+ippacket.getSourceAddress()+")-->Destination IP("+ippacket.getDestinationAddress()+")";

//String echo ="版本:"+ippacket.getVersion()+"头长度"+ippacket.getHeaderLength()+"服务类型:"+ippacket.getTypeOfService()+"数据包总长度:"+ippacket.getLength()+"数据包标示"+ippacket.getId()+"分段标志"+ippacket.getFragmentFlags()+"分段偏移值"+ippacket.getFragmentOffset()+"生存时间"+ippacket.getTimeToLive()+"上层3协议类型"+ippacket.getEthernetProtocol()+"头校验和"+ippacket.getChecksum()+"源地址"+ippacket.getSourceAddress()+"目的地址"+ippacket.getDestinationAddress() ;

System.out.println(echo);

//statics.put(ippacket.getSourceAddress(),"1");

//对文件进行写入

try {

// 打开一个随机访问文件流,按读写方式

RandomAccessFile randomFile = new RandomAccessFile("H://capture.txt", "rw");

// 文件长度,字节数

long fileLength = randomFile.length();

//将写文件指针移到文件尾。

randomFile.seek(fileLength);

randomFile.writeBytes(ippacket.getSourceAddress()+"\r\n");

randomFile.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

然后用PHP读取保存在H盘的capture.txt文件,并处理绘图:

capture.php

require_once ('jpgraph/src/jpgraph.php');

require_once ('jpgraph/src/jpgraph_bar.php');

$capture = file_get_contents("H://capture.txt");

$array = explode("\r\n", $capture);

$ac= array_count_values($array);

$key = array();

$value = array();

foreach ($ac as $k => $v) {

if ($k !='' && $v !='') {

array_push($key, $k);

array_push($value, $v);

}

}

$datay=$value;

// Create the graph. These two calls are always required

$graph = new Graph(980,1300,'auto');

$graph->SetScale("textlin");

$theme_class=new UniversalTheme;

$graph->SetTheme($theme_class);

$graph->Set90AndMargin(200,160,160,160);

$graph->img->SetAngle(90);

// set major and minor tick positions manually

$graph->SetBox(true);

//$graph->ygrid->SetColor('gray');

$graph->ygrid->Show(true);

$graph->ygrid->SetFill(false);

$graph->xaxis->SetTickLabels($key);

$graph->yaxis->HideLine(false);

$graph->yaxis->HideTicks(false,false);

// For background to be gradient, setfill is needed first.

$graph->SetBackgroundGradient('#00CED1', '#FFFFFF', GRAD_HOR, BGRAD_PLOT);

// Create the bar plots

$b1plot = new BarPlot($datay);

// ...and add it to the graPH

$graph->Add($b1plot);

$b1plot->SetWeight(0);

$b1plot->SetFillGradient("#808000","#90EE90",GRAD_HOR);

$b1plot->SetWidth(17);

$b1plot->value->show();

// Display the graph

$graph->Stroke();

?>

结果

JAVA程序捕获IP包:

PHP对数据绘图:

总结

其实并不难,就是捣鼓的时候有点费事,毕竟人生在于捣鼓嘛…好久没更新博客了,嘻嘻,甜到忧伤…

java 网络流量统计_IP数据包的流量统计(JAVA语言)相关推荐

  1. Winpcap进行抓包,分析数据包结构并统计IP流量

    2020年华科计算机网络实验 文末有完整代码,仅限参考 一.实验目的 随着计算机网络技术的飞速发展,网络为社会经济做出越来越多的贡献,可以说计算机网络的发展已经成为现代社会进步的一个重要标志.但同时, ...

  2. Linux内核网络协议栈:udp数据包发送(源码解读)

    <监视和调整Linux网络协议栈:接收数据> <监控和调整Linux网络协议栈的图解指南:接收数据> <Linux网络 - 数据包的接收过程> <Linux网 ...

  3. 网络分流器-DPI深度数据包检测技术及作用

    戎腾网络分流器又名核心网采集器,作为网络安全领域网络监控前端重要的基础装备,是整个网络安全中不可缺少的必要装备!对网络安全起到了关键作用! 戎腾当前固网已经升级到400G,支持不同链路,移动互联网信令 ...

  4. TCP/IP网络协议栈:以太网数据包结构、802.3、MTU

    <TCP/IP网络协议栈:以太网数据包结构.802.3> <TCP/IP网络协议栈:ARP协议详解> <TCP / IP攻击:ARP缓存中毒的基本原理.TCP序列号预测和 ...

  5. 网络分流器-DPI深度数据包检测

    网络分流器-戎腾网络-DPI检测是当前比较流行的网络监控前端的一种模式,而网络分流器对于网络安全的重要性可以说是到头重要的!今天我们来聊聊DPI检测 深度数据包检测(DPI) 深度数据包检测(Deep ...

  6. 网络分流器-网络分流器-DPI深度数据包检测

    网络分流器-戎腾网络-DPI检测是当前比较流行的网络监控前端的一种模式,而网络分流器对于网络安全的重要性可以说是到头重要的!今天我们来聊聊DPI检测 深度数据包检测(DPI) 深度数据包检测(Deep ...

  7. 计算机网络ip数据包分析题,计算机网络课程设计_IP数据包的捕获及分析.doc

    CENTRAL SOUTH UNIVERSITY 计算机网络课程设计报告 目录 第一章 课程设计的目的与要求1 1.1 课程设计的目的1 1.2 课程设计的要求1 第二章 课程设计的内容3 2.1 课 ...

  8. java广播数据包发送_在Java中广播UDP数据包的正确和有效方法是什么?

    我需要在每个网络接口上广播UDP数据包.起初,我尝试播放到255.255.255.255,没有结果,后来我发现这个"已被弃用了大约20年".因此,我尝试在每个网络接口上进行迭代,以 ...

  9. ctf ddos数据包 杂项 流量_抗DDoS攻击设备化解危机于无形

    攻击手法翻新 DDoS攻击已经存在发展了很多年,近来这类攻击方式发生了一些新的变化. 传统的DDoS攻击是黑客通过大量僵尸主机针对目标发送海量伪造数据,阻塞用户网络或应用,这种大流量的.伪造数据包攻击 ...

最新文章

  1. RecyclerView横向滑动与ViewPager冲突问题
  2. hdu-4045 Machine scheduling
  3. Failed to create the Java Virtual Machine
  4. java不用析构函数,堆栈分配的类--C发生不需要的析构函数调用
  5. (八)cmockery中的calculator和run_tests函数的注释代码
  6. 如何证明接口中的域是static final的?
  7. QDialog之屏蔽Esc键
  8. Centos7:利用crontab定时执行任务
  9. 计算机北桥芯片结构图,电脑主板芯片维修教程第一节:电脑主板你是否真的认识...
  10. python | 秦九昭算法详细介绍
  11. APM 页面加载耗时校准
  12. 国内三大PTPrivate Tracker站分析
  13. 网页audio标签中autoplay自动播放音乐失败解决方案
  14. Python基础复习09_面向对象特性
  15. 微信小程序布局 头尾固定中间自适应
  16. C语言——运算符与表达式
  17. 自动化测试:Monkey环境的搭建(windows)
  18. 面对批评与争议,苹果让步,延迟推出CSAM儿童保护功能
  19. css-07--1. HTML5 的新特性2. CSS 3 的新特性
  20. 【PHP】随机生成名字

热门文章

  1. 变形金刚5的口碑崩盘,教会了我什么
  2. 卡巴斯基公司的官方申明
  3. Vue 思维导图(二)
  4. 制作Windows XP万能克隆镜像
  5. 谷歌HDR+研读(二)
  6. 迷死人的奥运泳衣(组图)。
  7. smartgwt (A)
  8. 浏览器无法支持中文怎么办
  9. 攻防世界 Misc高手进阶区 2分题 倒立屋
  10. Python实现牛顿迭代法