计算机网络课程设计报告端口监听.docx

上传人:b****0 文档编号:18497893 上传时间:2023-08-18 格式:DOCX 页数:25 大小:374.29KB
下载 相关 举报
计算机网络课程设计报告端口监听.docx_第1页
第1页 / 共25页
计算机网络课程设计报告端口监听.docx_第2页
第2页 / 共25页
计算机网络课程设计报告端口监听.docx_第3页
第3页 / 共25页
计算机网络课程设计报告端口监听.docx_第4页
第4页 / 共25页
计算机网络课程设计报告端口监听.docx_第5页
第5页 / 共25页
计算机网络课程设计报告端口监听.docx_第6页
第6页 / 共25页
计算机网络课程设计报告端口监听.docx_第7页
第7页 / 共25页
计算机网络课程设计报告端口监听.docx_第8页
第8页 / 共25页
计算机网络课程设计报告端口监听.docx_第9页
第9页 / 共25页
计算机网络课程设计报告端口监听.docx_第10页
第10页 / 共25页
计算机网络课程设计报告端口监听.docx_第11页
第11页 / 共25页
计算机网络课程设计报告端口监听.docx_第12页
第12页 / 共25页
计算机网络课程设计报告端口监听.docx_第13页
第13页 / 共25页
计算机网络课程设计报告端口监听.docx_第14页
第14页 / 共25页
计算机网络课程设计报告端口监听.docx_第15页
第15页 / 共25页
计算机网络课程设计报告端口监听.docx_第16页
第16页 / 共25页
计算机网络课程设计报告端口监听.docx_第17页
第17页 / 共25页
计算机网络课程设计报告端口监听.docx_第18页
第18页 / 共25页
计算机网络课程设计报告端口监听.docx_第19页
第19页 / 共25页
计算机网络课程设计报告端口监听.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

计算机网络课程设计报告端口监听.docx

《计算机网络课程设计报告端口监听.docx》由会员分享,可在线阅读,更多相关《计算机网络课程设计报告端口监听.docx(25页珍藏版)》请在冰点文库上搜索。

计算机网络课程设计报告端口监听.docx

计算机网络课程设计报告端口监听

课程设计报告样本

 

CENTRALSOUTHUNIVERSITY

 

计算机网络课程设计报告

 

题目端口检测及IP包的捕获解析

学生姓名

班级学号

指导教师

设计时间

第一节实验平台和器材准备1

1.2实验平台1

第二节需求分析1

2.1实验要求1

2.1.1基本要求1

2.1.3详细功能要求1

第三节、概要设计1

3.1端口监听1

3.2IP包的捕获与解析2

第四节详细设计3

4.1端口监听程序框图3

4.2端口监听关键代码3

4.2IP包捕获与解析程序框图4

4.2.1写日志函数4

4.2.1IP包捕获与分析5

第五节实验结果分析9

5.1实验结果展示9

5.1.1端口监听9

5.1.2IP包的捕获与解析析11

5.1实验结果分析12

5.1.1端口监听12

5.1.2IP包的捕获与解析13

第六节错误调试14

6.1数据库连接错误14

6.1.1解决方案14

6.2POST乱码解决方式15

6.2.1错误表现15

6.2.2解决方案15

6.3Socket连接错误16

6.3.1错误表现16

6.3.2产生错误的原因16

6.3.3解决方式16

第八节实验总结0

第九节参考资料1

附件:

2

第一节实验平台和器材准备

1.2实验平台

软件开发环境

Eclipse

其他工具

Jnetpcap,winpcap

第二节需求分析

2.1实验要求

2.1.1基本要求

本次实验的要求在网络环境,实现端口检测以及捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。

2.1.3详细功能要求

l)实现本机以及局域网内计算机的端口监控。

2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。

3)形成记录结果的日志文件。

第三节、概要设计

3.1端口监听

创建一个服务器s,依次开放0—65535间所有的端口,当开放过程抛出IO流异常e,并且e是.BindException的一个实例时,输出该端口被占用。

3.2IP包的捕获与解析

在Java平台下通过第三方包来进行底层网络嗅探。

使用JnetPCAP对接WinPCAP来截获网卡数据包,分为四步走。

第一步:

获取网卡列表。

通过Pcap.findAllDevs(alldevs,errbuf)这个静态方法将所有本机网卡加入到alldevs的List<PcapIf>中。

然后选择一个网卡进行监听。

第二步:

打开连接

