原始套接字的使用
|
TCP或UDP时,需要在调用socket()函数时为它的第2个参数指定相应的类型,比如SOCK_STREAM是代表要使用TCP,而SOCK_DGRAM表示要使用UDP协议。除了可以指定这两种类型以外,还可以指定为原始套接字类型,即SOCK_RAW。当socket()函数的第2个参数指定为SOCK_STREAM或SOCK_DGRAM时,第3个参数可以缺省。而当socket()函数的第2个参数指定为SOCK_RAW时,第3个参数就必须明确指定需要使用的协议。 当套接字类型指定为SOCK_RAW时,协议类型的常用取值有IPPROTO_IP、IPPROTO_ICMP、IPPROTO_TCP、IPPROTO_UDP和IPPROTO_RAW。使用前四种类型,当发送数据时,系统会自动为数据加上IP首部并设置IP首部中的上层协议字段(如果有IP_HDRINCL选项,则系统不会自动添加IP首部);当接收数据时,系统不会将IP首部移除,需要程序自行处理。如果使用IPPROTO_RAW,那么系统将数据包直接送到网络层发送数据,并且需要程序自己构造IP首部中的字段。 本文通过介绍原始套接字实现经典的网络命令,即Ping命令。通过完成一个Ping命令来初步了解和掌握原始套接字的使用。 1. Ping命令的使用 Ping命令的目的是为了测试另一台主机是否可达,Ping命令发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答。一般来说,如果不能Ping到某台主机,那么就不能与该主机进行通信(例外的情况是对方主机的防火墙将进入主机的回显请求报文屏蔽掉了,这种情况虽然Ping不通,但是仍然可以正常进行通信)。
Ping命令有很多参数,打开命令行直接输入Ping后按下回车键,这样就可以看到Ping命令的参数列表,如图1所示。 (编辑:大同站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


