实 验 十三 RawSock 编程
13.1 实验目的
本实验内容是利用 windows 平台的 WinpCap 开发包开发 RawSock 通信应用,它能基于
IP 等网络设计较具难度的网络层通信应用,程序通过封装 Ping 功能网络包说明原始套接字的
使用。
13.2 实验内容
13.2.1 原始套接字介绍
创建 Socket 对象时使用到两个枚举,ProtocolType 枚举指示在创建 Socket 对象时的协议,
包括:IP、Icmp、Tcp、Udp、Ipx 等。SocketType 枚举指示在创建 Socket 对象时的类型,包
括:Stream、Dgram、Raw、Seqpacket、Unknown。流式套接字 (Stream) 对应于网络协议中的
TCP 通信,数据报套接字 (Dgram) 对应网络协议中的 UDP 通信,TCP 和 UDP 是传输层的
网络协议。原始套接字 (Raw) 工作在网络层,它能构造网络层的多种协议,如 IP 协议,ICMP
协议,IGMP 协议等可以使用原始套接字来实现很多功能,原始套接字主要用于一些协议的开
发,可以进行比较底层的操作,比如最基本的数据包分析,主机嗅探等,也可以使用原始套接
字作一个自定义的传输层协议。原始套接字的功能强大,编写的难度也比流式套接字和数据报
套接字大。原始套接字的创建方法与流式或数据报的套接字创建的方法是一致的,下面即是创
建用于 ICMP 协议的套接字对象。
Socket socket =new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);
其中 SocketType.Raw 参数指明要创建是原始套接字对象,ProtocolType.Icmp 参数指明
Socket 支持的协议是网际组管理协议 (ICMP)。
13.2.2 Ping 类的使用
应用程序可以使用 Ping 类检测是否可访问远程计算机。Ping 类尝试将 Internet 控制消息
协议 (ICMP) 回送请求发送到远程计算机并接收该计算机通过 ICMP 回送答复消息返回的信
息。Ping 类使用 PingReply 类的实例返回有关操作的信息,如操作状态以及发送请求和接收答
复所用的时间。Pint 类的 Send 和 SendAsync 方法将 Internet 控制消息协议 (ICMP) 回送请求
消息发送到远程计算机并等待来自该计算机的 ICMP 回送答复消息。Send 是同步方法直接返回
PingReply 类的实例,SendAsync 是异步方法,当异步操作完成时,它会引发 PingCompleted 事
件,在 PingCompletedEventHandler 方法的 PingCompletedEventArgs 参数中返回 PingReply,
1