tracert路由跟踪(ICMP)
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函数解析
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)相关推荐
- tracert路由跟踪工具使用方法
为什么80%的码农都做不了架构师?>>> 1. 路由跟踪在线Tracert工具说明 Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据报访问目标所采取的路径.T ...
- tracert路由跟踪命令分析判断
可能有的会使用路由跟踪命令 ,可是却看不太明确显示出来的结果.结合我的来说明一下. (1)tracert命令介绍 tracert是路由跟踪命令,通过该命令的返回结果,能够获得本地到达目标主机所经过的网 ...
- tracert路由跟踪命令分析推断
可能有的会使用路由跟踪命令 ,但是却看不太明白显示出来的结果.结合我的来说明一下. (1)tracert命令介绍 tracert是路由跟踪命令,通过该命令的返回结果,可以获得本地到达目标主机所经过的网 ...
- linux下路由跟踪命令,tracert路由跟踪工具使用方法
1. 路由跟踪在线Tracert工具说明 Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据报访问目标所采取的路径.Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP ...
- 浅谈tracert路由跟踪功能,tracert数据包解析
该诊断实用程序将包含不同生存时间 (TTL) 值的 Internet 控制消息协议 (ICMP) 回显数据包发送到目标,以确定到达目标采用的路由.要在转发数据包上的 TTL 之前至少递减 1,必需路径 ...
- Windows系统下,tracert路由跟踪指令详解
在Windows系统下是执行Tracert的命令: Tracert hostname 参数说明: tracert [-d] [-h maximum_hops] [-j computer-list] [ ...
- 计算机网络实验-IP协议及TraceRT路由跟踪
一.实验目的: 通过跟踪所发送IP数据报经过的路由,分析Internet 的网络互连机制,了解IP协议的一些典型首部字段的意义和用途. 二.实验环境配置: 与因特网联网的主机,网络操作系统,Ether ...
- Tracert命令 路由跟踪数据包解析
Tracertet 命令作为一个路由跟踪.诊断实用程序,在DOS和UNIX系统下都有此命令,它通过发送 Internet 控制消息协议 (ICMP) 回显请求和回显答复消息,产生关于经过每个路由器的命 ...
- 【Linux】关于路由跟踪指令traceroute
本文所有命令实施的大前提是:你现在能够上网. 稍有计算机常识的人都知道ping命令,是用来检查自己的主机是否与目标地址接通,自己的主机与目标地址的通讯包通讯速率,所谓的通讯包也就是那些什么TCP/IP ...
最新文章
- ThinkPHP读取数据库数据到模板文件
- Slab,小对象也能搞出大事情
- 如何在bash中等待多个子进程完成并在任何子进程以代码!= 0结尾时返回退出代码!= 0?
- Bug反思:减少笔误
- iOS之深入解析操作系统的架构
- 关于抢红包的_关于抢红包的话题800字作文
- 位运算实现四则运算(C++实现)
- java 导出excel 例子_java导出Excel例子
- spring ioc原理_这70 道Spring高频面试题,你不好奇吗?
- 读书笔记_中国期货市场量化交易(李尉)03
- 仿微信图片上传,带加号,且超过最大数隐藏
- 通过keil hex2bin,bin2hex的方法
- Java排序算法-桶排序
- php加ajax,PHP – AJAX 与 PHP | 菜鸟教程
- Win10的投屏功能无法使用问题解决思路
- 编辑器——sublime
- SQL查找每科最高分和人
- SWD是一种串行调试接口
- RK平台 MPP 与RGA ,解码h265绿屏,花屏解决方法
- 2018,华米高歌猛进的一年 1
热门文章
- Dex文件格式扫描器:特征API的检测和扫描(小工具一枚)
- Android Killer(反编译工具)技巧
- firefox的XPCOM的COM编程
- 小米11即将发布,这是小米进军高端市场最好的机会?
- 关于Visual Studio 中“scanf”输入报错的解决方法
- MySQL之高性能的索引策略(索引优化)
- Unity3d 数字模型制作规范
- BasicVSR_pp video2frame
- 医院选址c语言课程设计,通信学院2012届本科毕业设计选题结果(学生)2.xls
- 注册跨境电商需要多少钱?还需要办理哪些事项?