做app模板网站,wordpress 清空数据库,一键生成房屋设计图,游戏网站制作板式8. TCP/UDP 段
目标 了解 TCP 段头的组织结构了解 UDP 段头的组织结构掌握 TCP/UDP 段的解析方式
8.1. UDP 段格式
下图是UDP的段格式#xff08;该图出自[TCPIP]#xff09;。 8.2. UDP头部 //UDP头部#xff0c;总长度8字节// /usr/include/linux/udp.h
struct udphdr …8. TCP/UDP 段
目标 了解 TCP 段头的组织结构了解 UDP 段头的组织结构掌握 TCP/UDP 段的解析方式
8.1. UDP 段格式
下图是UDP的段格式该图出自[TCPIP]。 8.2. UDP头部
//UDP头部总长度8字节// /usr/include/linux/udp.h
struct udphdr {__be16 source; //源端口号__be16 dest; //目的端口号__be16 len; udp数据长度__sum16 check; // //16位udp检验和
};
8.3. TCP段格式
TCP的段格式如下图所示该图出自[TCPIP] 和UDP协议一样也有源端口号和目的端口号通讯的双方由IP地址和端口号标识。32位序号、32位确认序号、4位首部长度和IP协议头类似表示TCP协议头的长度以4字节为单位因此TCP协议头最长可以是4x1560字节如果没有选项字段TCP协议头最短20字节。保留 6位 新的版本下保留4位 增加两位标志介绍从略URG、ACK、PSH、RST、SYN、FIN是六个控制位16位窗口大小16位检验和将TCP协议头和数据都计算在内。紧急指针和各种选项的解释从略。 8.4. TCP头部 //TCP头部总长度20字节// /usr/inlcude/linux/tcp.hstruct tcphdr {__be16 source; //源端口号__be16 dest; //目的端口号__be32 seq; //序列号__be32 ack_seq; //确认号
#if defined(__LITTLE_ENDIAN_BITFIELD)__u16 res1:4,doff:4,fin:1,syn:1,rst:1,psh:1,ack:1,urg:1,ece:1,cwr:1;
#elif defined(__BIG_ENDIAN_BITFIELD)__u16 doff:4, //tcp头部长度res1:4, // 保留 4位cwr:1,ece:1,urg:1,ack:1,psh:1,rst:1,syn:1,fin:1;
#else
#error Adjust your asm/byteorder.h defines
#endif __be16 window; //16位窗口大小__sum16 check; //16位TCP检验和__be16 urg_ptr; //16为紧急指针
};
9. SSH协议解析
目标 了解ssh协议了解ssh协议探测方法简洁
9.1. ssh协议
全称为Secure Shell即很安全的shell主要目的是用来取代传统的telnet和r系列命令rloginrshrexec等远程登录和远程执行命令的工具实现远程登录和远程执行命令加密防止由于网络监听而出现的密码泄露从而对系统构成威胁。telnet协议采用明文传送密码数据传送过程中也不加密 ssh协议目前有ssh1 和ssh2其实现在我们主要使用的也是openssh。ssh不仅在登录过程中对密码进行加密传送而且在登录后执行的命令的数据也进行加密这样即使别人在网络上监听并截获了你的数据包他也看不到其中的内容。
在网络安全防护中 “信息系统具备防窃听” 这条要求的本质就是要用密文传输的ssh替代明文传输的telnet....
9.2. ssh完整流程实例分析
通过ssh远程控制的一个完整个过程来讲ssh的过程可分为以下3部分
版本协商
算法协商与密钥交换
这其中第二部分是ssh最为核心的过程该过程决定了以后通信所要使用的密钥下面按顺序对每个部分对比着数据包进行详细的讲解并给出实现的过程。9.2.1. 版本协商
在建立连接后客户端与服务器分别向对方发送自己ssh的版本信息这里的数据格式不同于其他包只有一行版本号以\r\n结束。版本的格式如下 SSH-ssh协议版本-详细版本\r\n 在图中 橙色部分为tcp建立链接的三次握手
9.2.2. 算法协商与密钥交换
先看图 算法协商第158Key Exchange init开始分别为双发向对法发送的自己在不同密码需求上支持的算法。
加密通信可能含有2、3部分
9.2.3. 加密通信
上图 从 Client: Encrypted packet 开始 开始进行加密的通信 9.3. 拓展内容
9.3.1. 关于ssh相关的几个概念
在介绍ssh协议之前有几个涉及到的基本概念首先需要介绍它们对于理解ssh协议本身有非常重要和关键的作用。
加密
加密的意思是将一段数据经过处理之后输出为一段外人无法或者很难破译的数据除了指定的人可以解密之外。 一般来说加密的输入还会有一个key这个key作为加密的参数 而在解密的时候也会用一个相关联(有可能是相同)的key作为输入。
简单的说 密文 明文 key
对称加密
所谓的对称加密是说加密方和解密方用的都是同一个key这个key对于加密方和解密方来说是保密的第三方是不能知道的。在第三方不知道私钥的情况下是很难将加密的数据解密的。一般来说是加密方先产生私钥然后通过一个安全的途径来告知解密方这个key。
非对称加密
非对称加密是说解密的一方首先生成一对密钥一个私钥一个公钥私钥不会泄漏出去而公钥则是可以任意的对外发布的。用公钥进行加密的数据只能用私钥才能解密。加密方首先从解密方获取公钥然后利用这个公钥进行加密把数据发送给解密方。解密方利用私钥进行解密。如果解密的数据在传输的过程中被第三方截获也不用担心因为第三方没有私钥没有办法进行解密。
非对称加密的问题还包括获取了公钥之后加密方如何保证公钥来自于确定的一方而不是某个冒充的机器。假设公钥不是来自我们信任的机器那么就算我们用非对称加密也没有用因为加密之后的数据是发送给了冒充的机器该机器就可以利用它产生的私钥进行解密了。所以非对称加密里面比较重要的一步是身份认证。
需要说明一下一般的对称加密都会比非对称加密快所以大数据量的加密一般都会使用对称加密而非对称加密会作为身份验证和交换对称加密秘钥的一个手段。
数据一致性/完整性
数据一致性说得是如何保证一段数据在传输的过程中没有遗漏、破坏或者修改过。一般来说目前流行的做法是对数据进行hash得到的hash值和数据一起传输然后在收到数据的时候也对数据进行hash将得到的hash值和传输过来的hash值进行比对如果是不一样的说明数据已经被修改过如果是一样的则说明极有可能是完整的。
目前流行的hash算法有MD5和SHA-1算法。
9.3.2. 参考
RFC4251