linux作业--第九周
1、简述DNS服务器原理,并搭建主--从服务器。
一、什么是DNS
DNS(domain name system)域名系统或者(domain named system)区域名称服务,分为正向与反向域名解析,适用C/S,端口53/udp,53/tcp,属于应用层协议;
作用:从网络来说,由于tcp/ip协议族是基于ip地址,所以需要一个翻译器即DNS;可以1对多也可以多对1,那么正向解析即域名解析为ip地址,反向解析即ip地址解析为域名。
DNS就是域名系统,是因特网中的一项核心服务,是用于实现域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP地址。通过主机名,得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。
域名结构
如上图所示,域名结构是树状结构,树的最顶端代表根服务器,根的下一层就是由我们所熟知的.com、.net、.cn等通用域和.cn、.uk等国家域组成,称为顶级域。网上注册的域名基本都是二级域名,比如baidu.com、taobao.com等等二级域名,它们基本上是归企业和管理。接下来是三级或者四级域名,总体概括来说域名是由整体到局部的机制结构。
DNS的查询方式
DNS解析流程:
1、本地主机查询本地dns缓存及本地hosts(/etc/hosts)文件中是否有www.bytesiu.com域名的记录,如果有直接使用,如果没有则会向本地自定义的dns服务器去请求(/etc/resolv.conf);
2、dns服务器收到主机请求则查询dns服务器本地是否有www.bytesiu.com域名的解析记录,如果有直接返回给客户端,如果没有则dns服务器直接向根服务器(.)请求查询;
3、根服务器(.)收到dns服务器的查询请求发现是查询.com域的信息,然后根服务器则返回.com域的服务器ip给到dns服务器;
4、dns服务器收到.com的服务器IP,则再次向.com的服务器请求bytesiu.com的域名服务器ip;
5、dns服务器收到bytesiu.com域名服务器IP则直接再次请求bytesiu.com域名服务器,查询www的解析记录;
6、dns服务器查询到www.bytesiu.com的解析记录后则直接返回给客户端并自己缓存此记录;
7、客户端主机则拿到www.bytesiu.com的ip就直接访问到目标主机了,并缓存了此解析记录;(2-7阶段是递归查询)
DNS的查询方式有两种,分别为递归查询(recursion)和迭代查询(iteration)。
递归查询:客户端发起一个DNS解析请求,若本地DNS服务器不能为客户端直接解析域名,则域名服务器会代替客户端(下级服务器)向域名系统中的各分支的上下级服务器进行递归查询,直到有服务器响应回答了该请求后,将该请求结果返回客户端。在此期间,客户端将一直处于等待状态。
迭代查询:客户端(下级服务器)发起一个DNS解析请求后,若上级DNS服务器并不能直接提供该DNS的解析结果,则该上级DNS服务器会告知客户端(下级服务器)另一个可能查询到该DNS解析结果的DNS服务器IP,客户端(下级服务器)再次向这个DNS服务器发起解析请求,如此类推,直到查询到对应的结果为止。
通常递归查询这种方式用于PC机与本地DNS服务器之间的查询,而迭代查询则多用于DNS服务器之间的查询
主--从服务器搭建过程
1、编辑/etc/named.conf,启用本机指定网口监听53端口号、指定网口接收DNS查询请求,并允许接收指定备用DNS的区域传送;
vim /etc/named.conf
options {
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
};
systemctl enable --now bind
2、编辑/etc/named.rfc1912.zones文件,设置区域信息;
zone "bytesiu.com" {
type master;
file "bytesiu.com.zone";
};
3、新建zone文件,/var/named/bytesiu.com.zone,添加SOA,NS,A,MX等记录,实现正向解析;
[root@localhost ~]# cd /var/named/
[root@localhost named]# ls
data dynamic named.ca named.empty named.localhost named.loopback slaves
[root@localhost named]# cp -p named.localhost bytesiu.com.zone
[root@localhost named]# ll bytesiu.com.zone
-rw-r----- 1 root named 152 Jun 21 2007 bytesiu.com.zone
##vim bytesiu.com.zone
$TTL 1D
@ IN SOA master.bytesiu.com. gun.bytesiu.com. (
2 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
NS slave
master A 192.168.42.200
slave A 192.168.42.100
www CNAME cdn.bytesiu.com.
cdn A 192.168.42.100
db A 192.168.42.201
k8snode1 A 192.168.42.202
K8snode2 A 192.168.42.203
* A 192.168.42.100
@ A 192.168.42.100
@ MX 10 mail1
@ MX 10 mail2
mail1 A 192.168.42.206
mail2 A 192.168.42.207
注:
泛域名解析写法: * A 192.168.42.100
例:wwww.bytesiu.com
若访问 bytesiu.com
则应该写为: @ A 192.168.42.100
4、使用named-checkconf、named-zone检查服务端配置、区域文件配置。
[root@localhost ~]# named-checkconf #检查配置文件
[root@localhost ~]# named-checkzone bytesiu.com /var/named/bytesiu.com.zone
zone bytesiu.com/IN: loaded serial 0
OK
5、实现反向解析区域
vim /etc/named.rfc1912.zones
zone "42.168.192.in-addr.arpa" {
type master;
file "192.168.42.zone";
};
/var/named/ 目录下
# cp -p named.loopback 192.168.42.zone
##vim 192.168.42.zone
$TTL 1D
@ IN SOA master.bytesiu.com. rname.invalid. (
3 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master.bytesiu.com.
NS slave.bytesiu.com.
200 PTR master.bytesiu.com.
100 PTR slave.bytesiu.com.
100 PTR www.bytesiu.com.
201 PTR db.bytesiu.com.
6、搭建从DNS服务器
从服务器上进行如下配置
[root@localhost ~]# yum install -y bind
vim /etc/named.conf
options {
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
};
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "bytesiu.com" { //正向解析
type slave;
masters {192.168.42.200;}; //主服务器的IP地址
file "slaves/bytesiu.com.slave"; //拉取到的主服务器配置文件保存目录
};
zone "42.168.192.in-addr.arpa" { //反向解析
type slave;
masters {192.168.42.200;};
file "slaves/192.168.42.zone";
};
主服务器上面进行如下配置
[root@localhost ~]# vim /var/named/bytesiu.com.zone
NS master
NS slave
master A 192.168.42.200
slave A 192.168.42.100
[root@localhost ~]# vim /var/named/192.168.42.zone
NS master.bytesiu.com.
NS slave.bytesiu.com.
200 PTR master.bytesiu.com.
100 PTR slave.bytesiu.com.
注:每一次修改完配置文件后,应将版本号相对应的加一
1 ; serial
7、使用systemctl start named或rndc启动DNS服务
[root@localhost ~]# rndc reload
server reload successful
[root@localhost ~]# systemctl enable --now named
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.
CentOS启用DNS客户端缓存
yum install -y nscd
systemctl enable --now nscd
nscd -g 查看缓存
注:ubuntu 默认会启用DNS客户端缓存
#清除DNS客户端缓存
[root@localhost ~]# nscd -i hosts
设置不允许其它主机进行区域信息数据的传输
从服务器上面配置:
vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
allow-transfer {none;};
测试结果:
主服务器测试:(正向解析)
[root@localhost ~]# dig www.bytesiu.com @192.168.42.200
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.8 <<>> www.bytesiu.com @192.168.42.200
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3049
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.bytesiu.com. IN A
;; ANSWER SECTION:
www.bytesiu.com. 86400 IN CNAME cdn.bytesiu.com.
cdn.bytesiu.com. 86400 IN A 192.168.42.100
;; AUTHORITY SECTION:
bytesiu.com. 86400 IN NS master.bytesiu.com.
bytesiu.com. 86400 IN NS slave.bytesiu.com.
;; ADDITIONAL SECTION:
master.bytesiu.com. 86400 IN A 192.168.42.200
slave.bytesiu.com. 86400 IN A 192.168.42.100
;; Query time: 0 msec
;; SERVER: 192.168.42.200#53(192.168.42.200)
;; WHEN: Sat Jan 22 20:17:12 CST 2022
;; MSG SIZE rcvd: 151
从服务器测试:(正向解析)
[root@localhost ~]# dig www.bytesiu.com @192.168.42.100
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.8 <<>> www.bytesiu.com @192.168.42.100
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62554
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.bytesiu.com. IN A
;; ANSWER SECTION:
www.bytesiu.com. 86400 IN CNAME cdn.bytesiu.com.
cdn.bytesiu.com. 86400 IN A 192.168.42.100
;; AUTHORITY SECTION:
bytesiu.com. 86400 IN NS slave.bytesiu.com.
bytesiu.com. 86400 IN NS master.bytesiu.com.
;; ADDITIONAL SECTION:
master.bytesiu.com. 86400 IN A 192.168.42.200
slave.bytesiu.com. 86400 IN A 192.168.42.100
;; Query time: 0 msec
;; SERVER: 192.168.42.100#53(192.168.42.100)
;; WHEN: Sat Jan 22 20:17:15 CST 2022
;; MSG SIZE rcvd: 151
主服务器测试:(反向解析)
[root@localhost ~]# dig -t ptr 100.42.168.192.in-addr.arpa @192.168.42.200
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.8 <<>> -t ptr 100.42.168.192.in-addr.arpa @192.168.42.200
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1944
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;100.42.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
100.42.168.192.in-addr.arpa. 86400 IN PTR www.bytesiu.com.
100.42.168.192.in-addr.arpa. 86400 IN PTR slave.bytesiu.com.
;; AUTHORITY SECTION:
42.168.192.in-addr.arpa. 86400 IN NS slave.bytesiu.com.
42.168.192.in-addr.arpa. 86400 IN NS master.bytesiu.com.
;; ADDITIONAL SECTION:
master.bytesiu.com. 86400 IN A 192.168.42.200
slave.bytesiu.com. 86400 IN A 192.168.42.100
;; Query time: 1 msec
;; SERVER: 192.168.42.200#53(192.168.42.200)
;; WHEN: Sat Jan 22 21:07:15 CST 2022
;; MSG SIZE rcvd: 172
从服务器测试:(反向解析)
[root@localhost ~]# dig -t ptr 100.42.168.192.in-addr.arpa @192.168.42.100
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.8 <<>> -t ptr 100.42.168.192.in-addr.arpa @192.168.42.100
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23509
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;100.42.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
100.42.168.192.in-addr.arpa. 86400 IN PTR www.bytesiu.com.
100.42.168.192.in-addr.arpa. 86400 IN PTR slave.bytesiu.com.
;; AUTHORITY SECTION:
42.168.192.in-addr.arpa. 86400 IN NS master.bytesiu.com.
42.168.192.in-addr.arpa. 86400 IN NS slave.bytesiu.com.
;; ADDITIONAL SECTION:
master.bytesiu.com. 86400 IN A 192.168.42.200
slave.bytesiu.com. 86400 IN A 192.168.42.100
;; Query time: 1 msec
;; SERVER: 192.168.42.100#53(192.168.42.100)
;; WHEN: Sat Jan 22 20:57:13 CST 2022
;; MSG SIZE rcvd: 172
2、搭建并实现智能DNS。
CDN (全称 Content Delivery Network),即内容分发网络
构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN 的关键技术主要有内容存储和分发技术,应用CDN后,DNS 返回的不再是 IP 地址,而是一个CNAME(Canonical Name ) 别名记录,指向CDN的全局负载均衡
CNAME实际上在域名解析的过程中承担了中间人(或者说代理)的角色,这是CDN实现的关键
简单来讲,CDN就是根据用户位置分配最近的资源
操作步骤:
测试IP:eth0 192.168.42.102、172.16.10.102
DNS服务器IP:beijing:192.168.42.200、wuhan:172.16.10.200
DNS服务器上做如下配置:
vim /etc/named.conf
#在文件最前面加下面行
配置acl
acl beijingnet {
192.168.42.0/24;
};
acl wuhannet {
172.16.10.0/24;
};
配置区域配置文件(定义两套区域配置文件)
[root@localhost ~]# cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bj
[root@localhost ~]# cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.wh
vim /etc/named.rfc1912.zones.bj
zone "." IN {
type hint;
file "named.ca";
};
zone "bytesiu.com" {
type master;
file "bytesiu.com.zone.bj";
};
vim /etc/named.rfc1912.zones.wh
zone "." IN {
type hint;
file "named.ca";
};
zone "bytesiu.com" {
type master;
file "bytesiu.com.zone.wh";
};
配置区域数据库文件
cp -p /var/named/bytesiu.com.zone /var/named/bytesiu.com.zone.bj
cp -p /var/named/bytesiu.com.zone /var/named/bytesiu.com.zone.wh
vim /var/named/bytesiu.com.zone.bj
www CNAME cdn.bytesiu.com.
cdn A 192.168.42.100
vim /var/named/bytesiu.com.zone.wh
www CNAME cdn.bytesiu.com.
cdn A 172.16.10.100
将ACL和区域数据库实现对应关系,以实现智能DNS
[root@localhost ~]# vim /etc/named.conf
view beijingview {
match-clients { beijingnet; };
include "/etc/named.rfc1912.zones.bj";
};
view wuhanview {
match-clients { wuhannet; };
include "/etc/named.rfc1912.zones.wh";
};
#include "/etc/named.rfc1912.zones";
[root@localhost ~]# rndc reload
server reload successful
查看DNS解析结果:
bj
[root@localhost ~]# dig www.bytesiu.com @192.168.42.200
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.8 <<>> www.bytesiu.com @192.168.42.200
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30859
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.bytesiu.com. IN A
;; ANSWER SECTION:
www.bytesiu.com. 86400 IN CNAME cdn.bytesiu.com.
cdn.bytesiu.com. 86400 IN A 192.168.42.100
;; AUTHORITY SECTION:
bytesiu.com. 86400 IN NS master.bytesiu.com.
bytesiu.com. 86400 IN NS slave.bytesiu.com.
;; ADDITIONAL SECTION:
master.bytesiu.com. 86400 IN A 192.168.42.200
slave.bytesiu.com. 86400 IN A 192.168.42.100
;; Query time: 5 msec
;; SERVER: 192.168.42.200#53(192.168.42.200)
;; WHEN: Sun Jan 23 20:12:43 CST 2022
;; MSG SIZE rcvd: 151
wh
[root@localhost ~]# dig www.bytesiu.com @172.16.10.200
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.8 <<>> www.bytesiu.com @172.16.10.200
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64300
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.bytesiu.com. IN A
;; ANSWER SECTION:
www.bytesiu.com. 86400 IN CNAME cdn.bytesiu.com.
cdn.bytesiu.com. 86400 IN A 172.16.10.100
;; AUTHORITY SECTION:
bytesiu.com. 86400 IN NS slave.bytesiu.com.
bytesiu.com. 86400 IN NS master.bytesiu.com.
;; ADDITIONAL SECTION:
master.bytesiu.com. 86400 IN A 192.168.42.200
slave.bytesiu.com. 86400 IN A 192.168.42.100
;; Query time: 0 msec
;; SERVER: 172.16.10.200#53(172.16.10.200)
;; WHEN: Sun Jan 23 20:13:42 CST 2022
;; MSG SIZE rcvd: 151
3、使用iptable实现: 放行ssh,telnet, ftp, web服务80端口,其他端口服务全部拒绝
iptables -I INPUT -p tcp -m multiport --dports 21,22,23,80 -j ACCEPT
iptables -A INPUT -j REJECT
4、NAT原理总结
IP地址分为公网IP与私网IP。一般情况下,在互联网中,公网IP可直接访问,私网IP无法直接访问。而NAT则是将私网IP地址转换为公网IP地址(将IP报文头部的私网IP地址改为可以提供访问的公网IP地址),从而实现用户上网功能或服务器在互联网上提供服务。NAT还可以使得一个公网IP代表多个不同的内网IP,这样便节省了IP地址资源。
SNAT与DNAT区别
SNAT是私网访问外网时,报文中源IP地址(私网IP地址)转换为公网IP地址过程。此转换可以使用静态、动态等转换方式,且内部的多台主机共用同一公网IP地址进行外网访问。
DNAT是外网访问私网时,报文中目的IP地址(公网IP地址)转换为私网IP地址过程。此转换过程可以使用静态、动态、端口等转换方式。
5、iptables实现SNAT和DNAT,并对规则持久保存。
实现SNAT和DNAT都需要开启内核数据转发功能
开启ip_forward转发功能
#echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
生效
#sysctl -p
查看
[root@localhost ~]# sysctl -a |grep ip_forward
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0
SNAT与DNAT
SNAT
iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -j SNAT --to-source 192.168.159.4
iptables -t nat -A POSTROUTING -s 192.168.42.0/24 ! -d 192.168.42.0/24 -j MASQUERADE
DNAT
iptables -t nat -A PREROUTING -d 192.168.159.134 -p tcp --dport 80 -j DNAT --to-destination 192.168.42.105
iptables -t nat -A PREROUTING -d 192.168.159.134 -p tcp --dport 80 -j DNAT --to-destination 192.168.42.105:8080
对规则持久保存
yum install -y iptables-services
systemctl status iptables
systemctl start iptables
systemctl enable iptables
iptables-save > /etc/sysconfig/iptables
或
设置开机自动加载
/etc/rc.d/rc.local
在/etc/rc.d/rc.local文件添加
iptables-restore < /PATH/IPTABLES_RULES_FILE
加载规则列表
iptables-restore < /etc/sysconfig/iptables
linux作业--第九周的更多相关文章
- linux作业--第一周
1.按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别. 目前三大主流发行版分别为Debian.Redhat.SUSE. redhat: RHEL: Red Hat公司发布的面向企业用户的 ...
- linux作业--第二周
1.显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录 ls /etc/ | grep ^[^[:alpha:]][[:alpha:]].* 2.复制/etc目录下 ...
- Linux入门-第九周
1.判断UID是否大于等于500,如果为真就显示为普通用户,如果为假就显示为系统或管理用户 AWK简介:awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报 ...
- 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业
2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...
- 2017-2018-1 20179205《Linux内核原理与设计》第九周作业
<Linux内核原理与设计>第九周作业 视频学习及代码分析 一.进程调度时机与进程的切换 不同类型的进程有不同的调度需求,第一种分类:I/O-bound 会频繁的进程I/O,通常会花费很多 ...
- 2019-2020-1 20199325《Linux内核原理与分析》第九周作业
第九周作业要求: 理解Linux系统中进程调度的时机,可以在内核代码中搜索schedule()函数,看都是哪里调用了schedule(),判断我们课程内容中的总结是否准确: 使用gdb跟踪分析一个sc ...
- 2019-2020-1 20199329《Linux内核原理与分析》第九周作业
<Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二 ...
- 2020-2021-1 20209307 《Linux内核原理与分析》第九周作业
这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)> 这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第九周作业> 这个作业的目标 & ...
- 20169207《Linux内核原理与分析》第九周作业
第九周的实验依旧和往常的一样,主要包括两部分.一是1.阅读学习教材「Linux内核设计与实现 (Linux Kernel Development)」第教材第13,14章.二是学习MOOC「Linux内 ...
随机推荐
- NOI Online 2021 入门组 T1
Description 题目描述 Alice.Bob 和 Cindy 三个好朋友得到了一个圆形蛋糕,他们打算分享这个蛋糕. 三个人的需求量分别为 \(a, b, c\),现在请你帮他们切蛋糕,规则如下 ...
- python开发: linux进程占用物理内存
#!/usr/bin/env python #-*- coding:utf-8 -*- ''' 统计linux进程占用的物理内存 ''' import os import sys import sub ...
- 调试程序Bug-陈棚
1.使用NSAssert 主要可以作为自定义bug的返回信息,对调试极为方便知道bug出现在哪 NSAssert()只是一个宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递条件表达式 ...
- IT职业技能图谱:架构师、H5、DBA、移动、大数据、运维...
转载 作者:StuQ 文章收藏自微信:InfoQ 时隔近5个月,StuQ的小伙伴们再次出品了IT职业技能图谱更新版.这回除更新之前版本外,还添加了架构师.HTML 5.DBA等新的职业技能图谱.正 ...
- 虫师Selenium2+Python_6、Selenium IDE
P155--创建测试用例 录制脚本 编辑脚本 定位辅助 P159--Selenium IDE 命令 在浏览器中打开URL,可以接受相对路径和绝对路径两种形式 open open(url) 单击链接 ...
- ASP.NET Core 6框架揭秘实例演示[02]:基于路由、MVC和gRPC的应用开发
ASP.NET Core可以视为一种底层框架,它为我们构建出了基于管道的请求处理模型,这个管道由一个服务器和多个中间件构成,而与路由相关的EndpointRoutingMiddleware和Endpo ...
- logger模块和re模块总结
很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...
- 如何对Spring MVC中的Controller进行单元测试
对Controller进行单元测试是Spring框架原生就支持的能力,它可以模拟HTTP客户端发起对服务地址的请求,可以不用借助于诸如Postman这样的外部工具就能完成对接口的测试. 具体来讲,是由 ...
- 「BUAA OO Pre」Git生成多个ssh key并连接GitLab仓库
「BUAA OO Pre」Git生成多个ssh key并连接GitLab仓库 Part 0 前言 写作背景 笔者在配置学校GitLab的ssh key时遇到一些问题,原因应为曾经配置过GitHub的s ...
- 类中的__getattr__ 与 __setattr__ 魔法方法
1.__getattr__ 当我们访问一个不存在的属性的时候,会抛出异常,提示我们不存在这个属性.而这个异常就是__getattr__方法抛出的,其原因在于他是访问一个不存在的属性的最后落脚点,作为异 ...