SRE 第三周作业

文章详细介绍了TCP/IP的三次握手和四次断开原理,包括每个状态的意义,并提到了OSI7层模型的相关协议。此外,还提供了Yum和Apt私服的搭建步骤,包括服务端的httpd配置、yum仓库的创建和客户端的配置,以及仓库的同步和软件安装测试。
摘要由CSDN通过智能技术生成

第一题 编程题 

1.使用函数重写,可以让用户选择当前主机的所有网卡。
2.选中网卡后,获取ip,网段,掩码。
3.通过ping命令检测在线的主机,打印在线的主机,写入一个文件中。
4.当ip的结尾是奇数时,在目标主机或当前主机,批量添加user1到user100用户,否则添加group1到group100,并生成对应的用户user1到user100,让用户的过期时间在1天之后。
5.要求每个小功能均封装为函数,有详细的错误处理,确保任何条件均可以正常执行完脚本,可以重复执行。
可能会使用while循环

#!/bin/bash
#
# fileName: worker.sh
# author: liAng
# mail: angl6112@163.com
# created: Tue 10 Jan 2023 10:07:53 PM CST
# 
### BEGIN INIT INFO
# Description:
# 1.选择网卡
# 2.打印ip,网段,掩码
# 3.通过ping命令检测在线的主机,打印在线的主机,写入ip.list中
# 4.当ip的结尾是奇数时,在目标主机或当前主机,批量添加user1到user100用户,否则添加group1到group100,并生成对应的用户user1到user100,让用户的过期时间在1天之后
### END INIT INFO

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
SKYBLUE='\033[0;36m'
PLAIN='\033[0m'

#明天的日期
tomorrow=$(date -d '+1 day' +%F)

ip_file="ip.list"
> $ip_file

function select_netcard(){
   
	netcard_list=$(ip a | grep -E '^[0-9]{1,3}' | cut -d'<' -f1 | sed -E 's/(.*):/\1/')
	cat  <<EOF
网卡列表:
$netcard_list
EOF
    
	read -p '请输入网卡编号: ' netcard_num
	echo
	netcard=$(ip a |grep "^$netcard_num:" |sed -E "s/^$netcard_num: (.*): <.*/\1/")

}


function print_netinfo() {
	# iP
	#ipaddr=$(ifconfig $netcard | sed -n '/^\s*inet /p' | sed -E 's/.*inet ([0-9]{3}.*)\s+ netmask.*/\1/')
	ipaddr=$(ip -4 a show $netcard | grep '\s*inet ' |sed -E 's#\s*inet (.*)/.*#\1#')
	# 掩码
    netmask=$(ifconfig $netcard | grep "inet $ipaddr" | sed -E 's/.* netmask ([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}) .*/\1/')
	# 掩码长度
	prefix=$(ip -4 a show $netcard | grep "\s*inet $ipaddr/" |sed -E 's/.*\/(.*) brd .*/\1/')
	# 网段, 假设24位网段
	network=$(sed -E 's/(.*\.)[0-9]{1,3}/\10/' <<<$ipaddr)

cat <<EOF
$netcard的网络信息:
ip地址: $ipaddr
子网掩码: $netmask
网段: $network/$netmask

EOF
}


function ping_scan() {
	# ping网段内的所有ip
	echo -e "$GREEN正在检测在线主机...$PLAIN"
	for n in {1..3} # {1..254}
	do
		ip="$(sed -E 's/^(.*\.)[0-9]{1,3}$/\1/' <<<$network)$n"
		ping -c 3 $ip &>/dev/null  
		if [ $? -eq 0 ];then
			echo -e "$YELLOW$ip$PLAIN" | tee -a $ip_file
		fi
	done
}


function add_user() {
	
	#while read ip;
	#do
	#	echo $ip
	#done <$ip_file
    
	echo -e "$GREEN正在添加账户...$PLAIN"
	# 添加账户, 改为检查本机的IP类型, 添加本机账户
	n=$(sed -E 's/.*\.([0-9]{1,3}$)/\1/' <<<$ipaddr)
	let "res=$n & 1"
	echo -e "$GREEN开始添加账户, 请稍后...$PLAIN"
	if [ "$res" -eq 1 ];then
		# 奇数
		echo user{1..10}|xargs -n1 useradd
	else
		# 偶数
		echo group{1..10} | xargs -n1 groupadd
		# 添加账户,指定主要组,并设置明天过期
		seq 10 | xargs -i useradd -g group{} -e $tomorrow user{}
	fi
}


