6_计算机网络_应用层-HTTP-DNS-跳板机


1、 抓包工具

如何知道用户访问过来?
(1)日志
(2)netstat
(3)抓包工具tcpdump
在这里插入图片描述
ip地址
src host --》 source host 源地址
dst host --》destination host 目的地址
host --》不区分源或者目的ip
端口:
src port、 dst port、 port(不区分源和目的地)
协议
arp/icmp(网路层)、 tcp/udp(传输层)

tcpdump

tcpdump 是一个linux里的抓包工具。
执行tcpdump指令可列出经过指定网络界面的数据包文件头,在Linux操作系统中,你必须是系统管理员。
常用选项
-n 以数字的形式显示,不把主机的网络地址转换成名字
-nn指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示
-w 把数据包数据写入指定文件文件
-i 监视指定网络接口的数据包
-p 将网卡设置为非混杂模式,不能与host或broadcast一起使用

[root@slave-mysql ~]# tcpdump  -i ens33  -p  tcp  and  src host 192.168.0.237  and  dst port 80  -nn 以数字的形式显示

[root@slave-mysql ~]# tcpdump  -i ens33  -p  tcp  and  src host 192.168.0.237  and  dst port 80  -nn -w web.data
[root@slave-mysql ~]# tcpdump  -i ens33 -p arp

2、HTTP

http VS https

http是明文传输、https是密文传输;
http协议基于TCP协议进行传输的、默认端口80;
https协议基于TSL/SSL协议加密进行TCP传输的;
(https 相比http 多了一层SSL/TLS)

SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。
TLS(Transport Layer Security,传输层安全):其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2

所以 HTTP 传输面临的风险有:
(1) 窃听风险:黑客可以获知通信内容。
(2) 篡改风险:黑客可以修改通信内容。
(3) 冒充风险:黑客可以冒充他人身份参与通信。

http 协议

http是什么?做什么用的?
超文本传输协议(Hyper Text Transfer Protocol)
作用: 在网络上传输web页面
http协议是在浏览器和web服务器之间使用,用来传输网页。

所有的浏览器都能懂http协议。
爬虫模块:python,java里的,都能读懂http协议

所有的web服务器: nginx,tomcat,IIS,python web,go web框架,java web框架都能读懂http协议
浏览器可以读懂html语言,将拿到的Index.html文件在浏览器里渲染(呈现,展示,显示)

site 站点: 一个网站
报文 segment Message datagram : 封装了数据的数据 --》容器
段: 传输层的数据格式

请求包 request
user-agent: 用户代理: 就是帮助用户去访问网页的代理工具–》其实就是我们的浏览器
响应包 response

http特点

1、简单快速
2、灵活
3、无状态
每次请求都是独立的,
上一次请求和下一次请求互不相干。
比如,你登录了某个网站,下一次请求理论上来说就不需要再登录了。
http是无状态的,它不能知道你上一次请求已经登录过了。所以需要借助其他东西来完成这个登录认证(session、cookie)。

无状态: 是web服务器端的nginx不知道你的请求时第1次来请求,还是第2次,第3次 新的请求还是旧的请求

有状态: 服务器收集了客户端的数据,记录了它的信息,通过这些信息可以判断你是老用户还是新用户

http版本

1、0.9版本 GET方法
2、1.0 POST HEAD 方法
3、1.1 PUT、OPTIONS、DELETE等方法,引用了持久连接
4、2.0 效率快,吞吐快
二进制分帧(Binary Format)- http2.0的基石
多路复用 – 一个连接内可以处理多个请求,同时进行请求和响应
头部压缩 –
优先级 –
服务器端推流 (html,js,css) - index.html

#在1.1之前 ,每次请求都会新建一个tcp连接

0.9–》不支持长连接
1.1 --》支持长连接,传输的数据是文本格式
2.0 --》比较新的,速度更加快,数据格式二进制,多路复用(提升效率)

http 工作原理

http工作流程和原理
在这里插入图片描述
注意:
连接:
长连接: 长时间连接–》保持一段时间,然后再四次断开 --》nginx —》 keepalive_timeout 65;
短连接: 短时间连接–》事情完成就进行四次断开

session和cookie

会话保持。
session和cookie技术: 可以保留用户的信息(比如用户名、密码等)