调用Pcap.openLive(device.getName(),snaplen,flags,timeout,errbuf)静态方法,返回一个Pcap对象。

其中5个参数分别表示设备的系统名称(不是设备别名)、每次捕捉的数据量、捕捉方式、超时和错误信息缓冲区。

第三步:

监听抓包

调用pcap.loop(intcnt,JPacketHandler<T>handler,Tuser)方法即可进行监听,在loop方法的参数中有两点需要关注,第一点是用户指定的数据包分析器,在之后的文章中将详细介绍;第二点是一个泛型参数,表示传输给分析器的用户指定类型的消息。

第四步:

数据包分析

使用继承JPacketHandler来实现自己的处理方法。


在JPacketHandler有一个nextPacket(JPacketpacket,Tuser)方法,这是典型的通过事件机制来实现处理数据包的方法。

每当Pcap嗅探到一个数据包后,调用用户之前绑定的分析器中的nextPacket方法进行处理。

注意这个方法是阻塞的,也就避免了潜在的同步问题。

传进的JPacket参数包含了这个数据包中的所有信息,通过不同的内置Header分析器可以分析不同的协议。

写入日志函数使用Java写入文件相关语句,将输出流中的字节截取并写入到TXT文件中。

第四节详细设计

4.1端口监听程序框图

4.2端口监听关键代码

