简单的TCP客户端程序.docx
- 文档编号:23543422
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:18
- 大小:70.16KB
简单的TCP客户端程序.docx
《简单的TCP客户端程序.docx》由会员分享,可在线阅读,更多相关《简单的TCP客户端程序.docx(18页珍藏版)》请在冰豆网上搜索。
简单的TCP客户端程序
计算机网络实验教案大纲
实验名称:
实验一、模拟Ethernet帧的发送过程(即CSMA/CD协议的实现)
实验类型:
综合性实验
实验类别:
基础□专业基础√专业□
实验学时:
2(4)
所涉及的课程及知识点:
计算机网络;局域网技术、Ethernet帧、CSMA/CD协议。
一、实验目的
局域网技术发展十分迅速,目前,Ethernet是应用最广泛的局域网。
因此,学习Ethernet技术对深入掌握局域网知识是非常重要的。
本课程设计的目的是模拟Ethernet帧的发送过程,使学生熟悉Ethernet帧的数据发送流程,即CSMA/CD工作流程。
二、实验内容
编写程序模拟Ethernet结点的数据发送流程。
实验要求用两个线程模拟两台网络中的主机进行网络通信。
通信中进行数据的发送时,由发送的线程号和总线模拟变量进行或运算,当结果与要发送的数据相等时,既说明没有发生冲突,没有冲突就记录数据发生的次数;如果不相等,则说明发生了冲突,发生冲突后,对两台主机进行冲突次数记录,并分别调用冲突处理函数,进行延迟时间的推算(延迟函数是根据网络数据发生冲突时的原理CMSA/CD来进行时间的计算)。
再获得延迟时间后,分别对两个线程延迟。
数据发送后置接收标志,然后接收数据。
在数据接收完之后,判断循环次数,当次数满时,退出循环。
在循环中,可以添加一些其他的线程处理机制。
三、实验仪器设备和材料清单
要求:
具备局域网网络环境,VC++
四、实验要求
课外必须预习,根据实验任务,查阅资料,进行理论分析和研究,确定实验技术方案,或根据规定的实验技术方案,确定实验步骤。
准备、编写实验程序,另安排了4学时的课外上机时间,学生可根据自己的实际情况,延长课外机时。
五、实验步骤
1)用两个线程a和b来模拟Ethernet上的两台主机。
2)用一个双字类型变量Bus来模拟总线(将其初始化为“\0”,并且总线等于“\0”时表示总线空闲)。
3)两个子线程向总线发送自己的数据。
数据用该线程的线程号进行模拟,发送数据用线程号和Bus的“或”操作进行模拟(即Bus=Bus|ID,ID为该线程的线程号)。
4)每台主机须向总线上成功发送10次数据,如果其中某次数据发送失败,则该线程结束。
5)发送流程须遵循CSMA/CD。
随机延迟算法中的冲突窗口取0.005。
在数据发送成功(即Bus==ID)后,报告“IDsendsuccess”,产生冲突(即Bus!
=ID)后报告“IDsendconllision”,发送失败(即冲突计数器值为0)后报告“IDsendfailure”。
随着主机发送成功次数增加,报告其已发送成功的次数,如“主机A发送成功数=3”。
六、实验成绩评定方法
实验成绩总分以100分计,其中实验准备占30%,实验操作占40%,其它占30%。
七、实验报告要求
要求学生从实验方法的建立、实验步骤的设计、实验设备的选择、实验数据的处理、实验结果的分析讨论等方面写出报告。
报告包含:
1.系统概述运行环境编译使用方法实现环境程序文件列表等
2.主要数据结构
3.主要算法
4.遇到的问题及解决方法
5.体会与建议
6.可正确编译的可读性好的源代码
八、思考题
实验名称:
二、发送EthernetARP包
实验类型:
综合性实验
实验类别:
基础□专业基础√专业□
实验学时:
2(4)
所涉及的课程及知识点:
计算机网络;地址解读协议(AddressResolutionProtocol,ARP)、ARP协议的帧结构。
一、实验目的
IP数据包常通过Ethernet发送。
Ethernet设备并不识别32位IP地址,它们是以48位MAC地址传输Ethernet数据包的。
因此,IP驱动器必须把IP目的地址转换成Ethernet网络目的地址。
这两种地址之间存在着某种静态的或动态的映射,通常需要查看一张表来进行这种映射。
地址解读协议(AddressResolutionProtocol,ARP)就是用来确定这些映象的协议。
ARP工作时,送出一个含有所希望的IP地址的Ethernet广播数据包。
目的地主机(或另一个代表该主机的系统)以一个含有IP和Ethernet地址对的数据包作为应答。
发送者将这个地址对高速缓存起来,以节约不必要的ARP通信。
本课程设计的目的是进一步熟悉ARP协议的帧结构以及它的运作过程。
二、实验内容
在熟悉ARP协议并了解Winpcap编程的前提下,构造ARP包,选择并打开网卡,将ARP包发送出去。
1)命令行格式:
arpsendsrc_ipsrc_macdst_ipdst_macflag
其中arpsend作为程序名。
各参数意义:
·src_ip:
源IP地址。
·src_mac:
源MAC地址。
·dst_ip:
目的IP地址。
·dst_mac:
目的MAC地址。
·flag:
0表示ARP请求;1表示ARP应答。
例如:
arpsend192.168.1.IFA:
01:
02:
C3:
04:
05192.168.1.20D:
E1:
02:
03:
B4:
061
2)输出:
SendOK。
3)程序的正确性的检验。
可以安装一个截包软件,如Iris,运行该软件以查看能否收到程序发出的ARP包,并检查包中各字段填充的内容(如各地址、协议类型)是否准确。
三、实验仪器设备和材料清单
要求:
具备网络环境并连入Internet,VC++
四、实验要求
课外必须预习,根据实验任务,查阅资料,进行理论分析和研究,确定实验技术方案,或根据规定的实验技术方案,确定实验步骤。
准备、编写实验程序,另安排了4学时的课外上机时间,学生可根据自己的实际情况,延长课外机时。
五、实验步骤
●首先,定义ARP包的数据结构。
根据ARP分组结构,分别定义两个子结构,即物理帧结构。
/*DLC头数据结构*/
typedefstructDLCHeader
{
unsignedcharDesMAC[6]。
unsignedcharSreMAc[6]。
unsignedshortEthertype。
}DLCHEADER。
//ARP桢
typedefstructARPFrame
{
unsignedshortHW_Type。
unsignedshortProt_Type。
unsignedcharHW_Addr_Len。
unsignedcharProt_Addr_Len。
unsignedshortFlag。
unsignedcharSend_HW_Addr[6]。
unsignedcharSend_Prot_Addr[4]。
unsignedcharTarg_HW_Addr[6]。
unsingedcharTarg_port_Addr[4]。
unsignedcharpadding[18]。
}ARPFRAME。
//ARP包=DLC头+ARP帧
typedefstructARPPacket。
{
DLCHEADERdlcHeader。
ARPFRAMEarpFrame。
}
*PARPPACKET
ARPPacketARPPACKET。
●其次,定义三个子函数。
ⅰTransAndFilellMAC(CHAR*argv,unsignedchar*a)
其功能是判断argv(MAC地址)的格式是否正确。
正确,则将它填到a中
并返回1;否则,指出MAC格式错误并返回0。
ⅱTransAndFilellIP(CHAR*argv,unsignedchar*b)
其功能是判断argv(IP地址)的格式是否正确。
正确,则将它填到b中,并返回1;否则,指出MAC格式错误并返回0。
ⅲboolSend()
其功能是读取并选择网卡,打开选定网卡后发送。
成功后完成关闭网卡、释放资源等工作。
BoolSend()
{
//定义各变量
LPADAPTERlpAdapter。
//网卡结构指针
LPPACKETlpPacket。
//发送包结构指针
ARPPacketARPPACKET。
…………
…………
//获取版本号,以判断操作系统类型
DWORDdwVersion=Getversion()。
DWORDdwWindowsMajorVersion=(DWORD)(LOBYTE(LOWORD(dwVersion)))
If(!
(dwVersion>=0x80000000&&dwWindowsMajorVersion))
{
/*在WindowsNT下,获取UNICODE码网卡列表,并选择适当的网卡,将其名称转换伪ASCII码。
主要用到函数PacketGetAdapterNames(AdapterNameu,&AdapterULength),第一个参数是char数组,大小为8192*2,用于存放网卡列表,第二个参数是unsignedlong型的,其值为sizeof(AdapterNameU).*/
}
else{
/*在WindowsNT下,获取UNICODE码网卡列表,并选择适当的网卡,
也使用PacketGetAdapterNames函数,只不过第一个参数大小为8192.*/
}
//打开网卡,参数是选定的网卡名
lpAdapter=PacketOpenAdapter(AdapterNameA)。
/*发送帧:
用PacketAllocatePacket()给要发送的包分配空间。
用PacketInitPacket(lpPacket,&,sizeof(ARPPACKET))初始化包结构。
用PacketSetNumWrites(lpAdapter,1)
用PacketSendPacket(lpAdapter,lpPacket,true)发送ARP包。
最后用PacketCloseAdapter(lpAdapter)关闭网卡
*/
}
●main函数
根据命令行的输入,判断输入的正确性,完成ARP包中各字段的填充;再调用子函数send(),完成包的发送。
填充ARP包中的各个字段时,要注意主义字节序和网络字节序的转换。
如
ARPPACKET.dlcHeader.Ethertype=(unsignedshort)0x0608。
程序流程图:
六、实验成绩评定方法
实验成绩总分以100分计,其中实验准备占30%,实验操作占40%,其它占30%。
七、实验报告要求
要求学生从实验方法的建立、实验步骤的设计、实验设备的选择、实验数据的处理、实验结果的分析讨论等方面写出报告。
报告包含:
1.系统概述运行环境编译使用方法实现环境程序文件列表等
2.主要数据结构
3.主要算法
4.遇到的问题及解决方法
5.体会与建议
6.可正确编译的可读性好的源代码
八、思考题
实验名称:
三、解读IP数据包
实验类型:
综合性实验
实验类别:
基础□专业基础√专业□
实验学时:
2(4)
所涉及的课程及知识点:
计算机网络;IP数据包的结构及IP协议的工作原理。
一、实验目的
本章课程设计的目的就是设计一个解读IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。
二、实验内容
本设计的口标是捕获网络中的IP数据包,解读数据包的内容,将结果显示在规范输出上,并同时写入日志文件。
程序的具体要求如下:
l)以命令行形式运行:
ipparselogfile,其中ipparse是程序名,而logfile则代表记录结果的日志文件。
2)在规范输出和日志文件中写人捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。
3)当程序接收到键盘输入Ctrl+C时退出。
三、实验仪器设备和材料清单
要求:
具备网络环境并连入Internet,VC++
四、实验要求
课外必须预习,根据实验任务,查阅资料,进行理论分析和研究,确定实验技术方案,或根据规定的实验技术方案,确定实验步骤。
准备、编写实验程序,另安排了4学时的课外上机时间,学生可根据自己的实际情况,延长课外机时。
五、实验步骤
模块分析
模块一:
函数名:
getIpInfo
参数类型:
无
返回值:
无
功能:
配置日志文件,设置Windowsock,截获IP数据包,调用各成员函数对IP数据包进行解读,
模块二:
函数名:
getVersion
参数类型:
BYTE,BYTE&
返回值:
无
功能:
解读IP的版本信息,通过引用调用返回结果。
模块三:
函数名:
getIHL
参数类型:
BYTE,BYTE&
返回值:
无
功能:
解读报头信息,通过引用调用返回结果。
模块四:
函数名:
*getProcedence
参数类型:
BYTE
返回值:
字符型
功能:
解读IP首部协议信息,返回结果。
模块五:
函数名:
*getTOS
参数类型:
BYTE
返回值:
字符型
功能:
解读服务类型,返回结果。
模块六:
函数名:
getFlags
参数类型:
WORD,BYTE&,BYTE&
返回值:
无
功能:
解读IP首部标志,通过引用调用返回结果。
模块七:
函数名:
getFragOff
参数类型:
WORD,WORD&
返回值:
无
功能:
获得IP片偏移量,通过引用调用返回结果。
模块八:
函数名:
*getProtocol
参数类型:
BYTE
返回值:
字符型
功能:
获得协议与协议的字段值,返回结果。
模块九:
函数名:
ipparse
参数类型:
ofstream,char*
返回值:
无
功能:
将各种信息写入日志和屏幕输出
程序流程图
获得协议与协议的字段值
分析IP首部协议信息
设置各种配置
截获IP数据包
输出信息并写入日志
分析IP片偏移
分析服务类型
分析IP的版本信息
分析报头信息
分析IP首部标志
六、实验成绩评定方法
实验成绩总分以100分计,其中实验准备占30%,实验操作占40%,其它占30%。
八、实验报告要求
要求学生从实验方法的建立、实验步骤的设计、实验设备的选择、实验数据的处理、实验结果的分析讨论等方面写出报告。
报告包含:
1.系统概述运行环境编译使用方法实现环境程序文件列表等
2.主要数据结构
3.主要算法
4.遇到的问题及解决方法
5.体会与建议
6.可正确编译的可读性好的源代码
八、思考题
实验名称:
四、发现网络中的活动主机
实验类型:
综合性实验
实验类别:
基础□专业基础√专业□
实验学时:
2(4)
所涉及的课程及知识点:
计算机网络;差错控制和查询机制,ICMP协议,网卡的工作原理、局域网扫描器的工作原理。
一、实验目的
IP协议的优点是简洁,但缺少差错控制和查询机制,而网际控制报文协议(ICMP)具有补充IP功能的作用。
在网络经管中,常常要确定当前网络中处于活动状态的主机,这时可以通过使用ICMP的回送和回送响应消息来完成这项工作。
本课程设计的目的就是编制程序,利用ICMP数据包,发现指定网段中的活动主机。
通过本实验,使学生更加熟悉ICMP报文的结构,对ICMP协议有更好的理解和认识。
二、实验内容
设计程序,其功能是发送ICMP数据包,以获取指定网络中的活动主机,并将结果显示在规范输出上。
程序的具体要求如下:
l)用命令行形式运行:
scanhostStart_IPEnd_IP
其中scanhost为程序名;StartIP为被搜索网段的开始IP地址;End_IP为搜索网段的结束IP地址。
2)输出格式为:
活动主机1
活动主机2
┅┅
三、实验仪器设备和材料清单
要求:
具备网络环境并连入Internet,VC++
四、实验要求
课外必须预习,根据实验任务,查阅资料,进行理论分析和研究,确定实验技术方案,或根据规定的实验技术方案,确定实验步骤。
准备、编写实验程序,另安排了4学时的课外上机时间,学生可根据自己的实际情况,延长课外机时。
五、实验步骤
①创建套接字
②发送数据包
③分析数据包
主程序流程图
子程序流程图
开始
填充数据包
发送数据报
接收数据报
去掉IP报头
获取IP地址信息
数据包是否符合
输入数据报中的IP地址
结束
Y
N
六、实验成绩评定方法
实验成绩总分以100分计,其中实验准备占30%,实验操作占40%,其它占30%。
七、实验报告要求
要求学生从实验方法的建立、实验步骤的设计、实验设备的选择、实验数据的处理、实验结果的分析讨论等方面写出报告。
报告包含:
1.系统概述运行环境编译使用方法实现环境程序文件列表等
2.主要数据结构
3.主要算法
4.遇到的问题及解决方法
5.体会与建议
6.可正确编译的可读性好的源代码
八、思考题
实验名称:
实验五、简单的端口扫描
实验类型:
设计性实验
实验类别:
基础□专业基础√专业□
实验学时:
2(4)
所涉及的课程及知识点:
计算机网络;TCP/IP协议,Socket编程。
加深对TCP/IP协议的理解,熟悉Socket编程。
一、实验目的
二、实验内容
实现一个扫描器,必须能够完成以下所有功能:
使用TCPconnect、TCPSYN和TCPFIN进行端口扫描,使用ICMPecho扫描实现IP扫描。
并把扫描得知的结果记录下来。
本工程由一人完成。
使用端口扫描对一台主机进行扫描,并显示出结果(一台主机上有哪些端口是打开的)。
对一个网段进行IP扫描,显示出结果(一个网段内有哪些主机是开机的)。
三、实验仪器设备和材料清单
要求:
Windows或Linux环境下,具备局域网网络环境,VC++等。
四、实验要求
课外必须预习,根据实验任务,查阅资料,进行理论分析和研究,确定实验技术方案,或根据规定的实验技术方案,确定实验步骤。
准备、编写实验程序,另安排了4学时的课外上机时间,学生可根据自己的实际情况,延长课外机时。
友好的用户界面。
五、实验步骤
几种扫描方式提示:
TCPconnect()扫描:
这是最基本的TCP扫描。
操作系统提供的connect()系统调用,用来与每一个感兴趣的目标计算机的端口进行连接。
如果端口处于侦听状态,那么connect()就能成功。
否则,这个端口是不能用的,即没有提供服务。
这个技术的一个最大的优点是,你不需要任何权限。
系统中的任何用户都有权利使用这个调用。
另一个好处就是速度。
如果对每个目标端口以线性的方式,使用单独的connect()调用,那么将会花费相当长的时间,你可以通过同时打开多个套接字,从而加速扫描。
使用非阻塞I/O允许你设置一个低的时间用尽周期,同时观察多个套接字。
TCPSYN扫描:
这种技术通常认为是“半开放”扫描,这是因为扫描程序不必要打开一个完全的TCP连接。
扫描程序发送的是一个SYN数据包,好像准备打开一个实际的连接并等待反应一样(参考TCP的三次握手建立一个TCP连接的过程)。
一个SYN/ACK的返回信息表示端口处于侦听状态。
一个RST返回,表示端口没有处于侦听态。
如果收到一个SYN/ACK,则扫描程序必须再发送一个RST信号,来关闭这个连接过程。
TCPFIN扫描:
有的时候有可能SYN扫描都不够秘密。
一些防火墙和包过滤器会对一些指定的端口进行监视,有的程序能检测到这些扫描。
相反,FIN数据包可能会没有任何麻烦的通过。
这种扫描方法的思想是关闭的端口会用适当的RST来回复FIN数据包。
另一方面,打开的端口会忽略对FIN数据包的回复。
这种方法和系统的实现有一定的关系。
有的系统不管端口是否打开,都回复RST,这样,这种扫描方法就不适用了。
这种方法在区分Unix和NT时,是十分有用的。
ICMPEcho扫描:
使用ICMPRequest数据包来判断在一个网络上主机是否开机。
如果主机开机,则会回复ICMPEcho数据包。
否则得不到回复。
六、实验成绩评定方法
实验成绩总分以100分计,其中实验准备占30%,实验操作占40%,其它占30%。
七、实验报告要求
要求学生从实验方法的建立、实验步骤的设计、实验设备的选择、实验数据的处理、实验结果的分析讨论等方面写出报告。
报告包含:
7.系统概述运行环境编译使用方法实现环境程序文件列表等
8.主要数据结构
9.主要算法
10.遇到的问题及解决方法
11.体会与建议
12.可正确编译的可读性好的源代码
八、思考题
在使用ICMPEcho扫描时,要求程序能够判断接收到的数据包是否是对本进程发出的数据包的响应。
请思考为什么要这样做?
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 TCP 客户端 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)