网络通信编程 原始套接字程序设计

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

➢SO_BROADCAST
选项值类型 bool
获取/设置 均可
Winsock版本 1+
说明
如果指定的套接字已经配置成收发广播数 据,对这个套接字选项进行查询,就会返 回TRUE。随SO_BROADCAST一起使用 setsockopt,便可在这个套接字上启用广播 通信功能。
对于非SOCK_STREAM类型的所有套接字
在TIME_WAIT状态的地址绑定到一起
监听套接字例外。两个独立的套接字不可与同一个本地地址绑 定到一起,以等待进入的连接通知。
➢SO_EXCLUSIVEADDRUSE
A
10
SOL_SOCKET选项级别
➢ SO_ACCEPTCONN
选项值类型 获取/设置 Winsock版本 说明
bool
获取
1+
返回值如果为TRUE,表明套接字处于监 听模式
▪如果已调用Listen函数,将套接字置为监听模式, 这个选项就会返回TRUE。SOCK_DGRAM类型的套接字 不支持这一选项。
setsockopt,便可禁止路由,数据包会从绑定的接口上直接发送出去。
以后可调用getsockopt,判断是否允许了路由。注意:在默认情况下,
路由是允许的。
A
12
➢ SO_REUSEADDR
选项值类型 获取/设置 Winsock版本 说明
bool
均可
1+
如果是TRUE,套接字就可与一个正由其 他套接字使用的地址绑定到一起,或与处
A
4
创建原始套接字
▪ 原始套接字类型
➢ 在IP头中使用预定义的协议(如ICMP)
➢ 在IP头中使用自定义的协议(使用IP头包含选项)
协议 地址族 套接字类型 套接字类型使用的值
协议字段
互联网 协议 AF_INET (IP)
TCP UDP
Raw
SOCK_STREAM SOCK_DGRAM
SOCK_RAW
➢ 无论是否设置IP_HDRINCL选项,原始套接字上接收到
的数据都会包含IP头。 A
7
➢ 使用原始套接字可以对底层传输机制加以控制,所 以有些人将其用于不法用途,
A
8
2.套接字选项
▪ 套接字选项操作函数
▪ getsocketopt()获取套接字选项信息。 int getsocketopt( SOCKET s, //套接字描述符 int level, //选项级别 int optname, //选项名称 char *optval, //选项值 int *optlen//选项长度 ); ➢ setsocketopt( ) 设置套接字选项。 int setsocketopt(SOCKET s, int level, int optname, const char *optval, int optlen);
➢ 协议标志IPPROTO_UDP、IPPROTO_IP以及 IPPROTO_RAW均要求使用套接字选项IP_HDRINCL, 而该选项在上述平台下都是不支持的。
➢ Windows 2000提供了对IP_HDRINCL选项的支持,所以 能够处理IP头(IPPROTO_RAW)、TCP头(IPPROTO_TCP) 以及UDP头(IPPROTO_UDP)。
说明
如果是TRUE,便直接向网络接口发送消息, 毋需查询路由表
假定创建了一个UDP套接字,并将其与接口A绑定到一起,然后发送
一个数据包,目的地址是网络中使用接口B的另一个网络上的某台机
器。此时,若采用默认设置,该数据包会经过一个路由过程,使其能
通过接口B传入目标网络。但将这里的布尔值设为TRUE,再来调用
L,0,WSA_FLAG_OVERLAPPED);
A
6
使用自定义协议
➢ 使用IGMP、UDP、IP或者原始IP,只需分别设置 IPPROTO_IGMP、IPPROTO_UDP、IPPROTO_IP或 IPPROTO_RAW即可。
➢ 注意:在Windows NT 4、Windows 98以及Windows 95 (安装Winsock 2)操作系统中,创建原始套接字时, 只能使用ICMP。
第四章
原始套接字
A
1
内容提要
▪ 1.使用原始套接字 ▪ 2.套接字选项 ▪ 3.ICMP编程 ▪ 4.使用IP头包含选项 ▪ 5.网络嗅探器实例
A
2
1.使用原始套接字
▪ 利用原始套接字(Raw Socket),可访问底层传 输协议。
▪ 原始套接字(Raw Socket))与标准套接字区别
A
3
▪ 使用原始套接字可以做什么?
A
9
选项级别: 协议的层次对应选项级别 应用层:SOL_SOCKET 传输层:IPPROTO_TCP、IPPROTO_UDP 网络层:IPPROTO_IP 不同级别属性不同,同一级别的不同协议的属
性不同,因此必须指定level参数 例:Int nTime=2*1000
setsockopt(s,SOL_SOCKET,SO_RCVTIMEO,(char*)&n Time,sizeof(nTime))
➢ 实现一些实用工具(ping,traceroute)。
➢ 可对IP头,TCP头,UDP头,ICMP头等进行操作。
▪ 原始套接字使用SOCK_RAW套接字类型来创建的, 目前只有Winsock2提供了对它的支持。
▪ 无论Microsoft Windows CE 还是老版本的 Windows 95 (无Winsock 2升级)均不能利用原 始套接字。
IPPROTO_TCP
IPPROTO_UDP
IPPROTO_RAW IPPROTO_ICMP
……
A
5
➢ 创建原始套接字 使用socket()或WSASocket()创建原始套接字。
➢ 例:创建原始套接字
使用预定义协议: SOCKET s; S=socket(AF_INET,SOCK_RAM,IPPROTO_ICMP); //OR S=WSAsocket(AF_INEF,SOCK_RAM,IPPROTO_ICMP,NUL
A来说,这个选项都是有效的。
11
➢ SO_CONNECT_TIME
选项值类型 获取/设置 Winsock版本 说明
int
获取
1+
返回套接字建立连接的时间,以秒为单位
▪该选项最常见的用法是和AcceptEx函数一道使用。 ➢SO_DONTROUTE
Leabharlann Baidu
选项值类型 bool
获取/设置 均可
Winsock版本 1+
相关文档
最新文档