山东建筑大学计算机科学与技术学院课程设计说明书题目:收集并统计网络TCP流量课程:计算机网络院(部):计算机科学与技术专业:网络工程班级:学生姓名:学号:指导教师:完成日期:山东建筑大学计算机学院课程设计说明书I目录课程设计任务书............................................................I收集并统计网络TCP流量....................................................1一、问题描述..............................................................1二、基本要求..............................................................1三、设计思想..............................................................1四、系统结构..............................................................1五、程序流程..............................................................1六、源程序................................................................3七、测试数据..............................................................5八、测试情况..............................................................6结论.....................................................................7山东建筑大学计算机学院课程设计说明书I山东建筑大学计算机科学与技术学院课程设计任务书设计题目收集并统计网络TCP流量已知技术参数和设计要求1.利用WinPCap进行网络监控。2.系统完成以下功能:(1)利用WinPCap收集流经网卡的数据。(2)对其中的TCP流量进行统计并显示统计结果。(3)向用户提供友好的交互界面。(4)用户可以方便地中止或继续TCP流量的统计。(5)系统必须对出现的问题或错误做出响应。3.建议该系统利用VC++实现。设计内容与步骤1.回顾开发工具的基本使用方法;2.学习WinPCap编程的基本方法;3.TCP流量统计系统框架结构设计;4.TCP流量统计系统的设计与实现6.课程设计任务说明书设计工作计划与进度安排1.学习WinPcap流量统计编程的基本方法4小时2.程序设计以及调试方法2小时3.TCP流量统计系统框架结构设计4小时4.TCP流量统计系统设计16小时5.课程设计说明书14小时设计考核要求1.出勤20%2.答辩或演示30%3.课程设计说明书50%山东建筑大学计算机学院课程设计说明书1收集并统计网络TCP流量一、问题描述编程实现简单的TCP流量统计器,TCP流量统计器通过各种科学的方式,准确的纪录来访某一页面的访问者的流量信息,它从局域网中抓取IP数据包,并对它进行分析得到相应的头部信息,过滤TCP包进行分析,得到TCP流量信息。二、基本要求1.利用WinPCap进行网络监控。2.系统完成以下功能:(1)利用WinPCap收集流经网卡的数据。(2)对其中的TCP流量进行统计并显示统计结果。(3)向用户提供友好的交互界面。(4)用户可以方便地中止或继续TCP流量的统计。(5)系统必须对出现的问题或错误做出响应。3.建议该系统利用VC++实现。三、设计思想TCP流量统计器通过Jpacp与winpcap来进行抓包,JPCAP调用wincap,而给JAVA语言提供一个公共的接口,WinPcap是用于网络封包抓取的一套工具,调用loopPackage获取数据包。四、系统结构首先用getDeviceList()方法获取网卡设备号,在用openDevice()方法打开指定设备,然后开始用loopPacket()方法获取数据包,最后进行输出。五、程序流程首先获取设备然后打开设备之后获取数据包最后进行输出,具体的流程图如下:山东建筑大学计算机学院课程设计说明书2获取设备列表:finalNetworkInterface[]devices=JpcapCaptor.getDeviceList();打开指定设备:JpcapCaptorjpcap=JpcapCaptor.openDevice(ni,2000,true,20);获取数据包:this.jpcap.loopPacket(-1,newReceivePacket(this.ipAddr));输出信息:Tcpflowstatistics.jta.append(TCPPacket+\n);Tcpflowstatistics.jta.append(|——*此数据包的源IP地址:+tcp.src_ip+\n);Tcpflowstatistics.jta.append(|——*此数据包的目的IP地址:+tcp.dst_ip+\n);Tcpflowstatistics.jta.append(|——*此数据包的发送端口号:+tcp.src_port+\n);Tcpflowstatistics.jta.append(|——*此数据包的接收端口号:+tcp.dst_port+\n);Tcpflowstatistics.jta.append(|——*此数据包的源MAC地址:+ethernetPacket.getSourceAddress()+\n);Tcpflowstatistics.jta.append(|——*此数据包的目的MAC地址:+ethernetPacket.getDestinationAddress()+\n);Tcpflowstatistics.jta.append(|——*此数据包的传输层协议类型:+tcp.protocol+(TCP)+\n);Tcpflowstatistics.jta.append(|——*此数据包的长度:+tcp.len+\n);编写构造方法监听动作事件获取设备列表监听动作事件终止开始打开指定设备获取数据包输出开始山东建筑大学计算机学院课程设计说明书3六、源程序publicclassTcpflowstatistics{privatestaticTcpflowstatisticsts;privatebooleanflag=true;JFramejf;JButtonbt1,bt2,bt3,bt4;staticJTextAreajta;JScrollPanejsp;JPaneljp1;Tcpflowstatistics(){jf=newJFrame(TGP流量统计器);jf.setLayout(newBorderLayout());jf.setVisible(true);jf.setSize(800,600);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jta=newJTextArea();jp1=newJPanel();bt1=newJButton(开始);bt2=newJButton(终止);jsp=newJScrollPane();jsp.setViewportView(jta);jp1.add(bt1);jp1.add(bt2);bt1.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){bt1Action(e);}});bt2.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){bt2Action(e);}});jf.add(jp1,BorderLayout.NORTH);jf.add(jsp,BorderLayout.CENTER);}publicstaticvoidmain(String[]args){//启动统计线程newTcpflowstatistics();}山东建筑大学计算机学院课程设计说明书4publicvoidinit(){//获取本机上的网络接口对象finalNetworkInterface[]devices=JpcapCaptor.getDeviceList();//获取设备列表for(inti=0;idevices.length;i++){NetworkInterfaceni=devices[i];//大于零时为有效地址;不抓本机地址if(ni.addresses.length0){//一个网卡可能有多个地址,只获取第一个Stringaddr=ni.addresses[0].address.toString();try{//创建卡口上的抓取对象JpcapCaptorjpcap=JpcapCaptor.openDevice(ni,2000,true,20);LoopPacketThreadlpt=newLoopPacketThread(jpcap,addr);lpt.start();jta.append(addr+上的采集线程已启动!!!+\n);}catch(IOExceptione){e.printStackTrace();System.out.println(抓取数据包时出现异常!!!);}}}}publicvoidbt1Action(ActionEvente){init();}publicvoidbt2Action(ActionEvente){System.exit(0);}}publicclassLoopPacketThreadextendsThread{privateJpcapCaptorjpcap=null;privateStringipAddr=;publicLoopPacketThread(JpcapCaptorjpcap,StringipAddr){this.jpcap=jpcap;this.ipAddr=ipAddr;}//-1表示永久抓包publicvoidrun(){山东建筑大学计算机学院课程设计说明书5this.jpcap.loopPacket(-1,newReceivePacket(this.ipAddr));//监听捕获包}}publicclassReceivePacketimplementsPacketReceiver{privateStringipAddr=;publicReceivePacket(StringipAddr){this.ipAddr=ipAddr;}publicvoidreceivePacket(Packetpacket){//如果截获的包为TCP包if(packetinstanceofjpcap.packet.TCPPacket){//判断其左边对象是否为其右边类的实例,返回boolean类型的数据TCPPackettcp=(TCPPacket)packet;//转化为响应实例EthernetPacketethernetPacket=(EthernetPacket)packet.datalink;Tcpflowstatistics.jta.append(========================================================================+\n);Tcpflowstatistics.jta.append(TCPPacket+\n);Tcpflowstatistics.jta.append(|——*此数据包的源IP地址:+tcp.src_