会员卡(cookie): web服务器让浏览器保存用户的信息–》信息保存到客户端–》放到浏览器的cookie(存放数据的地方)
人脸识别系统(session ):用户的信息保存在服务器端–》数据库–》内存里的一个数据结构。

需要消耗更多的资源维护session, 容易遭受csrf攻击
token验证 – 它会将token放在url的参数后面

cookie在请求报文和响应报文里面都有;
响应报文里:服务器让客户机保存什么东西;
请求报文里:客户机携带什么数据给服务器;

http请求报文

在这里插入图片描述

get/post方法

都是客户机想获取服务器的资源—》用来告诉服务器的方法
GET: 在URL里可以看到,同时携带的信息有限不能很多
POST:不在URL里显示,是通过表单传输,可以携带更加多的信息
GET和POST方法的区别?

Connection: keep-alive --》长连接有效
closed 连接已经断开
Host: 192.168.0.127 --》服务器的ip或者域名
User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Mobile
Safari/537.36 --》浏览器
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate——》是否支持压缩和解压缩
Accept-Language: zh-CN,zh;q=0.9

首部字段

就是请求报文的头部封装里需要封装的内容,是可以自己调整的,可增加也是可以减少–》变化的

cookie : 可选的首部字段–》携带的信息

host:
user-agent:
method
http1.1
URL
ACCEPT:

http响应报文

在这里插入图片描述

root@iZwz9hqlrezjnsz3968bz2Z:/#yum  install  go  -y #安装go语言环境
root@iZwz9hqlrezjnsz3968bz2Z:/# go version  #查看go语言环境的版本
go version go1.17.6 linux/amd64
[root@slave-mysql html]# mkdir /sanchuang
[root@slave-mysql html]# cd /sanchuang/
[root@slave-mysql sanchuang]# vim server.go  # 编写脚本
package main
import (
	"fmt"
	"net/http"
)
// 定义一个处理函数
func handler(writer http.ResponseWriter, request *http.Request) {
	fmt.Fprintf(writer, "Hello,world, %s !", request.URL.Path[1:])
}

//   http://119.13.90.106:8080/fengdeyong
// 定义main函数
func main() {
	http.HandleFunc("/", handler)
	http.ListenAndServe(":8080", nil)
}
root@hk-tea-lian:/feng-go/first_webapp# go build server.go 将server.go 编译成二进制文件 server
root@hk-tea-lian:/feng-go/first_webapp# ls
server  server.go
[root@slave-mysql sanchuang]# ./server &  #执行server程序
[1] 22980  

root@hk-tea-lian:/feng-go/first_webapp# netstat -anplut|grep server
Active Internet connections (servers and established)
tcp6       0      0 :::8080                 :::*                    LISTEN      306836/./server     
root@hk-tea-lian:/feng-go/first_webapp# 
[root@slave-mysql sanchuang]# ps aux|grep server
root       20601  0.0  0.2  38624  5292 ?        Ss   11:12   0:00 /usr/libexec/openssh/sftp-server
root       20671  0.0  0.2  40476  4944 ?        Ss   11:19   0:00 /usr/libexec/openssh/sftp-server
root       22980  0.4  0.5 1016688 9256 pts/2    Sl   17:49   0:00 ./server
root       22986  0.0  0.0  12348  1152 pts/2    S+   17:49   0:00 grep --color=auto server
[root@slave-mysql sanchuang]# netstat -anplut|grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      22980/./server      
[root@firewall ~]# cat snat_dnat.sh 
#!/bin/bash
iptables -F
iptables -t nat -F
#stop firewalld service
service firewalld stop

#open routing function
echo  1 > /proc/sys/net/ipv4/ip_forward

#setting  snat policy
iptables  -t  nat  -A POSTROUTING  -s 192.168.88.0/24  -o ens33  -j SNAT --to-source 192.168.0.127

#setting dnat policy distribute  web
iptables -t nat -A PREROUTING   -d 192.168.0.127 -p tcp --dport 80  -i ens33 -j DNAT  --to-destination 192.168.88.27
iptables -t nat -A PREROUTING   -d 192.168.0.127 -p tcp --dport 8080  -i ens33 -j DNAT  --to-destination 192.168.88.27:8080
#setting dnat policy distribute  ssh
iptables -t nat -A PREROUTING   -d 192.168.0.127 -p tcp --dport 2233  -i ens33 -j DNAT  --to-destination 192.168.88.22:22

