java 网络流量统计_IP数据包的流量统计(JAVA语言)
如果不显示图片,或者出现排版错误,抽风,崩坏,节操丢失等一系列不正常情况,请点击下面链接观看,点我
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语言)相关推荐
- Winpcap进行抓包,分析数据包结构并统计IP流量
2020年华科计算机网络实验 文末有完整代码,仅限参考 一.实验目的 随着计算机网络技术的飞速发展,网络为社会经济做出越来越多的贡献,可以说计算机网络的发展已经成为现代社会进步的一个重要标志.但同时, ...
- Linux内核网络协议栈:udp数据包发送(源码解读)
<监视和调整Linux网络协议栈:接收数据> <监控和调整Linux网络协议栈的图解指南:接收数据> <Linux网络 - 数据包的接收过程> <Linux网 ...
- 网络分流器-DPI深度数据包检测技术及作用
戎腾网络分流器又名核心网采集器,作为网络安全领域网络监控前端重要的基础装备,是整个网络安全中不可缺少的必要装备!对网络安全起到了关键作用! 戎腾当前固网已经升级到400G,支持不同链路,移动互联网信令 ...
- TCP/IP网络协议栈:以太网数据包结构、802.3、MTU
<TCP/IP网络协议栈:以太网数据包结构.802.3> <TCP/IP网络协议栈:ARP协议详解> <TCP / IP攻击:ARP缓存中毒的基本原理.TCP序列号预测和 ...
- 网络分流器-DPI深度数据包检测
网络分流器-戎腾网络-DPI检测是当前比较流行的网络监控前端的一种模式,而网络分流器对于网络安全的重要性可以说是到头重要的!今天我们来聊聊DPI检测 深度数据包检测(DPI) 深度数据包检测(Deep ...
- 网络分流器-网络分流器-DPI深度数据包检测
网络分流器-戎腾网络-DPI检测是当前比较流行的网络监控前端的一种模式,而网络分流器对于网络安全的重要性可以说是到头重要的!今天我们来聊聊DPI检测 深度数据包检测(DPI) 深度数据包检测(Deep ...
- 计算机网络ip数据包分析题,计算机网络课程设计_IP数据包的捕获及分析.doc
CENTRAL SOUTH UNIVERSITY 计算机网络课程设计报告 目录 第一章 课程设计的目的与要求1 1.1 课程设计的目的1 1.2 课程设计的要求1 第二章 课程设计的内容3 2.1 课 ...
- java广播数据包发送_在Java中广播UDP数据包的正确和有效方法是什么?
我需要在每个网络接口上广播UDP数据包.起初,我尝试播放到255.255.255.255,没有结果,后来我发现这个"已被弃用了大约20年".因此,我尝试在每个网络接口上进行迭代,以 ...
- ctf ddos数据包 杂项 流量_抗DDoS攻击设备化解危机于无形
攻击手法翻新 DDoS攻击已经存在发展了很多年,近来这类攻击方式发生了一些新的变化. 传统的DDoS攻击是黑客通过大量僵尸主机针对目标发送海量伪造数据,阻塞用户网络或应用,这种大流量的.伪造数据包攻击 ...
最新文章
- RecyclerView横向滑动与ViewPager冲突问题
- hdu-4045 Machine scheduling
- Failed to create the Java Virtual Machine
- java不用析构函数,堆栈分配的类--C发生不需要的析构函数调用
- (八)cmockery中的calculator和run_tests函数的注释代码
- 如何证明接口中的域是static final的?
- QDialog之屏蔽Esc键
- Centos7:利用crontab定时执行任务
- 计算机北桥芯片结构图,电脑主板芯片维修教程第一节:电脑主板你是否真的认识...
- python | 秦九昭算法详细介绍
- APM 页面加载耗时校准
- 国内三大PTPrivate Tracker站分析
- 网页audio标签中autoplay自动播放音乐失败解决方案
- Python基础复习09_面向对象特性
- 微信小程序布局 头尾固定中间自适应
- C语言——运算符与表达式
- 自动化测试:Monkey环境的搭建(windows)
- 面对批评与争议,苹果让步,延迟推出CSAM儿童保护功能
- css-07--1. HTML5 的新特性2. CSS 3 的新特性
- 【PHP】随机生成名字