网络协议基础

HTTP协议

一. 概念

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW: World Wide Web)服务器传输超文本到本地浏览器的传送协议
HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)

HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

二. 在TCP/IP协议栈中的位置

HTTP可以在任何互联网协议上,或其他网络上实现。HTTP假定其下层协议提供可靠的传输,因此,任何能够提供这种保证的协议都可以被其使用。故在TCP/IP协议族使用TCP作为其传输层。默认HTTP的端口号是80,HTTPS为443。

三. 工作原理

请求/响应交互模型:在用户访问一个网址时,浏览器和Web服务器执行以下动作:

①. 浏览器分析超链接中的URL
②. 浏览器项DNS请求解析URL的IP地址
③. DNS将解析出的IP地址返回浏览器
④. 浏览器与服务器建立TCP连接(80端口)
⑤. 浏览器请求文档: GET/index.html
⑥. 服务器给出响应,将文档index.html发送给浏览器
⑦. 释放TCP连接
⑧. 浏览器显示index.html中的内容

四. 特点

①. 简单快速: 客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
②. 灵活: HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
③. 无连接: 无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
④. 无状态: HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

五. 请求、响应报文

请求报文

Request报文,即从客户端(浏览器)向Web服务器发送的请求报文。报文的所有字段都是ASCII码。

HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:

GET: 向指定的资源发出“显示”请求。
HEAD: 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。
POST: 向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。
PUT: 向指定资源位置上传其最新内容。
DELETE: 请求服务器删除Request-URI所标识的资源。
TRACE:回显服务器收到的请求,主要用于测试或诊断。
OPTIONS: 这个方法可使服务器传回该资源所支持的所有HTTP请求方法。
CONNECT: HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接。

常见请求头

1.Accept
Accept: text/html 浏览器可以接受服务器回发的类型为 text/html。
Accept: / 代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)。

2.Accept-Encoding
Accept-Encoding: gzip, deflate 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),(注意:这不是只字符编码)。

3.Accept-Language
Accept-Language:zh-CN,zh;q=0.9 浏览器申明自己接收的语言。

4.Connection
Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。

5.Host(发送请求时,该报头域是必需的)
Host:www.baidu.com 请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。

6.Referer
Referer: https://www.baidu.com/?start=1当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。

7.User-Agent
User-Agent:Mozilla/...,告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本。

8.Cache-Control
Cache-Control:private 默认为private 响应只能够作为私有的缓存,不能再用户间共享
Cache-Control:public 响应会被缓存,并且在多用户间共享。正常情况, 如果要求HTTP认证,响应会自动设置为 private.
Cache-Control:must-revalidate 响应在特定条件下会被重用,以满足接下来的请求,但是它必须到服务器端去验证它是不是仍然是最新的。
Cache-Control:no-cache 响应不会被缓存,而是实时向服务器端请求资源。
Cache-Control:max-age=10 设置缓存最大的有效时间,但是这个参数定义的是时间大小(比如:60)而不是确定的时间点。单位是[秒 seconds]。
Cache-Control:no-store 在任何条件下,响应都不会被缓存,并且不会被写入到客户端的磁盘里,这也是基于安全考虑的某些敏感的响应才会使用这个。

9.Cookie
Cookie是用来存储一些用户信息以便让服务器辨别用户身份的(大多数需要登录的网站上面会比较常见),比如cookie会存储一些用户的用户名和密码,当用户登录后就会在客户端产生一个cookie来存储相关信息,这样浏览器通过读取cookie的信息去服务器上验证并通过后会判定你是合法用户,从而允许查看相应网页。当然cookie里面的数据不仅仅是上述范围,还有很多信息可以存储是cookie里面,比如sessionid等。

10.Range(用于断点续传)
Range:bytes=0-5 指定第一个字节的位置和最后一个字节的位置。用于告诉服务器自己想取对象的哪部分。

响应报文

Response报文,即从Web服务器到客户机(浏览器)的应答。报文的所有字段都是ASCII码。

常见响应头