https建立连接

1、发送client hello,建立连接请求;
客户端自己支持的协议、版本号、加密算法等
2、服务器回复 server hello;
确定协议、版本号、加密算法、证书(包含了公钥)
3、客户端收到证书之后,验证合法性,验证不通过就是发出警告;
4、客户端生成随机密码,然后用公钥加密,发送给服务器;
5、服务器收到加密后的密文,用私钥解密。获取随机密码;
6、之后再使用随机密码生成秘钥进行对称加密通信;

搭建https(野鸡证书)

1、安装nginx

   yum install  nginx -y

2、生成证书

   #创建一个目录专门存放证书相关文件
   cd /etc/nginx/sslcert
   #生成证书密钥对
   #实际上 server.key 中同时包含了公钥和私钥的信息
   openssl genrsa -out server.key 2048
   #使用下面命令可以导出公钥(可不操作,视情况而定)
   openssl rsa -in server.key -pubout -out server-public.key
   #生成证书请求server.csr
   openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=HN/L=HN/O=cetc/OU=cetc/CN=www.baidu.com" 
   #生成证书server.crt
   openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

3、编辑nginx配置文件

[root@localhost conf.d]# cat sc.conf
server {
  listen 443 ssl;
  server_name www.sc.com;

  # ssl on; 上一个nginx版本这样写,现在直接加载监听端口443后面
  ssl_certificate      /etc/nginx/sslcert/server.crt;  #指定数字证书,路径要指定正确
  ssl_certificate_key  /etc/nginx/sslcert/server.key;  #指定数字证书私钥文件,路径要指定正确

  location / {  # 提供某个路由的配置
         root  /usr/local/sclilin99/html; #  指定访问这个路由的根目录
         index hehe.html; # 指定首页
                  }
}
#生效配置

3、DNS服务

DNS (domain name system) 域名解析
安装dns服务软件包bind

[sanchuang@b ~]$ sudo yum install bind

前提

我们网络中都是使用ip地址通信,无论是访问服务,还是不同主机间进行数据交换。
ip地址非常多,如果每个服务都通过ip地址来登陆的话,用户就需要记住这些很复杂的ip地址,不方便用户使用。

就像保存在手机里的电话号码一样,会有一个备注,通过这个备注就可以找到正确的相应联系人的电话。
域名解析跟这个实现差不多,在普通用户中我们用域名来访问服务,域名就通过域名解析来获取到ip地址。
dns服务就像电话簿,提供了可以查询的域名到ip地址的映射关系。

FQDN(Full Qualified Domain Name),完全限定域名,即每个域在全球网络都是唯一的;
另外值得提到的一点是域并不是指诸如www.google.com这样的域名,而google.com才是域;

域的分类

