1. ICMP报文是封装在IP数据包中传输的。
  了解这一点对后面编程非常重要,图03是IP数据包的组成结构图:


图03:IP数据包的组成结构图

  习惯上把IP数据包划分为三个部分:
  (1).IP数据包中的前二十个字节的数据,即图03中从【4位版本】到【32位目的地址IP】,这称为IP首部。  

(2).选项,即图03中的【选项(如果有)】部分。

  (3).数据,即图03中的【数据】部分。

  其中后面二个部分组成的就是ICMP报文。ICMP报文的具体组成结构如图04所示:


图04:ICMP报文组成结构图

  2. ICMP协议没有固定的端口号。

setsockopt函数解析

int setsockopt (
SOCKET
s,                
  int level,               
  int optname,             
  const char FAR * optval
  int optlen               
);

The Windows Sockets setsockopt function sets a socket option.

中文解释好像是:设置套接字的选项。

先看如下代码:
setsockopt(SockRaw,IPPROTO_IP,IP_HDRINCL,(char *)&flag,sizeof(int))

这里是设置SockRaw这个套接字的ip选项中的IP_HDRINCL

参考以下资料:

***************************************************************************************************

. 套接字选项

有时候我们要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要控制套接字的选项了. 

getsockopt和setsockopt 

int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen)
int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t *optlen)

level指定控制套接字的层次.可以取三种值:
1)SOL_SOCKET:通用套接字选项.
2)IPPROTO_IP:IP选项.
3)IPPROTO_TCP:TCP选项. 
optname指定控制的方式(选项的名称),我们下面详细解释 

optval获得或者是设置套接字选项.根据选项名称的数据类型进行转换 

选项名称        说明                  数据类型
========================================================================
SOL_SOCKET
------------------------------------------------------------------------
SO_BROADCAST      允许发送广播数据            int
SO_DEBUG        允许调试                int
SO_DONTROUTE      不查找路由               int
SO_ERROR        获得套接字错误             int
SO_KEEPALIVE      保持连接                int
SO_LINGER        延迟关闭连接              struct linger
SO_OOBINLINE      带外数据放入正常数据流         int
SO_RCVBUF        接收缓冲区大小             int
SO_SNDBUF        发送缓冲区大小             int
SO_RCVLOWAT       接收缓冲区下限             int
SO_SNDLOWAT       发送缓冲区下限             int
SO_RCVTIMEO       接收超时                struct timeval
SO_SNDTIMEO       发送超时                struct timeval
SO_REUSERADDR      允许重用本地地址和端口         int
SO_TYPE         获得套接字类型             int
SO_BSDCOMPAT      与BSD系统兼容              int
==========================================================================
IPPROTO_IP
--------------------------------------------------------------------------
IP_HDRINCL       在数据包中包含IP首部          int
IP_OPTINOS       IP首部选项               int
IP_TOS         服务类型
IP_TTL         生存时间                int
==========================================================================
IPPRO_TCP
--------------------------------------------------------------------------
TCP_MAXSEG       TCP最大数据段的大小           int
TCP_NODELAY       不使用Nagle算法             int
=========================================================================

关于这些选项的详细情况请查看 Linux Programmer"s Manual 

8.2 ioctl 
ioctl可以控制所有的文件描述符的情况,这里介绍一下控制套接字的选项. 

int ioctl(int fd,int req,...)

==========================================================================
ioctl的控制选项
--------------------------------------------------------------------------
SIOCATMARK       是否到达带外标记            int
FIOASYNC        异步输入/输出标志            int
FIONREAD        缓冲区可读的字节数           int
==========================================================================

参考例子程序:http://115.com/file/bj3k2wa1

转载于:https://www.cnblogs.com/fujinliang/archive/2012/12/04/2801263.html