1.Cache-Control(对应请求中的Cache-Control)
Cache-Control:private 默认为private 响应只能够作为私有的缓存,不能再用户间共享
Cache-Control:public 浏览器和缓存服务器都可以缓存页面信息。
Cache-Control:must-revalidate 对于客户机的每次请求,代理服务器必须想服务器验证缓存是否过时。
Cache-Control:no-cache 浏览器和缓存服务器都不应该缓存页面信息。
Cache-Control:max-age=10 是通知浏览器10秒之内不要烦我,自己从缓冲区中刷新。
Cache-Control:no-store 请求和响应的信息都不应该被存储在对方的磁盘系统中。

2.Content-Type
Content-Type:text/html;charset=UTF-8 告诉客户端,资源文件的类型,还有字符编码,客户端通过utf-8对资源进行解码,然后对资源进行html解析。通常我们会看到有些网站是乱码的,往往就是服务器端没有返回正确的编码。

3.Content-Encoding
Content-Encoding:gzip 告诉客户端,服务端发送的资源是采用gzip编码的,客户端看到这个信息后,应该采用gzip对资源进行解码。

4.Date
Date: Tue, 03 Apr 2020 03:52:28 GMT 这个是服务端发送资源时的服务器时间,GMT是格林尼治所在地的标准时间。http协议中发送的时间都是GMT的,这主要是解决在互联网上,不同时区在相互请求资源的时候,时间混乱问题。

5.Server
Server:Tengine/1.4.6 这个是服务器和相对应的版本,只是告诉客户端服务器信息。

6.Transfer-Encoding
Transfer-Encoding:chunked 这个响应头告诉客户端,服务器发送的资源的方式是分块发送的。一般分块发送的资源都是服务器动态生成的,在发送时还不知道发送资源的大小,所以采用分块发送,每一块都是独立的,独立的块都能标示自己的长度,最后一块是0长度的,当客户端读到这个0长度的块时,就可以确定资源已经传输完了。

7.Expires
Expires:Sun, 1 Jan 1994 01:00:00 GMT 这个响应头也是跟缓存有关的,告诉客户端在这个时间前,可以直接访问缓存副本,很显然这个值会存在问题,因为客户端和服务器的时间不一定会都是相同的,如果时间不同就会导致问题。所以这个响应头是没有Cache-Control:max-age=*这个响应头准确的,因为max-age=date中的date是个相对时间,不仅更好理解,也更准确。

8.Last-Modified
Last-Modified: Dec, 26 Dec 2019 17:30:00 GMT 所请求的对象的最后修改日期(按照 RFC 7231 中定义的“超文本传输协议日期”格式来表示)

9.Connection
Connection:keep-alive 这个字段作为回应客户端的Connection:keep-alive,告诉客户端服务器的tcp连接也是一个长连接,客户端可以继续使用这个tcp连接发送http请求。

10.Etag
ETag: "637060cd8c284d8af7ad3082f209582d" 就是一个对象(比如URL)的标志值,就一个对象而言,比如一个html文件,如果被修改了,其Etag也会别修改,所以,ETag的作用跟Last-Modified的作用差不多,主要供WEB服务器判断一个对象是否改变了。比如前一次请求某个html文件时,获得了其 ETag,当这次又请求这个文件时,浏览器就会把先前获得ETag值发送给WEB服务器,然后WEB服务器会把这个ETag跟该文件的当前ETag进行对比,然后就知道这个文件有没有改变了。

11.Refresh
Refresh: 5; url=http://baidu.com 用于重定向,或者当一个新的资源被创建时。默认会在5秒后刷新重定向。

12.Access-Control-Allow-Origin
Access-Control-Allow-Origin: * 号代表所有网站可以跨域资源共享,如果当前字段为那么Access-Control-Allow-Credentials就不能为true
Access-Control-Allow-Origin: www.baidu.com 指定哪些网站可以跨域资源共享

13.Access-Control-Allow-Methods
Access-Control-Allow-Methods:GET,POST,PUT,DELETE 允许哪些方法来访问

