- 使用函数重写,完成编程题,可以让用户选择当前主机的所有网卡,选中网卡后,获取ip,网段,掩码。通过ping命令检测在线的主机,打印在线的主机,写入一个文件中。当ip的结尾是奇数时,在目标主机或当前主机,批量添加user1到user100用户,否则添加group1到group100,并生成对应的用户user1到user100,让用户的过期时间在1天之后。 要求每个小功能均封装为函数,有详细的错误处理,确保任何条件均可以正常执行完脚本,可以重复执行。 可能会使用while循环
#!/bin/bash
#提取网卡
extract_eth () {
ifconfig | grep flags | tr ':' '\n' |sed -n '1~2p'
}
#提取IP及网段
extract_IP () {
ip a show | grep inet | head -1 | tr -s " " | cut -d " " -f3
}
#提取掩码
extract_mask () {
ifconfig | grep netmask | head -1 | tr -s " " ":" | cut -d ":" -f5
}
#选择网卡
select_eth () {
read -p "请选择网卡:" NAME
}
#打印选择的网卡IP、网段、掩码
print_eth () {
extract_IP
extract_mask
echo ${IP}${MASK}
}
extract_eth
select_eth
print_eth
#!/bin/bash
#打印在线主机
ping_online () {
P_online=`ping 10.0.0.$i -c1 -w2 | grep received | cut -d"," -f2`
if [ '$P_online' = "1 received" ]; then
echo "10.0.0.$i is online" &>> /data/ip-online
else
1>/dev/null 2>&1
echo "10.0.0.$i is offline"
fi
}
#通过ping命令检测在线的主机
ping_IP () {
i=1
ping_online
while ((i<254));do
let i++
ping 10.0.0.$i -c1 -w2 1>/dev/null 2>&1
ping_online
done
}
#批量添加user1到user100用户
add_users () {
a=1
useradd user$a
while ((a<100));do
let a++
useradd user$a
done
}
#添加group1到group100,并生成对应的用户user1到user100,让用户的过期时间在1天之后
add_groups () {
b=1
groupadd group$b
while ((b<100));do
let b++
groupadd group$b
useradd -g -e 'date -d day+1 +%F' user$b
done
}
#判断奇偶,生成用户或组
parity_create () {
IP=`cut -d" " -f1 /data/ip-online`
c=cut -d"." " " -f4 $IP
if [ $c%2=0 ]; then
add_users
echo "用户生成完成!"
else
add_groups
echo “用户和组生成完成!”
fi
}
ping_IP
parity_create
- 总结TCP/IP 三次握手,4次断开原理,重点是出现状态代表什么含义,需要画图
第一次握手:客户端给服务器发送一个SYN报文,并指明客户端并指明客户端的初始化序列号 ISN(c)。此时客户端处于 SYN_Send 状态。
第二次握手:服务器收到SYN报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s),同时会把客户端的 ISN+1作为 ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_REVD 的状态。
第三次握手:客户端收到SYN+ACK报文后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 establised 状态。
服务器收到 ACK 报文之后,也处于 establised 状态,此时,双方以建立起了链接。
第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于FIN_WAIT1状态。
第二次握手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值+1作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT状态。
第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于LAST_ACK 的状态。
第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值+1作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态
服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。
- 总结OSI 7层模型及对应的协议,需要画图
第七层:应用层
应用层(Application Layer)提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如:HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3、MySQL等。
第六层:表示层
表示层(Presentation Layer)把数据转换为能与接受者的系统格式兼容并适合传输的格式。
第五层:会话层
会话层(Session Layer)负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接。
第四层:传输层
传输层(Transport Layer)把传输表头(TH)加至数据以形成数据包。传输表头包含了所有使用的协议等发送信息。例如:传输控制协议(TCP)等。
第三层:网络层
网络层(Network Layer)决定数据路径的选择和转寄,将网络表头(NH)加至数据包,以形成报文。网络表头包含了网络数据。例如:互联网协议(IP)等。
第二层:数据链路层
数据链路层(Data Link Layer)负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成信息框(Data Frame)。数据表头(DLH)是包含了物理地址和错误侦测及改错的方法。数据链表尾(DLT)是一串指示数据包末端的字符串。例如以太网、无线局域网(Wi-Fi)和通用分组无线服务(GPRS)等。分为两个子层:逻辑链路控制(logical link control,LLC)子层和介质访问控制(Media access control,MAC)子层。
第一层:物理层
物理层(Physical Layer)在局部局域网上传送数据帧(Data Frame),它负责管理电脑通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、主机接口卡等。
- 搭建Yum/apt私服。
#安装htppd,打开httpd
[16:12:52 root@Rocky8] ~#yum -y install httpd
[16:52:26 root@Rocky8] ~#cd /var/www/html/
[16:52:45 root@Rocky8] /var/www/html#ls
[16:52:48 root@Rocky8] /var/www/html#systemctl enable --now httpd
#下载相关仓库包和元数据
[16:56:57 root@Rocky8] /var/www/html#yum reposync --repoid=epel --download-metadata -p /var/www/html/
#--download-metadata加此选项可以下载元数据
yum -y install httpd
cd /var/www/html/
systemctl enable --now httpd
yum reposync --repoid=epel --download-metadata -p /var/www/html/
标签:第三周,ACK,IP,报文,ping,序列号,客户端 From: https://blog.51cto.com/u_15748572/5893817