一、根域(.
13组根域名服务器以英文字母A到M依序命名,域名格式为“字母.root-servers.net”
在/var/named/namd.ca文件中可以查看
二:顶级域
顶级域:顶级域(Top Level Domain,简称TLD)分为三类

  • 通用顶级域:诸如 .com(商业机构) .org(非营利性组织) .net(网络服务机构)等

  • 国家顶级域:诸如 .cn(中国) .uk(英国) .us(美国) .jp(日本) .hk

  • 反向域(基础建设顶级域):.arpa,即从IP到FQDN的反向解析

三:二三级域
二级域
三级域
www.sc.163.com -->顶级域.com -->163.com --> sc.163.com

DNS解析

正向解析:DNS——》IP
反向解析:IP——》DNS

常见域名解析命令

安装bind-utils软件包

[root@b named]# yum install bind-utils

1、ping

[root@b named]# ping www.baidu.com
PING www.a.shifen.com (14.215.177.39) 56(84) bytes of data.
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=1 ttl=55 time=15.0 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=2 ttl=55 time=14.3 ms

2、host

[root@b named]# host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 14.215.177.39
www.a.shifen.com has address 14.215.177.38

3、dig

 [root@b named]# dig www.baidu.com
	; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.2 <<>> www.baidu.com
	;; global options: +cmd
	;; Got answer:
	;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62633
	;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
	;; OPT PSEUDOSECTION:
	; EDNS: version: 0, flags:; udp: 512
	;; QUESTION SECTION:
	;www.baidu.com.			IN	A
	;; ANSWER SECTION:
	www.baidu.com.		40	IN	CNAME	www.a.shifen.com.
	www.a.shifen.com.	231	IN	A	14.215.177.39
	www.a.shifen.com.	231	IN	A	14.215.177.38

4、nslookup

 [root@b named]# nslookup www.baidu.com
	Server:		114.114.114.114
	Address:	114.114.114.114#53
	Non-authoritative answer:
	www.baidu.com	canonical name = www.a.shifen.com.
	Name:	www.a.shifen.com
	Address: 14.215.177.39
	Name:	www.a.shifen.com
	Address: 14.215.177.38
解析过程

1、先查找本地hosts文件(linux: /etc/hosts),可以解析就直接返回地址。
2、hosts文件不能解析,去找本地dns缓存,如果有则返回结果,没有就进行下一步查找。
linux下域名缓存:nscd服务
缓存会有缓存时间,缓存多久可以指定的

[root@b html]# yum install nscd
[root@b html]# service nscd restart  #清除缓存

3、本地缓存没有找到,就会去请求本地的域名服务器,本地域名服务器有就返回结果。
linux下指定域名解析服务器文件: /etc/resolv.conf

 [root@b html]# cat /etc/resolv.conf 
 # Generated by NetworkManager
 nameserver 114.114.114.114  # 第一个指定的nameserver 就是首选dns服务器
 #nameserver 8.8.8.8  # 剩下的都是备选dns服务器
 #nameserver 192.168.0.1

4、本地域名服务器没有找到相应记录,如果设置转发查找,就会去转发的服务器上去查询。
如果没有设置转发,或者都没有找到,就会去根域查找。
本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。
本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。
当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机
本地域名服务器——>转发服务器——>根域名服务器——>.com域服务器——>xx.com域服务器···——>www.xx.com
在这里插入图片描述

4、常见状态码

在这里插入图片描述

状态码含义解释
301永久重定向
302rewrite临时重定向 302Moved Temporarily
304not modified浏览器缓存里的内容和nginx服务器里的内容是一样的,直接从缓存里面取的数据
307临时重定向
400客户端语法错误
401用户登录验证失败
403Forbidden权限问题,服务器没有权限访问网页(用户禁止访问)
404not found网页不存在
405网页未授权不能访问(没有输入用户名密码等)、方法不被允许
499client has closed connection客户端关闭连接,nginx定义的状态码,可能是客户端处理不过来
500Internal Server Error服务器内部错误,无法完成请求
501Not Implemented服务器不支持请求的功能,无法完成请求
502Bad Gateway(网关故障)就是负载均衡器是好的,但是后端的real server挂了
503Service Temporarily Unavailable由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。延时的长度可包含在服务器的Retry-After头信息中
504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求
505HTTP Version not supportedhttp版本不被支持

5、 跳板机

在这里插入图片描述
堡垒机 = 跳板机 = 中控机

# 发布跳板机
iptables -t nat -A PREROUTING   -d 192.168.0.127 -p tcp --dport 2233  -i ens33 -j DNAT  --to-destination 192.168.88.27:22
#注:跳板机给办公人员用的 跳板机/堡垒机 为了保护系统的安全
#注:使用ssh-agent 访问跳板机和想要访问的主机
#注:使用场景 阿里的业务 本来有10万台主机(在局域网里面,没有外网,外部不能访问),我在家里,十万台机器捞出一台,这1台主机可以访问外网(跳板机/堡垒机),这1台跳板机的配置尤其重要
开启ssh-agent,把自己主机的公钥添加到目标主机和堡垒机下 (目标主机的权限和堡垒机的权限)
#注:连到A上,从A跳到B上,B不一定有当前主机的公私钥
#跳板机 安全加固:
不能使用root直接登录,使用sudo赋予相应权限
不能使用默认端口登录
不能使用密码登录,都使用公钥登录
添加防火墙配置

总结:
#跳板机
#安全加固
1、不能使用密码登录
2、不能使用root登录
3、修改默认端口
4、添加防火墙配置
5、使用跳板机登录
  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个手刹不太灵儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值