14.Access-Control-Allow-Credentials
Access-Control-Allow-Credentials: true 是否允许发送cookie。默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器。这个值也只能设为true,如果服务器不要浏览器发送Cookie,删除该字段即可。如果access-control-allow-origin为*,当前字段就不能为true

15.Content-Range
Content-Range: bytes 0-5/7877 指定整个实体中的一部分的插入位置,它也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。

状态码

状态码(Status-Code)是响应报文状态行中包含的3位数字,指明特定的请求是否被满足,如果没有满足,原因是什么。状态码分为以下五类:

1xx 通知信息 100=服务器正在处理客户请求
2xx 成功 200=请求成功(OK)
3xx 重定向 301=页面改变了位置
4xx 客户错误 403=禁止的页面;404=页面未找到
5xx 服务器错误 500=服务器内部错误;503=以后再试

六. URI

HTTP使用统一资源标识符(Uniform Resource ldentifiers,URI)来传输数据和建立连接。URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息,统一资源定位符的标准格式如下:
协议类型: [//服务器地址[:端口号][/资源层级UNIX文件路径]文件名[?查询][#片段ID]

七. Get和Post区别

GET提交的数据会放在URL之后;POST方法是把提交的数据放在HTTP包的Body中。
GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。
GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上。

SSL协议

一. 密码学基础

对称加密

对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。

非对称加密

非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥((privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。

数字签名

数字签名是指可以添加到文件的电子安全标记。使用它可以验证文件的发行者以及帮助验证文件自被数字签名后是否发生更改。

数字证书

数字证书是用来验证公钥所属的用户身份,是一个人或一个组织在网络世界中的身份证,其发证机关是证书管理机构(certificate authority,CA)。CA用自己的私钥对用户的身份信息(主要是用户名和该用户的公钥)进行签名,该签名和用户的身份信息一起就形成了证书。

二. 概念

SSL协议位于TCP协议与各种应用层协议之间,为数据通讯提供数据加密、服务器认证、消息完整性以及可选的客户机认证。
SSL协议可分为两层
SSL记录协议(SSL Record Protocol): 它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
SSL握手协议(SSL Handshake Protocol): 它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

三. TSL安全传输层协议

在SSL更新到3.0时,IETF对SSL3.0进行了标准化,并添加了少数机制(但是几乎和SSL3.0无差异),标准化后的IETF更名为TLS1.0,可以说TLS就是SSL的新版本3.1。TLS的主要目标是使SSL更安全,并使协议的规范更精确和完善。
主要增强的内容

  1. 更安全的MAC算法
  2. 更严密的警报
  3. "灰色区域”规范的更明确的定义

四. 特点

SSL/TLS协议
所有信息都是加密传播,第三方无法窃听。
具有校验机制,一旦被篡改,通信双方会立刻发现。
配备身份证书,防止身份被冒充。

五. HTTPS

HTTPS是在HTTP的基础上和ssl/tls证书结合起来的一种协议,保证了传输过程中的安全性,减少了被恶意劫持的可能。很好的解决了解决了http的三个缺点(被监听、被篡改、被伪装)。

请求过程

在使用HTTPS时需要保证服务端配置正确了对应的安全证书
①. 客户端发送请求到服务端;
②. 服务端返回公钥和证书到客户端;
③. 客户端验证证书的安全性,随机生成一个随机数,用公钥对其加密,发送到服务端;
④. 服务端接受到加密后的随机数后,用私钥对其解密得到真正的随机数,随后用这个随机数当做私钥对需要发送的数据进行对称加密;
⑤. 客户端在接收到加密后的数据使用私钥(即生成的随机值)对数据进行解密并且解析数据呈现结果给客户;
⑥. SSL加密建立。

六. SSL握手协议

1、SSL客户端(也是TCP的客户端)在TCP链接建立之后,发出一个ClientHello来发起握手,这个消息里面包含了自己可实现的算法列表和其它一些需要的消息;
2、SSL的服务器端会回应一个ServerHello,这里面确定了这次通信所需要的算法,然后发过去自己的证书(里面包含了身份和自己的公钥);
3、Client在收到这个消息后会生成一个秘密消息,用SSL服务器的公钥加密后传过去;
4、SSL服务器端用自己的私钥解密后,会话密钥协商成功,双方可以用同一份会话密钥来通信了。

七. 不安全因素

证书

通过攻击或窃取证书,导致客户端证书变得形同虚设。
安全要求:
1、用户应自行生成证书请求文件(CSR),因为生成证书请求文件的同时,也生成了私钥;用户保存好私钥,向证书公司只提供证书请求文件;
2、在生成证书请求文件时,选择加密算法、加密强度和签名算法时;如RSA算法,加密强度应>=2048,签名算法》=SHA1,不建议使用不安全的算法算法和签名算法,如RSA1024、MD5等。
3、建议生成CSR时,对私钥进行加密,保证私钥的安全性。

服务器SSL配置

服务器SSL配置主要强调在配置SSL时,应避免使用不安全的协议和加密套件,以及是否启用相关的其他增强型安全功能。
安全要求:
1、SSL协议应至少使用TLS1.0及以上,出于老版本浏览器兼容性原因,适当启用SSL3.0,禁止使用SSL2.0.
2、避免使用不安全的加密套件,包括: NULL、 anonymous、EXPORT、RC4、MD5、PSK、ADH。
3、加密套件中选择的加密强度应>=128bits。
4、更高级别的安全性要求,如支持ATS标准、HSTS、CAA、防止降级攻击、正向保密等。

漏洞与升级

低版本的TLS存在许多严重漏洞,这些漏洞使得网站存在被攻击的风险,其中POODLE和BEAST这两个漏洞就较大多数人所知;应关注SSL安全资讯,及时发现sSL 0day漏洞并迅速修复,升级OpenSSL版本。

DNS协议

一. 概念

TCP/IP中使用IP地址和端口号来确定网络上某一台主机上的某一个程序,但是IP地址是点分十进制,不方便记忆。因此,就出现了域名,如: www.baidu.com,
DNS协议就是用来将域名解析到IP地址的一种协议,也可以将IP地址转换为域名;
DNS是域名系统(DomainNameSystem)的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库;
DNS协议基于UDP和TCP协议的,端口号53,用户到服务器采用UDP协议,DNS服务器通信采用TCP协议。

二. 系统组成

  1. 域名空间(Name Space)和资源记录(Resource Record)
  2. 域名服务器(Name Server)用以提供域名空间结构及信息的服务器程序;
  3. 解析器(Resolver)作用是应客户程序的要求从域名服务器抽取信息。

三. 域名解析

①. 主机先向本地域咎服务器进行递归查询
②. 本地域名服务器采用迭代查询,向一个根域名服务器进行查询
③. 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器dns.com的IP地址
④. 本地域名服务器向顶级域名服务器dns.com进行查询
⑤. 顶级域名服务器告诉本地域名服务器,下一步查询权限服务器的IP地址
⑥. 本地域名服务器向权限服务器进行查询
⑦. 权限告诉本地域名服务器所查询的主机的IP地址
⑧. 本地域名服务器最后把查询结果告诉主机

DNS查询有两种方式:递归查询迭代查询。DNS客户端设置使用的DNS服务器一般都是递归服务器,它负责全权处理客户端的DNS查询请求,直到返回最终结果。而DNS服务器之间一般采用迭代查询方式。

四. 报文格式

头部

1、会话标识(2字节):是DNS报文的ID标识,对于请求报文和其对应的应答报文,这个字段是相同的,通过它可以区分DNS应答报文是哪个请求的响应

2、标志(2字节): flags
QR (1bit) 查询/响应标志,0为查询,1为响应
opcode (4bit) 0表示标准查询,1表示反向查询,2表示服务器状态请求
AA (1bit) 表示授权回答
Tc (1bit) 表示可截断的
RD (1bit) 表示期望递归
RA (1bit) 表示可用递归
rcode (4bit) 表示返回码,0表示没有差错,3表示名字差错,2表示服务器错误(Server Failure)

3、数量字段(总共8字节):Questions、Answer RRs、Authority RRs、
Additional RRs各自表示后面的四个区域的数目。
Questions表示查询问题区域节的数量,
Answers表示回答区域的数量,
Authoritative namesversers表示授权区域的数量,
Additional recoreds表示附加区域的数量

正文

1、Queries区域
2、资源记录(RR)区域(包括回答区域,授权区域和附加区域)

五. 不安全因素

自身的不安全因素

采用了面向非连接的UDP协议
较多DNS服务器使用BIND软件,存在缓冲区溢出漏洞、拒绝服务漏洞

面临的攻击

拒绝服务攻击、缓冲区中毒

区域信息泄露

DNS作为公开数据库,对域名请求通常不加验证,容易泄露网络拓扑、子网结构等。

域名劫持

通过非法手段获取账户信息,将域名IP指向其他主机。

ARP协议

一. IP地址与MAC地址

要理解ARP协议的工作原理必须先理解IP地址和MAC地址的区别,MAC地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址(IP地址使用软件实现的)。

在发送数据时,数据从高层到低层,然后才到通信链路上传输。使用IP地址的IP数据报一旦交给了数据链路层,就被封装成了MAC帧。MAC帧在传送时使用的源地址和目的地址都是硬件地址。在数据链路层看不到隐藏在MAC帧中的IP地址。只有在剥去MAC帧的首部和尾部后把MAC层的数据交给网络层后,网络层才能在IP数据报的首部中找到源IP地址和目的IP地址。

二. 概念

地址解析协议(Address Resolution Protocol),其基本功能为透过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。

基本功能:
主机在发送帧前将目标lP地址转换成目标MAC地址

注:在点对点链路中不使用ARP,实际上在点对点网络中也不使用MAC地址。

三. ARP缓存

ARP缓存是个用来储存IP地址和MAC地址的缓冲区,其本质就是一个IP地址-->MAC地址的对应表。

1、对应表中每一个条目分别记录了网络上其他主机的IP地址和对应的MAC地址。
2、每一个以太网或令牌环网络适配器都有自己单独的表。当地址解析协议被询问一个已知IP地址节点的MAC地址时,先在ARP缓存中查看,若存在,就直接返回与之对应的MAC地址,若不存在,才发送ARP请求向局域网查询。
3、ARP缓存可以包含动态和静态项目。动态项目随时间推移自动添加和删除;静态项目一直保留在缓存中,直到重新启动计算机为止。

避免了重复的ARP请求,提高了发送数据包的速度

四. 工作原理

每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。

1、主机(网络接口)新加入网络时(也可能只是mac地址发生变化,接口重启等),会发送免费ARP报文把自己IP地址与Mac地址的映射关系广播给其他主机。
2、网络上的主机接收到免费ARP报文时,会更新自己的ARP缓冲区。将新的映射关系更新到自己的ARP表中。
3、某个主机需要发送报文时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址等。
4、当本网络的所有主机收到该ARP数据包时:
(A)首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包。
(B)如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖。
(C)然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址,
5、源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP 列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败

五. 报文格式

ARP帧以以太帧的形式存在,即ARP消息包含在以太帧中,因此包含以太帧的首部和尾部。

帧类型: 用来向收到数据报的主机表示该数据报的类型,常见类型如下:
0800:IP数据报;
0806:ARP请求/应答数据报;
8035:RAPP请求/应答;

ARP Request or Reply Message是ARP帧的核心部分。
前14字节是以太网首部帧格式,然后后面四个字段描述了本ARP帧涉及的硬件类型和协议类型。
硬件类型Hard Type:该字段占2个字节,指定硬件地址类型,如值为1表示为以太网地址。
协议类型Prot Type :该字段占2个字节,指定协议地址类型,如Ox0800表示协议地址类型为IPv4地址。该值与以太帧首部的类型字段相同。
硬件地址长度Hard Size:表示硬件地址的大小(单位:字节),如以太网地址为6。
协议地址长度ProtSize:表示协议地址的大小(单位:字节),如IPv4地址大小为4。

OP:表示ARP的消息类型
1: ARP Request;
2: ARP Reply
3: RARP Request
4: RARP Reply
后面四个字段写入的是一些物理地址和协议地址。不一定全部有值。
对于ARP Request而言,我们不知道目的MAC地址是什么,因此 Target's Hardware Address 全部填充为0。

六. 常见命令应用

ARP命令用于显示和修改“地址解析协议”缓存中的项目,在命令行中输入arp /?可以得到ARP命令的详细说明。

七. 安全特性

协议缺陷

ARP请求与应答不需要配对
主机收到arp应答时,不管以前是否发出对应的请求,均接受并更新arp缓存。这样就导致了,可以向任何主机发送虚假的arp应答

ARP reply也可以广播

以太帧的源MAC和ARP包里的发起端MAC可以不同

正常情况下,以太帧的源MAC和ARP包里的发起端MAC是完全一样的。但是实际上ARP依靠的是ARP包里的发起端MAC,而不是以太帧的源MAC

以太帧的源MAC可以是任意的
造成无法查找发起ARP欺骗的主机MAC的难题,就算是知道受骗了,也不知道是被谁欺骗的

ARP欺骗

就是通过伪造lP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。

NAT协议

一. 概念

NAT(Network Address Translation)协议:在私有地址和全局地址之间转换的协议。

什么是私有地址?
私有地址是不能用在Internet上(路由器将丢弃寻址这种地址的包)的内部地址。这些地址是不能够在公网上面用的,只能用在局域网的内部。私有地址有三种:
① 10.0.0.0~10.255.255.255/8
② 172.16.0.0~172.31.255.255/123
③ 192.168.0.0~192.168.255.255/16

二. 工作流程

假设一个私有地址为10.1.0.2的主机想访问互联网服务器162.105.192.12

1、首先它首先把消息发出给NAT路由器。
2、路由器记录了它的内网地址和端口,并且给它分配一个全局地址和全局端口。这个地址关系记录在NAT路由表中。之后按照目的地址发给服务器。
3、一段时间之后,服务器回应了请求给NAT路由器,那么路由器根据目的地址和端口(此时是全局的)按照NAT路由表转换为对应的主机地址,再发送给主机。

三. 分类

静态NAT(Basic NAT)

它在技术上比较简单,仅支持地址转换,不支持端口映射。Basic NAT要求对每一个当前连接都要对应一个公网IP地址,因此要维护一个公网的地址池。

动态NAT(NAPT)

这种方式支持端口的映射,并允许多台主机共享一个公网IP地址。NAPT维护一个带有IP以及端口号的NAT表。

支持端口转换的NAT又可以分为两类:源地址转换和目的地址转换。前一种情形下发起连接的计算机的IP地址将会被重写,使得内网主机发出的数据包能够到达外网主机。后一种情况下被连接计算机的IP地址将被重写,使得外网主机发出的数据包能够到达内网主机。实际上,以上两种方式通常会一起被使用以支持双向通信。

四. 优缺点

优点:
节省合法的公有ip地址(NAT最大的贡献就是节省了大量的ip资源)
地址重叠时,提供解决办法
网络发生变化时,避免重新编址

缺陷:
无法进行端到端的ip跟踪(破坏了端对端通信的平等性)
很多应用层协议无法识别(比如ftp协议)

VPN

一. 概念

VPN (Virtual Private Network,虚拟专用网络)即是指在公众网络上所建立的企业网络,并且此企业网络拥有与专用网络相同的安全、管理及功能等特点,它替代了传统的拨号访问,利用INTERNET公网资源作为企业专网的延续,节省昂贵的长途费用。

二. 层次分类

二层隧道VPN
L2TP: Layer 2 Tunnel Protocol(RFC 2661)
PPTP: Point To Point Tunnel Protocol
L2F: Layer 2Forwarding

三层隧道VPN
GRE: General Routing Encapsulation
IPSEC: IP Security Protocol

FTP协议

一. 概念

文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。

FTP用途:用户可以通过FTP把自己的PC机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息。如果用户需要将文件从自己的计算机上发送到另一台计算机上,可使用FTP上传(upload)或(put)操作,更多的情况是用户使用FTP下载(download)或获取(get)操作从FTP服务器上下载文件。

二. 工作原理

FTP客户机向FTP服务器发送服务请求,FTP服务器接收与响应FTP客户机的请求,并向FTP客户机提供所需的文件传输服务。

由于FTP服务的特点是数据量大、控制信息相对较少,因此在设计时采用分别对控制信息与数据进行处理的方式,这样用于通信的TCP连接也相应地分为两种类型:控制连接与数据连接。

三. 传输方式

FTP的传输类型分为ASCII码方式和二进制方式两种,对.txt、.htm等文件应采用ASCII码方式传输,对.exe或图片、视频、音频等文件应采用二进制方式传输。在默认情况下,FTP为ASCII码传输方式。

ASCIl传输方式
假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。

二进制传输模式
在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。

四. 工作方式

FTP支持两种模式,一种方式叫做Standard (也就是PORT方式,主动方式),一种是Passive (也就是PASV,被动方式)。

Standard模式:FTP的客户端发送PORT命令到FTP服务器。
Passive模式:FTP的客户端发送PASV命令到FTP服务器。

更通俗一点说就是:在传输数据时,如果是服务器主动连接客户端,那就是主动模式;如果是客户端主动连接服务器,那就是被动模式

五. 使用方式

用户授权

用户授权:要连上FTP服务器(即“登陆”),必须要有该FTP服务器授权的帐号。在有了一个用户标识和一个口令后才能登陆FTP服务器,享受FTP服务器提供的服务。

FTP地址格式:FTP地址如下: ftp://用户名:密码@FTP服务器IP或域名:FTP命令端口/路径/文件名. ftp://foolish.6600.org
ftp://list:list@foolish.6600.org
ftp://list:list@foolish.6600.org:2003
ftp://listlist@foolish.6600.org:2003/soft/list.txt

匿名FTP:互连网中有很大一部分FTP服务器被称为“匿名”(Anonymous)FTP服务器。这类服务器的目的是向公众提供文件拷贝服务,不要求用户事先在该服务器进行登记注册,也不用取得FTP服务器的授权用户使用特殊的用户名“anonymous”登陆FTP服务,就可访问远程主机上公开的文件。

常见命令

1.登录FTP服务器
方法一:直接输入ftp加ip地址ftp 192.168.10.xXX
方法二:直接输入ftp,进入ftp服务后输入open加ip地址open 192.168.10.xxx

2.查看FTP服务器上的文件
dir:显示服务器目录和文件列表ls:显示服务器简易的文件列表cd:进入服务器指定的目录

3.下载文件
type:查看当前的传输方式
ascii:设定传输方式为ASCII码方式binary:设定传输方式为二进制方式
get:下载指定文件get filename [newname] filename为下载的FTP服务器上的文件名,newname为保存在本都计算机上时使用的名字
mget:下载多个文件mget filename [filename ...].mget命令支持通配符""和“?”,比如: mget .mp3表示下载FTP服务器当前目录下的所有扩展名为mp3的文件。

4.上传文件
put:上传指定文件put filename [newname]
send:上传指定文件send filename [newname]
(filename为上传的本地文件名,newname为上传至FTP服务器上时使用的名字,如果不指定newname,文件将以原名上传。)

5.结束并退出FTP
close: 结束与服务器的FTP会话
quit: 结束与服务器的FTP会话并退出FTP环境

6.其它FTP命令
pwd: 查看FTP服务器上的当前工作目录
rename filename newfilename: 重命名FTP服务器上的文件
deletefilename: 删除FTP服务器上的文件
help[cmd]: 显示FTP命令的帮助信息,cmd是命令名,如果不带参数,则显示所有FTP命令

通常使用FPT的客户端软件,常用的FTP客户程序有CuteFTP、Ws_FTP、Flashfxp、LeapFTP等;

DHCP协议

一. 概念

DHCP,全称是Dynamic Host Configuration Protocol.中文名为动态主机配置协议,它的前身是BOOTP,它工作在OSI的应用层,是一种帮助计算机从指定的DHCP服务器获取它们的配置信息的自举协议。

DHCP使用客户端/服务器模式,请求配置信息的计算机叫做DHCP客户端,而提供信息的叫做DHCP的服务器。DHCP为客户端分配地址的方法有三种:手工配置、自动配置、动态配置。

DHCP最重要的功能就是动态分配。除了IP地址,DHCP分组还为客户端提供其他的配置信息,比如子网掩码。这使得客户端无需用户动手就能自动配置连接网络。

二. 地址分配

自动分配方式: DHCP给主机指定一个永久的IP地址
动态分配方式: DHCP给主机指定一个有时间限制的IP地址,到时间或主机明确表示放弃地址时,这个地址可被其他主机使用
手工分配方式: 主机IP地址由网络管理员制定,DHCP只能把制定的IP地址告诉主机

只有动态分配的方式可以对已经分配给主机但此主机已经不使用的IP地址重新加以利用

SNMP协议

一. 概念

简单网络管理协议(SNMP): SNMP是一种简单网络管理协议,它属于TCP/IP五层协议中的应用层协议,用于网络管理的协议。SNMP主要用于网络设备的管理。

SNMP的工作方式: 管理员需要向设备获取数据,所以SNMP提供了“读”操作;管理员需要向设备执行设置操作,所以SNMP提供了“写”操作;设备需要在重要状况改变的时候,向管理员通报事件的发生,所以SNMP提供了“Trap”操作。

套完整的SNMP系统主要包括管理信息库(MIB)、管理信息结构(SMI)及SNMP报文协议。

snmp的基本思想是为不同种类、不同厂家、不同型号的设备定义一个统一的接口和协议,使管理员可以通过同意的外观面对这些需要管理的网管设备进行管理,提高网管管理的效率,简化网络管理员的工作。snmp设计在TCPIP协议族上,基于TCP/IP协议工作,对网络中支持snmp协议的设备进行管理。

二. 工作原理

在具体实现上,SNMP为管理员提供了一个网管平台(NMS),又称为管理站,负责网管命令的发出、数据存储、及数据分析。被监管的设备上运行一个SNMP代理(Agent),代理实现设备与管理站的SNMP通信。

管理信息(MIB)库可以理解成为agent维护的管理对象数据库,MIB中定义的大部分管理对象的状态和统计信息都可以被NMS访问。MIB是一个按照层次结构组织的树状结构,每个被管对象对应树形结构的一个叶子节点,称为一个object,拥有唯一的数字标识符。

管理信息结构(SMI)定义了SNMP框架所用信息的组织、组成和标识,它还为描述MIB对象和描述协议怎样交换信息奠定了基础。

其他常见协议漏洞

FTP

口令爆破
匿名访问:用户名: anonymous 密码:为空或任意邮箱
嗅探: ftp使用明文传输技术
远程溢出
跳转攻击
VsFtp后门漏洞

SNMP

默认口令:
安装并启用SNMP协议后,会开启以下两个端口
UDP 161 snmp
UDP 162 snmptrap

很多网络设备厂商以及操作系统厂商在初始状态下使用SNMP统一的查询密码(communitystring)如pubilc,可以通过snmputil工具尝试获取对方机器系统进程列表:
Snmputil.exe walk 192.168.1.1 public .1.3.6.1.2.1.25.4.2.1.2

DHCP

DHCP是用UDP协议工作的局域网网络协议。DHCP的应用使信息交流变得更加简单快捷,但协议的安全问题很容易被忽视,经常出现非法用户利用DHCP漏洞实施网络攻击和诈骗等。

例如:
无线安全:通过伪AP进行DHCP+DNS劫持的钓鱼攻击
劫持dhcp造成Redhat、centos代码执行(CVE-2018-1111)
局域网环境下利用DHCP欺骗技术实现DNS劫持攻击
……


本网站博主