for(inti=0;i<65535;i++){

try{

ServerSockets=newServerSocket(i);

//i表示要开放端口的号码

//System.out.println("port"+i+"canbeused.");

s.close();

//释放绑定的端口

}catch(IOExceptione){

//.BindException要申请的端口因被占用而发生中断异常

//instanceof和><=类似,是运算符,判断其左边对象是否为其右边类的实例

if(einstanceof.BindException){

System.out.println(i+"areadyinuse.");

}else{

System.err.println("othererror..");

4.2IP包捕获与解析程序框图

4.2.1写日志函数

1.写日志函数程序框图

2.写日志函数关键代码

publicstaticvoidfilewrite(Stringi){

Filefile=newFile("D:

\\java\\catchpage.txt");

Stringip=i;

Stringenter=

"===========================================";

try{

file.createNewFile();

FileOutputStreamin=newFileOutputStream(file);

in.write(enter.getBytes(),0,enter.getBytes().length);

in.write(ip.getBytes(),0,ip.getBytes().length);

in.flush();//刷新文件

in.close();

//文件读出部分

/*FileReaderfr=newFileReader("D:

\\java\\catchpage.txt");

BufferedReaderbr=newBufferedReader(fr);

while(br.readLine()!

=null){

Strings=br.readLine();

System.out.println(s);

}

br.close();

*/

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

4.2.1IP包捕获与分析

1.IP包捕获与分析程序框图

2.IP捕获与分析关键代码

publicstaticvoidmain(String[]args)throwsInterruptedException{//抛出中断异常

//Pcapif类用一个模拟链表来表示类

Listalldevs=newArrayList();

StringBuildererrbuf=newStringBuilder();

//StringBuilder课新建一个可变长的字符串

intr=Pcap.findAllDevs(alldevs,errbuf);

//构造一个可以被Pcap.openLive()打开的网络设备列表,返回1表示失败,0成功

if(r==Pcap.NOT_OK||alldevs.isEmpty()){//NOT_OK=-1

System.err.printf("Can'treadlistofdevices,erroris%s",

errbuf.toString());

return;

}

for(PcapIfpif:

alldevs){

System.out.println(pif.getName());//输出网卡名称

}

PcapIfpif=alldevs.get

(2);//选择要监控的设备号

//2....打开连接,返回一个Pcap对象

intsnaplen=64*1024;//截取包的大小

intflags=Pcap.MODE_PROMISCUOUS;//决定模式是否为混杂,1表示混杂,0是非混杂

inttimeout=10*1000;//设置超时,单位是毫秒

//Pcap.openLive()打开一个从网络中及时捕获的连接

Pcappcap=Pcap.openLive(pif.getName(),snaplen,flags,timeout,

errbuf);//errbuf错误缓冲池,snaplen每次捕捉的数据量,flags捕捉方式

if(pcap==null){

System.err.printf("Errorwhileopeningdeviceforcapture:

"

+errbuf.toString());

return;

}

//如果成功返回了Pcap对象,就进入监听抓包循环nextPacket对包进行分析

//Pcap.LOOP_INFINITE,整型,表示loop循环一直不结束,直到出现错误或中断

//JPacketHandler接受从libcap库中译码的包

pcap.loop(

Pcap.LOOP_INFINITE,newJPacketHandler(){//进入抓包循环

finalTcptcp=newTcp();

finalHttphttp=newHttp();

finalIp4ip=newIp4();

//通过事件机制来实现处理数据包,Pcap嗅探到一个数据包后,

//调用用户之前绑定的分析器中的nextPacket方法进行处理

//nextPacket当捕获一个新的数据包后有libcap或jnetpcap扫描器回调

publicvoidnextPacket(JPacketpacket,StringBuildererrbuf){

//以下是捕获tcp包信息和http包的信息

/*if(packet.hasHeader(Tcp.ID)){

packet.getHeader(tcp);

}

if(packet.hasHeader(tcp)){

System.out.println("\n下面是tcp包部分:

");

System.out.printf("tcpheader:

:

%s%n",tcp.toString());

}

if(packet.hasHeader(tcp)&&packet.hasHeader(http)){

System.out.println("\n下面是http包部分:

");

System.out.printf("httpheader:

:

%s%n",http);

}

*/

if(packet.hasHeader(ip)){

System.out.print(ip);

filewrite(ip.toString());//调用写入日志函数

}

}

},errbuf);

pcap.close();//关闭会话

}

}

第五节实验结果分析

5.1实验结果展示

5.1.1端口监听

1.关闭局域网

2.打开局域网

5.1.2IP包的捕获与解析析

1、捕获网卡信息

2.IP包解析结果

3.日志文件生成

4.日志内容

5.1实验结果分析

5.1.1端口监听

结果展示界面中显示有较多接口被占用,其中53号端口为DNS服务,所以在打开局域网的时候可以发现53号端口被占用,而关闭局域网后发现该端口未被占用;135号端口主要用于使用RPC(RemoteProcedureCall,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务。

8086属于TCP端口号,是一种分布式SCADA网络对接端口。

5.1.2IP包的捕获与解析

在运行的结果中,各个信息分别表示:

*******Ip4-"ipversion4"-offset=14(0xE)length=20protocolsuite=NETWORK

Length表示报头长度20字节,suite表示协议栈是network

version=4

Version表示IP版本号为4

hlen=5[5*4=20bytes,NoIpOptions]

hlen表示报头长度20字节,没有选择项字段,而之所以要定义头长度变量,是因为不同包的选择项字段不同

diffserv=0x0(0)

Diffserv表示区分服务体系结构,它基于类的QoS技术,保证IP的服务质量

000000..=[0]codepoint:

notset

......0.=[0]ECNbit:

notset

.......0=[0]ECEbit:

notset

length=52

length报文总长度

id=0x353E(13630)

ID表示该数据包的标识符

flags=0x2

(2)

Flags表示该数据包是否分片,第二位是不分片位(DF),当DF被设置被设置为1时,表示路由器不能对报文进行分片处理。

第三位表示还有后继分片(MF),当路由器对报文进行分片时,除了最后一个分片的MF位设置为0外,其他所有分片的MF位均设置1,以便接收者直到收到MF位为0的分片为止。

0..=[0]reserved预留

.1.=[1]DF:

donotfragment:

set

..0=[0]MF:

morefragments:

notset

offset=0

Offset表示分片偏移,由于该数据包未分片,所以分片偏移为0

ttl=64[timetolive]

type=6[next:

TransmissionControl]

Type表示优先权和服务类型TOS,其中优先权分别为:

000:

路由001:

优先级

010:

立即011:

火速100:

火速覆盖101:

紧急110:

互联网络控制

111:

网络控制,该数据包的优先权值为110,表示互联网控制优先;其服务类型是传输控制

checksum=0x6D7C(28028)[correct]

Checksum表示头校验和,以及给出的判断

source=10.96.122.137

destination=106.120.168.168

第六节错误调试

6.1数据库连接错误

6.1.1解决方案

发现数据库TCPIP没开

打开启用后正常

6.2POST乱码解决方式

6.2.1错误表现

6.2.2解决方案

加上上面的代码后正常

6.3Socket连接错误

6.3.1错误表现

6.3.2产生错误的原因

6.3.3解决方式

优化Socket连接,并且在数据发送接收完毕后关闭流。

第八节实验总结

这次的计算机网络课程设计共做了两个方面的实验,一个是端口监听,一个是IP包的捕获与解析。

这两个实验跟平常电脑的实验都有关系,其中端口检测在以前参加学校专业的创意作品赛时作为了该作品的切入点,那时是宏观的设计,在这次的课程设计中进行了实践,比较有收获。

IP包的捕获实验以前在计算机网络的课堂上看到了用Wireshark抓包工具进行捕获,这次的课程设计相当于用Java语言自己写出一个抓包工具,虽然有很多瑕疵,但还是比较有成就感的。

并且这两部分的实验,基本上都使用了新的工具,在实践过程中,学到了很多相关工具的知识,现在总结一下。

在端口检测部分,学到了几个异常类对象的使用:

IOException异常简介:

IOException指发生I/O错误时引发的异常。

IOException是使用流、文件和目录访问信息时引发的异常的基类。

BindException异常类简介:

BindException是.net包中的一个类,当一个端口是因为被占用而抛出异常,该异常将是BindException的一个实例。

printStackTrace:

在命令行打印异常信息在程序中出错的位置及原因。

在IP包捕获与解析部分学会了使用两个工具,分别为WinPCAP和JnetPcap。

winpcap(windowspacketcapture)是windows平台下一个免费,公共的网络访问系统。

可以为win32应用程序提供访问网络底层的能力。

它用于windows系统下的直接的网络编程。

Winpcap提供了一个强大的编程接口,它很容易地在各个操作系统之间进行移植。

jNetPcap是libpcap的一个Java完整封装,它通过对接了WinPcap来截获网卡数据包。

jNetPcap使用与libpcap相同风格的API。

libpcap是unix/linux平台下的网络数据包捕获函数库,大多数网络监控软件都以它为基础。

使用JNetPcap之前必须在目标系统中安装WinPcap(Windows系统),以提供JNetPcap所需要的链接库。

另外要把JNetPcap包和所属的dll文件都加入到开发目录的环境变量中。

Pcap类是JNetPcap中最为核心的类,是一个对LibPcap中方法的Java直接映射,提供了取得网卡设备列表、打开嗅探、设置过滤器等等必须的工作。

有关于Jnetpcap中PcapIf、packet、protocol包中相关类方法的详解参照代码注释。

第九节参考资料

[1]AndrewS.Tanenbaum著潘爱民,徐明伟译.计算机网络(第四版).清华大学出版社.2006.03.

[2]BruceEckelChuckAllison,陈昊鹏译.Java高级编程(第四版).机械工业出版社社.2007.06

附件:

端口监听部分源代码:

packagelistenport;

importjava.io.IOException;

import.ServerSocket;

import.SocketAddress;

publicclassListenport

{

publicstaticvoidmain(String[]args)

{

/*try{

ServerSocketss=newServerSocket(8080);

ServerSocketss2=newServerSocket(8888);

}catch(IOExceptione1){

//TODOAuto-generatedcatchblock

e1.printStackTrace();

}

*/

for(inti=0;i<65535;i++){

try{

ServerSockets=newServerSocket(i);//表示要监听端口的号码

//System.out.println("port"+i+"canbeused.");

//s.close();//立即释放绑定的端口

}catch(IOExceptione){

//.BindException要申请的端口因被占用而发生中断异常

//instanceof和><=类似,是运算符,判断其左边对象是否为其右边类的实例

if(einstanceof.BindException){

System.out.println(i+"areadyinuse.");

}else{

System.err.println("othererror..");

}

}

}

}

}

IP包捕获部分源代码:

packagecatchpage;

importjava.io.BufferedReader;

importjava.io.File;

importjava.io.FileOutputStream;

importjava.io.FileReader;

importjava.io.IOException;

importjava.util.ArrayList;

importjava.util.List;

 

importorg.jnetpcap.Pcap;//对LibPcap中方法的Java直接映射

importorg.jnetpcap.PcapIf;

importorg.jnetpcap.packet.JPacket;

importorg.jnetpcap.packet.JPacketHandler;//下一个数据包

importorg.jnetpcap.protocol.tcpip.Http;

importorg.jnetpcap.protocol.tcpip.Tcp;

importwork.Ip4;

publicclassCatchpage{

//IP包的版本、服务类型、数据包总长度、分段标志、分段偏移值、

//生存时间、上层协议类型、等内容。

//写日志函数

publicstaticvoidfilewrite(Stringi){

Filefile=newFile("D:

\\java\\catchpage.txt");

Stringip=i;

Stringenter="===========================================";

try{

file.createNewFile();

FileOutputStreamin=newFileOutputStream(file);

in.write(ente

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2