function main() {
	select_netcard
    print_netinfo
	ping_scan
	add_user
}


main

第二题  总结TCP/IP 三次握手,4次断开原理,重点是出现状态代表什么含义,需要画图

三次握手:

tcp连接是双向的, 客户端建立到服务端的连接, 服务端也需要建立到客户端的连接。

 ①客户端发送SYN=1, seq=x 的数据包请求建立tcp连接,然客户端进入 SYN_SEND状态等待服务端的ack确认; seq用来在发送方标识这个数据包

②服务端收到SYN的数据包后, 回复ACK=1的数据包表示同意建立 “客户端--->服务端” tcp连接, 同时将SYN为也置为1表示也要和客户端建立tcp连接; 这个数据包中的seq=y在服务端标识这个数据包, 同时ack=(x+1) 表示 “告诉客户端 seq=x的数据包我已经收到, 下次发seq=(x+1)的数据包 ” ; 并进入SYN_RECVD状态, 等待客户端回复ack

③客户端接收到服务端 ACK SYN报文后, 回复ACK=1的报文, 表示同意建立 “服务端--->客户端的tcp连接”  , 同时回复数据包的seq=x+1是上次服务端要求的数据包, ack=y+1表示服务端发送的seq=y的数据包我已收到, 下次发送seq=y+1的包给我客户端进入ESTABLISHED状态, 服务端在收到客户端回复的ACK后也进入ESTABLISHED状态, 至此TCP连接建立完成。

 四次挥手:

 第三题 总结OSI 7层模型及对应的协议,需要画图

第四题 搭建Yum/apt私服

4.1 配置服务端, 安装httpd服务

服务端配置:

# 1.安装httpd
yum -y install httpd

# 2.启动httpd服务
systemctl enable --now httpd

# 3.创建数据目录
mkdir /var/www/html/centos/8 -pv

 使用浏览器打开IP地址检查下httpd是否运行正常

4.2 搭建yum仓库

例一、使用光盘镜像创建yum仓库

# 准备rpm包, rpm可以使用本地光盘镜像直接挂载镜像复制即可; 也可以使用网络yum源中的, 但是需要手动拉取。

# 使用光盘镜像
mount /dev/sr0 /mnt/
cp -a /mnt/* /var/www/html/centos/8

 检查下文件内容:


 

例二、同步公网yum源


# 同步公网yum 源
# 需要在服务端先配置好公网yum源, 开始同步extras仓库, 同步其他仓库更改名称即可。
dnf reposync --repoid=extras --download-metadata -p /var/www/html/centos

 --repoid: 指定要同步的yum 仓库; 这里测试使用同步的extras仓库

注意: 如果没有使用 --download-metadata 参数,则不会同步repodata, 这时候需要手动生成repodata。

Package目录中存放安装的rpm包, repodata中存放元数据文件这里面保存了rpm包的依赖关系, 当客户端使用yum或dnf安装rpm包时, 会自动下载repodata的元数据, 在其中查询软件包的依赖关系, 自动从Package目录中找到相关包下载安装。

4.3 配置客户端使用本地yum仓库

在客户端上添加repo配置, 指向搭建的yum服务器

cd /etc/yum.repos.d/
mkdir bak
mv *.repo bak/
yum clean all

# 例一、使用本地镜像的yum仓库配置 

cat >/etc/yum.repos.d/local.repo<<EOF
[BaseOS]
name=BaseOS
#url写repodata所在的目录
baseurl=http://192.168.0.201/centos/8/BaseOS  
#关闭包校验
gpgcheck=0

[AppStream]
name=Appstream
#url写repodata所在的目录
baseurl=http://192.168.0.201/centos/8/AppStream/
#关闭包校验
gpgcheck=0
EOF

 # 例二、同步公网yum源的yum仓库配置

cat >/etc/yum.repos.d/local-extras.repo<<EOF
[extras]
name=extras
#url写repodata所在的目录
baseurl=http://192.168.0.201/centos/extras
#关闭包校验
gpgcheck=0
EOF

4.4 安装软件测试:

yum install cpaste -y

 4.5 设置计划任务, 定期同步yum仓库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值