tracert路由跟踪(ICMP)相关推荐

  1. tracert路由跟踪工具使用方法

    为什么80%的码农都做不了架构师?>>>    1. 路由跟踪在线Tracert工具说明 Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据报访问目标所采取的路径.T ...

  2. tracert路由跟踪命令分析判断

    可能有的会使用路由跟踪命令 ,可是却看不太明确显示出来的结果.结合我的来说明一下. (1)tracert命令介绍 tracert是路由跟踪命令,通过该命令的返回结果,能够获得本地到达目标主机所经过的网 ...

  3. tracert路由跟踪命令分析推断

    可能有的会使用路由跟踪命令 ,但是却看不太明白显示出来的结果.结合我的来说明一下. (1)tracert命令介绍 tracert是路由跟踪命令,通过该命令的返回结果,可以获得本地到达目标主机所经过的网 ...

  4. linux下路由跟踪命令,tracert路由跟踪工具使用方法

    1. 路由跟踪在线Tracert工具说明 Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据报访问目标所采取的路径.Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP ...

  5. 浅谈tracert路由跟踪功能,tracert数据包解析

    该诊断实用程序将包含不同生存时间 (TTL) 值的 Internet 控制消息协议 (ICMP) 回显数据包发送到目标,以确定到达目标采用的路由.要在转发数据包上的 TTL 之前至少递减 1,必需路径 ...

  6. Windows系统下,tracert路由跟踪指令详解

    在Windows系统下是执行Tracert的命令: Tracert hostname 参数说明: tracert [-d] [-h maximum_hops] [-j computer-list] [ ...

  7. 计算机网络实验-IP协议及TraceRT路由跟踪

    一.实验目的: 通过跟踪所发送IP数据报经过的路由,分析Internet 的网络互连机制,了解IP协议的一些典型首部字段的意义和用途. 二.实验环境配置: 与因特网联网的主机,网络操作系统,Ether ...

  8. Tracert命令 路由跟踪数据包解析

    Tracertet 命令作为一个路由跟踪.诊断实用程序,在DOS和UNIX系统下都有此命令,它通过发送 Internet 控制消息协议 (ICMP) 回显请求和回显答复消息,产生关于经过每个路由器的命 ...

  9. 【Linux】关于路由跟踪指令traceroute

    本文所有命令实施的大前提是:你现在能够上网. 稍有计算机常识的人都知道ping命令,是用来检查自己的主机是否与目标地址接通,自己的主机与目标地址的通讯包通讯速率,所谓的通讯包也就是那些什么TCP/IP ...

最新文章

  1. ThinkPHP读取数据库数据到模板文件
  2. Slab,小对象也能搞出大事情
  3. 如何在bash中等待多个子进程完成并在任何子进程以代码!= 0结尾时返回退出代码!= 0?
  4. Bug反思:减少笔误
  5. iOS之深入解析操作系统的架构
  6. 关于抢红包的_关于抢红包的话题800字作文
  7. 位运算实现四则运算(C++实现)
  8. java 导出excel 例子_java导出Excel例子
  9. spring ioc原理_这70 道Spring高频面试题,你不好奇吗?
  10. 读书笔记_中国期货市场量化交易(李尉)03
  11. 仿微信图片上传,带加号,且超过最大数隐藏
  12. 通过keil hex2bin,bin2hex的方法
  13. Java排序算法-桶排序
  14. php加ajax,PHP – AJAX 与 PHP | 菜鸟教程
  15. Win10的投屏功能无法使用问题解决思路
  16. 编辑器——sublime
  17. SQL查找每科最高分和人
  18. SWD是一种串行调试接口
  19. RK平台 MPP 与RGA ,解码h265绿屏,花屏解决方法
  20. 2018,华米高歌猛进的一年 1

热门文章

  1. Dex文件格式扫描器:特征API的检测和扫描(小工具一枚)
  2. Android Killer(反编译工具)技巧
  3. firefox的XPCOM的COM编程
  4. 小米11即将发布,这是小米进军高端市场最好的机会?
  5. 关于Visual Studio 中“scanf”输入报错的解决方法
  6. MySQL之高性能的索引策略(索引优化)
  7. Unity3d 数字模型制作规范
  8. BasicVSR_pp video2frame
  9. 医院选址c语言课程设计,通信学院2012届本科毕业设计选题结果(学生)2.xls
  10. 注册跨境电商需要多少钱?还需要办理哪些事项?