计算机网络(谢希仁)-实验指导书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
前导实验添加常用服务以及设置网络属性 (1)
实验一制作双绞线RJ-45接头 (5)
实验二小型局域网的组建 (6)
实验三以太网帧的构成 (8)
实验四地址解析协议ARP (10)
实验五 INTERNET控制报文协议 (11)
实验六路由信息协议RIP (13)
实验七网际协议IP (14)
实验八 TCP、UDP和端口扫描 (16)
附录: IIS之常见问题解答 (26)
前导实验添加常用服务以及设置网络属性
一、常用服务简介
1、DNS(Domain Name System):域名系统。
它为Internet(因特网)上的计算机提供名称(即如“.abc.”的域名)到地址(即如
“192.168.0.48”的IP地址)的映射服务以用于域名解析。
2、IIS(Internet Infomation Server):Internet信息服务。
它是一种Web服务,主要包括WWW服务器、FTP服务器等。
它使得在Intranet(局域网)或Internet(因特网)上发布信息很容易。
Windows 2000 Advanced Server上提供的为IIS 5.0。
3、DHCP(Dynamic Host Configure Protocol):动态主机配置协议。
它是设计用于简化管理地址配置的TCP/IP标准。
它使用服务器集中管理 IP 地址以及在您的网络上使用的其他相关配置(比如网关、DNS服务器等)的详细信息。
二、添加DNS、IIS和DHCP服务
1、添加IIS。
选“控制面板→添加/删除程序→添加/删除Windows组件→Internet信息服务→全选”。
2、添加DHCP和DNS。
选“控制面板→添加/删除程序→添加/删除Windows组件→网络服务→选中:动态主机配置协议DHCP→选中:域名服务系统DNS”。
3、添加成功后,不需重新启动,即可在“开始→程序→管理工具”中看到并使用相关服务。
如下图:
三、网络属性设置
要使用以上所述服务,本机必须要有静态
(即固定)的IP地址。
如果只是在局域网中
使用,原则上可用任意的IP地址,最常用的
是“192.168.0.1”到“192.168.0.254”围的
任意值。
欲为网卡绑定静态IP地址,按如下操作:
1、打开网络属性设置窗口:即TCP/IP属性设置窗口。
选“控制面板→网络和拨号连接→本地连接→属性→Internet协议(TCP/IP)→属性”。
2、为网卡绑定第一个IP地址:此IP同时也将成为本机的默认IP地址。
选“使用下面的IP地址”,在“IP地址”一栏输入“192.168.0.48”;子网掩码一栏输入“255.255.255.0”;如果本机同时又是本网的服务器,则“默认网关”和“首选DNS服务器”两栏也均填入此默认IP地址;如果本机不是本网的服务器,则一般“默认网关”和“备用DNS服务器”两栏的值为服务器的IP地址,而“首选DNS服务器”仍然为本机的默认IP地址。
本文假设本机为本网的服务器,如下图:
3、为网卡绑定更多的IP地址:在上步中选“高级”,再选“添加”,然后输入第二个IP地址“192.168.0.49”,其相应的子网掩码
“255.255.255.0”系统会自动填充;增加更多的IP地址方法相同。
如下图:
4、全部设置完成后,不需重新启动,退出此网络属性设置窗口后,所设即生效!
五、网络属性设置后的验证
为了测试所进行的设置是否成功,可采用如下常用方法:
1、进入MSDOS方式:选“开始→运行”,输入“cmd”再“确定”。
2、查看本机所配置的IP地址:输入“ipconfig”再回车,即可看到相关配置。
如下图:
3、也可以通过输入“ping 192.168.0.48”的格式来进行验证。
实验一制作双绞线RJ-45接头
实验目的:
1.掌握直通连接网线和交叉连接网线接头的制作
2.掌握网络测试仪的使用
实验设备:
EIA/TIA-568标准5类UTP,RJ-45水晶头,双绞线网钳,网络测试仪
实验步骤:
(一)直通连接网线的RJ-45接头的制作
1.使用双绞线网钳的剪切口剪齐一段UTP电缆两段
2.使用双绞线网钳的剥线口剥除双绞线外皮,露出4对裸线
3.将4对裸线分别捋平,排列整齐,颜色按照EIA/TIA-568 –A标准排列:
568A标准排列:白橙、橙、白绿、蓝、白蓝、绿、白棕、棕
4.使用双绞线网钳的剪切口把参差不齐的8根裸线剪齐
5.将RJ-45接头弹片朝下,把整齐的8根裸线插入其中,使得8根裸线的横切面紧贴RJ-45接头的底面
6.将RJ-45接头插入双绞线网钳的压线口,用力握紧手柄
7.制作另一端(重复第2步到第6步)
8.利用网络测试仪测试,若发现灯发绿光,并且发光的顺序是12,36,45,78,则实验成功,否则失败。
(二)交叉连接网线的RJ-45接头的制作
网线一端的接头制作与上相同,另一端的接头制作应按照568-B标准的要求制作。
568B标准排列:白绿、绿、白橙、蓝、白蓝、橙、白棕、棕
网线接头制作完毕后,若发现灯发绿光,并且发光的顺序是36,12,45,78,则实验成功,否则失败。
附录:
直通连接网线用作连接HUB和计算机
交叉连接网线接头用作两台计算机对联
实验二小型局域网的组建
实验目的:
1.掌握局域网的组建过程
2.熟悉网络互连设备的使用
实验设备:
集线器,N台计算机,N条双绞线,网络测试仪
实验步骤:
1.用网络测试仪测试每条双绞线是否已经制作成功
2.用经过测试无误的双绞线将每台计算机和HUB相连
3.打开计算机电源,打开HUB电源
4.在TCP/IP属性中指定每台计算机的IP地址、子网掩码
例如,有4台计算机互连时,我们可以设定:
1#的IP地址: 192.168.2.1 1#的子网掩
码:255.255.255.0
2#的IP地址: 192.168.2.2 2#的子网掩
码:255.255.255.0
3#的IP地址: 192.168.2.3 3#的子网掩
码:255.255.255.0
4#的IP地址: 192.168.2.4 4#的子网掩
码:255.255.255.0
5.重启所有的计算机
6.使用DOS命令,测试N台计算机是否从物理上已经连通
例如:在1#上的DOS提示符下,键入PING 192.168.2.2按回车。
若出现如下提示,则1#和2#之间必然已经连通。
PING 192.168.2.2 WITH 32 BYTES OF DATA:
Reply from 192.168.2.2: bytes=32 time<10ms TTL=128 Reply from 192.168.2.2: bytes=32 time<10ms TTL=128
Reply from 192.168.2.2: bytes=32 time<10ms TTL=128
Reply from 192.168.2.2: bytes=32 time<10ms TTL=128
Ping statistics for 192.168.2.2:
Packets:sent =4,received =4,lost =0(0% loss)
Approximate round trip times in milli-seconds:
Minimum=0ms,maximum=1ms,average=0ms
若出现有提示: Request timed out ,则1#和2#之间没有连通.
实验三以太网帧的构成
实验目的:
1.掌握以太网报文格式;
2.掌握MAC地址的作用;
3.掌握LLC帧报文格式;
4.掌握仿真编辑器和协议分析器的使用方法;
实验设备:
集线器,N台计算机,N条双绞线,协议仿真系统实验步骤:
1.将服务器和工作站用双绞线和HUB连通并加载协议仿真模块
2.将主机A和B作为一组,主机A启动仿真编辑器,并编写一个LLC 帧。
3.主机B重新开始捕获数据,在捕获到的数据中查找主机A所发送的LLC帧,分析该帧容并纪录结果。
•记录实验结果。
1.为什么IEEE802标准将数据链路层分割为MAC子层和LLC子层?
2.为什么以太网有最短帧长度的要求?
补充:以太网的分类
最初的以太网是由施乐公司的Palo Alto研究中心(PARC)于1976年创建的。
自此以后,逐渐发展。
数据速率为10Mbps的以太网称为标准以太网,数据速率为100Mbps的以太网称为快速以太网,数据速率为1000Mbps 的以太网称为千兆以太网。
目前10G以太网的标准也已正式制定。
网卡MAC地址的概念
MAC(Media Access Control, 介质访问控制)地址是识别LAN(局域网)节点的标识。
网卡的物理地址通常是由网卡生产厂家烧入网卡的EPROM,它存储的是传输数据时真正赖以标识发出数据的电脑和接收数据的主
机的地址。
对于著名的以太网卡,其地址是48bit(比特位)的整数,如:44-45-53-54-00-00, IEEE规定地址字段的第一字节的最低位为I/G比特,
I/G表示Individual/Group。
当I/G比特为0时,地址字段表示一个单个站地址,为1时表示组地址,用来进行多播。
IEEE将地址字段第1字节的最低第2位规定为G/L比特,表示Global/Local。
当G/L比特为1时是全球管理(保证在全球没有相同的地址),厂商向IEEE购买的OUI都属于全球管理,当为0时是本地管理,这时用户可任意分配网络上的地址。
但应当指出,以太网几乎不使用这个G/L比特。
以太网MAC地址可分为三类: 单播(unicast)地址(一对一),即收到的帧的MAC地址与本站的硬件地址相同;广播(broadcast)地址(一对全体),即发送给所有站点的帧(全1地址)。
多播(multicast)地址(一对多),即发送给一部分站点的帧。
以太网的MAC帧格式
以太网的MAC帧格式有两种标准,一种是DIX Ethernet V2标准,另一种是IEEE的802.3标准。
但两种帧格式可以在同一以太网络共存。
两种帧格式都具有7个域:前导码、帧首定界符、目的地址、源地址、长度/类型、数据、帧校验序列。
如下图所示。
实验四地址解析协议ARP
实验目的:
1.掌握ARP协议的报文格式
2.掌握ARP协议的工作原理
3.理解ARP高速缓存的作用
实验设备:
多台计算机,HUB,双绞线,协议仿真模块
实验容及步骤:
1.主机B启动静态路由服务;
2.主机A、B、C、D、E、F在命令行下运行“arp -a”命令,察看ARP高速缓存表;
3.主机A、B、C、D启动协议分析器,打开捕获窗口进行数据捕获并设置过滤条件(提取ARP、ICMP);
4.主机A、B、C、D在命令行下运行“arp -d”命令,清空ARP高速缓存;
5.主机A ping 主机D;主机A、B、C、D停止捕获数据,并立即在命令行下运行“arp -a”命令察看ARP高速缓存。
补充:ARP协议简介
Internet是由各种各样的物理网络通过使用诸如路由器之类的设备连接在一起组成的。
当主机发送一个数据包到另一台主机的过程中可能要经过多种不同的物理网络。
主机和路由器都是在网络层通过IP地址来识别的,这个地址是在全世界唯一的。
然而,数据包是通过物理网络传递的。
在物理网络中,主机和路由器通过其MAC地址来识别的,其围限于本地网络中。
MAC地址和IP地址是两种不同的标识符。
这就意味着将一个分组传递到一个主机或路由器需要进行两级寻址:IP和MAC。
需要能将一个 IP地址映射到相应的MAC地址。
ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。
所谓“地址解析”就是主机在发送帧前将目标网络层地址转换成目标物理地址的过程。
在使用TCP/IP协议的以太网中,即完成将IP地址映射到MAC地址的过程——使用ARP协议通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
实验五 Internet 控制报文协议
实验目的:
1.掌握ICMP协议的报文格式
2.理解不同类型ICMP报文的具体意义
3.了解常见的网络故障
实验设备:
多台计算机,HUB,双绞线,协议仿真模块
实验容及步骤:
1.主机B启动静态路由服务;
2.主机B、E、F启动协议分析器,打开捕获窗口进行数据捕获并设置过
滤条件(提取ICMP协议);
3.主机A ping主机E;主机B、E、F停止捕获数据,察看捕获到的数
据。
思考题:
1.为什么要限制由失效的ICMP差错报文再产生一个ICMP报文?
2.主机A向主机B发送数据报。
主机B从未收到该数据报,而主机A也从
未收到出问题的通知。
试给出可能发生的情况的两种不同解释。
3.试用表说明,什么样的ICMP报文是由路由器发送出的,什么样的ICMP
报文是由非目的主机发送出的,以及什么样的ICMP报文是由目的主机发送出的。
补充:ICMP简介
IP协议是一种不可靠无连接的包传输,当数据包经过多个网络传输后,可能出现错误、目的主机不响应、包拥塞和包丢失等。
为了处理这些问题,在IP层引入了一个子协议ICMP(Internet Control Message Protocol)。
ICMP数据报有两种形式:差错数据报和查询数据报。
ICMP 数据报封装在IP数据报里传输。
ICMP报文可以被IP协议层、传输层协议(TCP或UDP)和用户进程使用。
ICMP与IP一样,都是不可靠传输,ICMP的信息也可能丢失。
为了防止ICMP信息无限制的连续发送,对ICMP数据报传输中问题不能再使用ICMP传输。
查询报文是成对出现的,它帮助主机或网络管理员从一个路由器或另一个主机得到特定的信息。
•差错报告报文
IP是不可靠的协议。
这就表示IP是不考虑处理检验和差错控制的。
ICMP就是为补偿这个缺点而设计的。
然而ICMP不能纠正差错;它只是报告差错。
差错纠正留给高层协议去做。
差错报文总是发送给原始的数据源,因为在数据报中关于路由惟一可用的信息就是源IP地址和目的IP地址。
ICMP使用源IP地址将差错报文发送给数据报的源端。
关于ICMP差错报文有以下的一些要点:
1.对于携带ICMP差错报文的数据报,不再产生ICMP差错报文。
2.对于分段数据报,如果不是第一个分段,则不产生ICMP差错报
文。
3.对于具有多播地址的数据报,不产生ICMP差错报文。
4.对于有特殊地址(如127.0.0.0或0.0.0.0)的数据报,不产生
ICMP差错报文。
实验六路由信息协议RIP
实验目的:
1.掌握路由协议的分类
2.理解静态路由和动态路由
3.掌握动态路由协议RIP的报文格式,工作原理及工作过程
4.掌握RIP计时器的作用
5.理解RIP的稳定性
实验设备:
多台计算机,HUB,双绞线,协议仿真模块
实验容及步骤:
1.主机A、B、C、D、E、F在命令行下运行“route print”命令,察看路由表;
2.将主机A的默认网关设为172.16.0.1。
3.用主机A依次ping 主机B(192.168.0.2)和主机C
(192.168.0.3),观察现象,记录结果。
4.在主机A和主机B的命令行下运行route print命令,察看路由表;
5.从主机A依次ping 主机B(192.168.0.2)、主机E
(192.168.0.1)、主机E(172.16.1.1),观察现象,记录结果。
6.通过在命令行下运行route print命令,察看主机B和主机E路由表。
思考题:
1.RIP使用UDP,这样做有何优点?
2.条数限制如何缓解RIP的问题?
3.试列举RIP的缺点及其相应的补救办法。
实验七网际协议IP
实验目的:
1.掌握IP数据报的报文格式
2.掌握IP校验和计算方法
3.掌握子网掩码和路由转发
4.理解特殊IP地址的含义
5.理解IP分片过程
实验设备:
多台计算机,HUB,双绞线,协议仿真模块
实验容及步骤:
1.主机A启动仿真编辑器,编辑一个IP数据报,其中:
MAC层:
目的MAC地址:主机B的MAC地址(对应于172.16.1.1接口的MAC)。
源MAC地址:主机A的MAC地址。
协议类型或数据长度:0800。
IP层:
总长度:IP层长度。
生存时间:128。
源IP地址:主机A的IP地址(172.16.1.2)。
目的IP地址:主机E的IP地址(172.16.0.2)。
校验和:在其他所有字段填充完毕后计算并填充。
IP在计算校验和时包括那些容?
【说明】先使用仿真编辑器的“手动计算”校验和,再使用仿真编辑器的“自动计算”校验和,将两次计算结果相比较,若结果不一致,则重新计算。
;
2.在主机B(两块网卡分别打开两个捕获窗口)、E上启动协议分析器,设置过滤条件(提取IP协议),开始捕获数据。
思考问题
1. 试说明IP地址与硬件地址的区别。
为什么要使用这两种不同的地址?
2.不同协议的MTU的围从296到65535。
使用大的MTU有什么好处?使用小的MTU有什么好处?
3.IP数据报中的首部检验和并不检验数据报中的数据。
这样做的最大好处是什么?坏处是什么?
补充:IP(网际协议)简介
IP是TCP/IP协议族中最为核心的协议。
所有的TCP、UDP、ICMP及IGMP 数据都以IP数据报格式传输。
IP协议提供不可靠、无连接的数据报传送服务,即它对数据进行“尽力传输”,只负责将分组发送到目的主机,不管传输正确与否,不作验证、不发确认、也不保证IP数据报到达顺序,将纠错重传问题交由传输层来解决。
实验八 TCP、UDP及端口扫描
实验目的:
1.掌握TCP、UDP协议的报文格式
2.了解常用的TCP、UDP端口扫描的原理及其各种手段
3.增强网络安全意识
实验设备:
多台计算机,HUB,双绞线,协议仿真模块
实验容及步骤:
练习一:
主机B、C、D启动协议分析器进行数据捕获,并设置过滤条件(提取TCP 协议)。
主机A启动仿真编辑器,进入TCP连接视图。
在“服务器信息/IP地址”中填入主机C的IP地址;使用“端口扫描”获取主机C的TCP端口列表,在“服务器信息/端口”中填入主机C的一个TCP端口(大于1024);点击“连接”按钮进行连接。
察看主机B、C、D捕获的数据,填写下表。
TCP连接建立时,前两个报文的首部都有一个“maximum segment size”字段,它的值是多少?作用是什么?结合IEEE802.3协议规定的以太网最大帧长度分析此数据是怎样得出的。
练习二:编辑并发送UDP数据报
本练习将主机A和B作为一组,主机C和D作为一组,主机E和F作为一组。
现仅以主机A和B为例,说明实验步骤。
1. 主机A打开协议仿真编辑器。
编辑发送给主机B的UDP数据报。
MAC层:
目的MAC地址:接收方MAC地址。
源MAC地址:发送方MAC地址。
协议类型或数据长度:0800,即IP协议。
IP层:
总长度:包括IP层、UDP层和数据长度。
高层协议类型: 17,即UDP协议。
首部校验和:其他所有字段填充完毕后填充此字段。
源IP地址:发送方IP地址。
目的IP地址:接收方IP地址。
UDP层:
有效负载长度:UDP层及其上层协议长度。
计算校验和,其他字段默认.
UDP在计算校验和时包括那些容?
2. 在主机B上启动协议分析器,并设置过滤条件(提取UDP协议)开始捕获数据。
3. 主机A发送已编辑好的数据报。
4. 主机B停止捕获数据,在捕获到的数据中查找主机A所发送的数据报。
练习三:TCP Connect扫描
1. 在主机B上启动协议分析器进行数据捕获,并设置过滤条件(提取TCP协议)。
2. 在主机A上使用TCP连接工具,扫描主机B的某一端口:
a. 主机A上填入主机B的IP、主机B的某一开放端口号,点击“连接”按钮进行连接。
b. 观察提示信息,是否连接上。
c. 主机A点击“断开”按钮断开连接。
d. 主机A使用主机B的某一未开放的端口重复以上试验步骤。
3. 察看主机B捕获的数据,分析连接成功与失败的数据包差别。
结合捕获数据的差别,说明TCP Connet扫描的实现原理。
实验九 PING实现
实验目的:
1. 加深对ICMP协议的理解
2. 掌握原始套接字进行网络程序设计的方法
实验设备:
多台计算机,HUB,双绞线,协议仿真模块
实验容及步骤:
本练习将主机A和B作为一组,主机C和D作为一组,主机E和F作为一组。
1.需求分析
2.使用原始套接字实现ping命令的功能(程序语言不限,应用程序采用控
制台、GUI方式均可)。
•可以指定发送报文数。
•可以指定发送报文长度。
•可以指定发送报文的TTL值。
3.代码实现。
按需求编写程序代码。
4.执行程序,检验程序的正确性。
•启动协议分析器捕获数据。
•运行已编译好的程序,ping对方IP。
•察看运行结果,分析捕获的数据
核心代码:
/*
* 文件: ping.cpp
* 描述:ping示例程序,控制台应用程序
* 时间:2006.3.1
*/
#include <iostream>
using namespace std;
#pragma comment( lib, "ws2_32.lib" )
void Usage( void ) //用法
{
cout << "**************************************" << endl;
cout << "----------用法------------------------" << endl;
cout << "程序名目标IP(主机名) [包大小] [生存期] [包个数]" << endl;
cout << "ping 127.0.0.1 4 128 4 " << endl; cout << "ping 127.0.0.1 4 128 " << endl; cout << "ping 127.0.0.1 4 " << endl; cout << "ping 172.0.0.1 " << endl;
cout << "************************************** " << endl;
}
int _tmain( int argc, _TCHAR* argv[ ] )
{
int nNumber = 4; //默认发送报文数
int nSize = 32; //报文长度
int nTTL = 128; //生存时间
int nRecvNum = 0; //接受报文数
hostent *hp = NULL;
sockaddr_in sockSend;
int uAddr = 0;
CICMP MyIcmp;
//初始化Winsock
MyIcmp.Initialize( );
//解析主机
hp = gethostbyname( argv[ 1 ] ); //是否输入主机名
if ( hp == NULL )
{
uAddr = inet_addr( argv[ 1 ] ); //输入IP地址
sockSend.sin_addr.S_un.S_addr = uAddr;
}
if (( hp == NULL ) && ( uAddr == INADDR_NONE ))
{
cout << "Unknow host " << argv[ 1 ] << endl;
return 2;
}
if ( hp != NULL )
{
memcpy( &( sockSend.sin_addr ), hp->h_addr, hp-
>h_length );
uAddr = sockSend.sin_addr.S_un.S_addr;
}
for ( int i = 0; i < nNumber; i++ )
{
MyIcmp.RecvICMP( ) ;
cout<<MyIcmp.GetMsg( ); //输出接收信息
Sleep( 1000 ); //延迟1秒钟
}
return 0;
}
ICMP类:
/*
* 文件: icmp.h
* 描述:CICMP class
* 时间:2006.3.1
*/
struct IP_Header
{
unsigned int HeaderLength:4; //IP首部长度
unsigned int Version:4; //协议版本
unsigned char TOS; //服务类型
unsigned short TotalLength; //数据长度
unsigned short ID; //标识
unsigned short mflag; //其它标记
unsigned char TTL; //生命期
unsigned char Protocal; //协议
unsigned short CheckSum; //检验和
unsigned int SourceIPAddress; //源IP地址
unsigned int DestIPAddress; //目的IP地址};
//ICMP数据结构
struct ICMP_Header
{
unsigned char type; //类型
unsigned char code; //编码
unsigned short cksum; //检查和
unsigned short ID; //标识
unsigned short number; //计数值
unsigned int time; //时间
};
class CICMP
{
public:
CICMP( UINT uPacSize = DEF_PACKET_SIZE,
int nTTL = DEF_TTL );
BOOL Initialize( void ); //初始化
USHORT CheckSum( USHORT *pBuffer, int nSize ); //检查和
BOOL SendICMP( int nMsg, char * pAddr) ; //发送报文
BOOL SendICMP( int nMsg, SOCKADDR_IN *pAddr ); //发送报文
BOOL RecvICMP( void ); //接收报文
//设置包大小和生存期
private:
char *m_pSendBuffer; //发送存数据区
char *m_pRecvBuffer;
IP_Header *m_pIPHeader; //IP数据头(接收)
ICMP_Header *m_pIcmp; //ICMP数据头(发送或接收)
SOCKET m_Sock; //套接字标识
SOCKADDR_IN m_SockAddr;
UINT m_uPacketSize; //指定发送报文长度
};
//***************************************************************** //Icmp.cpp
//ping类的实现文件
//Winsock初始化
BOOL CICMP::Initialize( void )
{
int nLen = m_uPacketSize + sizeof( ICMP_Header );
m_pSendBuffer = ( char* )xmalloc( nLen ); //申请发送存空间
m_pRecvBuffer = ( char* )xmalloc( MAX_PACKET_SIZE ); //申请接收存空间
//初始化Socket2.1
WORD wVersionRequested;
int err;
int nTimeOut = TIMEOUT; //设置超时时间
wVersionRequested = MAKEWORD( 2, 1 );
//初始化Winsock
err = WSAStartup( wVersionRequested, &wsaData );
//建立原始套接字
m_Sock = WSASocket( AF_INET,
SOCK_RAW,
IPPROTO_ICMP,
NULL,
0,
0 );
//设置超时时间
setsockopt( m_Sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&nTimeOut, sizeof( nTimeOut ));
setsockopt( m_Sock, SOL_SOCKET, SO_SNDTIMEO,
( char* )&nTimeOut, sizeof( nTimeOut ));
}
//***********************************
//计算校验和
USHORT CICMP::CheckSum( USHORT *pBuffer, int nSize )
{
unsigned long cksum = 0;
while ( nSize > 1)
{
cksum += *(pBuffer++);
nSize -= sizeof( USHORT );
}
if ( nSize >0 )
{
cksum += *( UCHAR* )pBuffer;
}
cksum = ( cksum >> 16) + ( cksum & 0xffff );
cksum += ( cksum >> 16 );
return ( USHORT )( ~cksum );
//发送ICMP数据包
BOOL CICMP::SendICMP( int nMsg, sockaddr_in *pAddr )
{
char *p_data;
int state; //发送数据状态
pAddr->sin_family = AF_INET;
pAddr->sin_port = 0;
int nICMPLen = sizeof( ICMP_Header ); //ICMP头长度
memset( m_pSendBuffer, 0, m_uPacketSize + nICMPLen ); //用0填充存区
//填充ICMP数据各项
m_pIcmp = ( ICMP_Header* )m_pSendBuffer;
m_pIcmp->type = nMsg;
m_pIcmp->code = 0;
m_pIcmp->ID = ( USHORT )GetCurrentProcessId( ); //获取进程ID
m_pIcmp->number = AddNum( );
m_pIcmp->time = GetTickCount( );
m_pIcmp->cksum = 0;
//填充数据区
p_data = (( char*)m_pIcmp + nICMPLen );
memset(( char* )p_data,'E',m_uPacketSize ); //可以添任意字符
//填充检查和项
m_pIcmp->cksum = CheckSum(( USHORT* )m_pIcmp, m_uPacketSize + nICMPLen );
//发送数据
state = sendto( m_Sock,
(char *)m_pIcmp,
m_uPacketSize + nICMPLen,
NULL,
(sockaddr*)pAddr,
sizeof( sockaddr ));
return TRUE;
//接收数据
BOOL CICMP::RecvICMP( void )
{
//接收数据
int state; //定义状态(接受数)
int len = sizeof(sockaddr_in);
m_pIPHeader = NULL;
m_pIcmp = NULL;
//接收IP数据包
state = recvfrom( m_Sock,
m_pRecvBuffer,
MAX_PACKET_SIZE,
0,
(sockaddr*)&m_SockAddr,
&len );
//分析数据
m_pIPHeader = ( IP_Header* )m_pRecvBuffer;
int nIPHeaderLen = 0;
nIPHeaderLen = m_pIPHeader->HeaderLength * 4 ; //读取IP头长度
//读取ICMP数据
m_pIcmp = ( ICMP_Header* )( m_pRecvBuffer + nIPHeaderLen );
char * addr;
addr = inet_ntoa( m_SockAddr.sin_addr );
sprintf( m_szMsg, "Reply from %s: bytes=%d time=%d TTL=%d Num=%d \n",
addr,
state - 32, /* 去掉IP、ICMP头 */
GetTickCount( ) - m_pIcmp->time,
m_pIPHeader->TTL,
m_pIcmp->number );
return TRUE;
}
附录: IIS之常见问题解答
1、问:我的机器拥有多个IP地址,它们对应各自的域名,如何建立指向不同目录的多个WWW站点?
答:你需要分别将各个Web站点的“Web站点”选项中的“IP地址”指向不同的IP,再将“主目录”中的路径选不同的目录即可。
2、问:我的计算机拥有多个IP地址,它们对应各自的域名,如何建立指向同一个目录的一个WWW站点?
答:可以建立多个Web站点,选不同的IP,再将“主目录”中的路径指向同一个目录即可;也可使用其他程序(比如ASP)的相应语句来实现。
3、问:我的计算机只拥有一个IP地址,我已在DNS中将多个域名指向了它,如何建立指向同一个目录的一个WWW站点?
答:只需建立一个Web站点,选这个IP地址即可。
4、问:我的计算机只拥有一个IP地址,我已在DNS中将多个域名指向了它,如何建立指向不同目录的多个WWW站点?
答:IIS 5.0能很好地支持一个IP地址对应多个独立的域名,这可以通过两种方法来实现:
(1)设不同的TCP端口号:你需要分别将各个Web站点的“Web站点”选项中的“TCP端口”指向不同的端口号,再将“主目录”中的路径选不同的目录即可。
调用格式如“.abc.:99”。
(2)设不同的主机头名:你需要分别将各个Web站点的“Web站点→高级→编辑”中的“主机头名”一项填入不同的域名,再将“主目录”中的路径选不同的目录即可。
调用格式如“.bbc.”。
5、问:如何限制到每个Web站点的最接数?
答:选“Web站点”选项,将其中的“限制到xxx连接”中的“xxx”改成需要值即可。
6、问:如果当没有“默认文档”存在时就显示出所调用目录的目录和文件列表?
答:选“主目录”选项,将“目录浏览”选中即可。
7、问:当所调用的页面不存在或有其他错误时,我怎么做才能显示我希望显示的提示容?
答:进入“\WINNT\help\iisHelp\common”目录,其中“400.htm”就是当所调用页面不存在时所出现的错误提示页面,将它编辑成你需要容即可;其他提示信息也可通过此办法进行修改。
8、问:如何只允许授权的用户访问我的站点?
答:选“目录安全性”选项,再选“匿名访问和验证控制”,然后选“编辑”,把“匿名访问”前的勾去掉,则用户访问时就必须输入相应的用户名和密码(均为2K的用户库中的授权用户)才能进入!或者选“IP地址及域名限制”,将“编辑”中添加只允许(或拒绝)访问的计算机的IP地址即可。
9、问:我用除匿名和管理员之外的其他用户登录FTP时,总不能成功。
为什么?
答:可能的原因是:
(1)用户的过了有效期,需重设有效期。
(2)建立用户时选了“用户下次登录时必须更改密码”,需重此项去掉,再将“密码永久有效”选中。
(3)用户不具备在本机登录的权限,需将它加入以下三个组“Administrator”、“Power Users”和“Backup Operators”中的一个里面去;或运行“gpedit.msc”,依次选“计算机配置→Windows设置→安全设置→本地策略→用户权利和指派”,然后在右边面板中双击“在本机登录”将用户名“添加”进去即可。
(4)密码不正确,需改正。
10、如何拒绝FTP用户的匿名连接?
答:选FTP站点的“安全”,将“允许匿名连接”前的小勾去掉即可
11、问:当在浏览器中输入“IP地址”和输入“IP地址/”有什么差别吗?它们会做什么?
答:没有差别!前一种格式浏览器也会自动在后面加上“/”!它们的意思都是“依次”去查找并调用相应“主目录”下的“默认文档”。
另,本题中的“IP地址”也可为“域名”;道理完全一样。
12、问:做网页时,输入用“IP地址”和输入“IP地址”是否一样?
答:一般来说输入两种格式都可以,但实际上它们是有区别的。
在有些较特殊格式的网页里,加“”和不加是截然两回事!在那些地方,第一种格式
被看作了“当前目录”下的一个目录;第二种格式才把它看成了从别的“根目录”下开始的一个单独的。
因此,为保险起见,建议在网页中要到其他站点时,均在相应的域名(或IP地址)前加上“”!
13、问:为什么我在“Internet 信息服务”(IIS管理器)中,“默认web站点”没有设定IP地址时,用“localhost/”访问一切正常,但用“127.0.0.1/”访问就会弹出用户名,密码,域验证窗口。
答:正常现象!此时无论你用“localhost”或是“wy”(本机名)都可以看见有容,但这容实际上是IIS5.0的帮助页。
出于安全性或其他方面的考虑,系统默认的是主机名(包括localhost和你安装时输入的计算机名)可以,而IP地址则必须用户名和密码——此时输入“Administrator”和相应密码即可。
14、问:我在IIS管理器的“默认Web站点”中,为它指定了IP地址(如“192.168.0.1”)后,“localhost/”和“httP://127.0.0.1/”均不能用;“192.168.0.1/”却弹出验证窗口!为什么?
答:为了能更清楚地了解个中原因,一步一步地来进行分析:
①此时打开浏览器,输入IP地址再回车,就会发现它会叫你输入用户和密码,此时输入管理员的用户名和密码即可进入;然后再用此IP后面加一个“win2000.gif”的文件名(如“192.168.0.1/win2000.gif”的格式),就会惊奇地发现,一个图片出现了,而并不需要用户输入其他什么!
为什么这样呢?(顺便说一句,此时“wy”是可以用的,不需密码。
)
②请接着进入IIS管理器中,选“默认web站点→右键→属性→文档”,你就可以看到“默认文档”有三个,依次是“default.htm”、“default.asp”、和“iisstart.asp”;你再进到“主目录”一项,它对应的是“D:\Inetpub\wwwroot”;然后再打开“我的电脑”,进入
“D:\Inetpub\wwwroot”目录,其下的众多文件中,“iisstart.asp”和“win2000.gif”也豁然在目!
原来,当你在浏览器中,如果只输入相应的IP地址(或域名),它会自动在其对应的“主目录”下去寻找“默认文档”,于是调用了
“iisstart.asp”这个文件,而此文件本身需要用户名和密码才能进入;当你后面跟指定的文件名时“win2000.gif”,它就会去只寻找并调用此文件,而此图片文件并未加密,所以不需密码什么的即顺利进入!。