1、使用函数重写,完成编程题,可以让用户选择当前主机的所有网卡,选中网卡后,获取ip,网段,掩码。通过ping命令检测在线的主机,打印在线的主机,写入一个文件中。当ip的结尾是奇数时,在目标主机或当前主机,批量添加user1到user100用户,否则添加group1到group100,并生成对应的用户user1到user100,让用户的过期时间在1天之后。 要求每个小功能均封装为函数,有详细的错误处理,确保任何条件均可以正常执行完脚本,可以重复执行。 可能会使用while循环
#提取网卡名
ETH=`ifconfig | grep flags | cut -d":" -f1 | tr '\n' ' '`
#用户
USER=root
#登录密码
PASS=123456
#网段开始
BEG=3
#网段结束
END=254
#查询本机IP
localIp=`hostname -I|awk '{print $1}'`
#网段
NET=${localIp%.*}.
ip_netmask(){
echo "ip: `ifconfig ${MENU} | grep -Eo '([0-9]{1,3}.){3}[0-9]{1,3}' |head -n1`"
#echo "netmask: `ifconfig ${MENU} | sed -nr 's/.*netmask (.*) broadcast.*/\1/p'`"
echo "netmask: `ifconfig ${MENU} | grep -Eo '([0-9]{1,3}.){3}[0-9]{1,3}' |head -2 | tail -1`"
echo "segment:`hostname -I | cut -d. -f1-3`"
}
select_netcard(){
PS3="请选择网卡:"
select MENU in $ETH;do
case $REPLY in
1)
ip_netmask
;;
2)
ip_netmask
;;
3)
echo "退出"
break
;;
*)
echo "输入错误,请重新输入!"
;;
esac
done
}
yum -y install expect &> /dev/null
#记录在线主机
scanIP(){
for((i="$BEG";i<="$END";i++));do
ping -c 1 -w 1 ${NET}$i &> /dev/null && echo "${NET}$i" >> ScanIp.log &
done
wait
unset i
}
ping_host(){
scanIP
AliveIP=(`cat ScanIp.log`)
for ip in ${AliveIP[*]};do
lastNum=`echo ${ip} | cut -d. f4`
if [ $((lastNum%2)) -eq 1 ];then
expect <<EOF
spawn ssh $USER@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$PASS\n" }
}
expect "#" { send "echo user{1..100}| xargs -n1 useradd\n" }
expect "#" { send "exit\n" }
expect eof
EOF
else
expect <<EOF
spawn ssh $USER@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$PASS\n" }
}
expect "#" { send "for i in {1..100};do groupadd group$i &>/dev/null;useradd user$i -g group$i -e `date +%F -d +1day` &>/dev/null;done\n" }
expect "#" { send "exit\n" }
expect eof
EOF
fi
done
}
while :; do
echo -e "\033[1;36m 1.获取IP网段 \033[0m"
echo -e "\033[1;36m 2.获取IP网段 \033[0m"
read -p "$(echo -e '\033[1;32m请输入你的选项:\033[0m')" option
case $option in
1)
select_netcard
;;
2)
ping_host
;;
3)
break
;;
*)
echo -e "\033[1;36m输入错误!\033[0m"
esac
done
2、总结TCP/IP 三次握手,4次断开原理,重点是出现状态代表什么含义,需要画图
- 三次握手
1.客户端连接时,把本地 socket 状态设置成TCP_SYN_SENT,选一个可用的端口,发出 SYN 握手请求并启动重传定时器。
2.服务器响应 ack 时,会判断下接收队列是否满了,满的话可能会丢弃该请求。否则发出 synack,申请request_sock 添加到半连接队列中,同时启动定时器。
3.客户端响应 synack 时,清除了 connect 时设置的重传定时器,把当前 socket 状态设置为 ESTABLISHED,开启保活计时器后发出第三次握手的 ack 确认。
4.服务器响应 ack 时,把对应半连接对象删除,创建了新的 sock 后加入到全连接队列中,最后将新连接状态设置为 ESTABLISHED。
5.accept 从已经建立好的全连接队列中取出一个返回给用户进程。
- 四次挥手
第一次挥手:客户端主动关闭TCP连接,向服务器发送FIN报文,进入到FIN_WAIT_1状态,等待服务器的确认
第二次挥手:服务器向客户端发送ACK应答报文,进入等待关闭状态,设状态为CLOSE_WAIT;客户端收到来自服务器的ACK应答,进入FIN_WAIT_2状态。
第三次挥手:服务器主动关闭连接,向客户端发送FIN,进入最后确认状态,设状态为LASK_ACK,等待客户端确认
第四次挥手:客户端收到来自服务器的FIN,向服务器发送ACK应答,之后客户端进入时间等待状态,服务器收到ACK应答后进入关闭状态,此时服务器连接已经关闭;客户端等待2MSL后才进入关闭状态。
3、 总结OSI 7层模型及对应的协议,需要画图
应用层:为应用程序或用户请求提供各种服务
表示层:数据编码、格式转换、数据加密
会话层:创建、管理和维护会话
传输层:数据通信
网络层:IP选址及路由选择
数据链路层:提供介质访问和链路管理
物理层:管理通信设备和网络媒体之间的互联互通
4、搭建Yum/apt私服。
#仓库服务配置
#安装HTTP
[root@repo-server ~]#yum -y install httpd
[root@repo-server ~]#systemctl enable --now httpd
#创建访问目录
[root@repo-server ~]#mkdir /var/www/html/centos/8 -pv
#挂在镜像并复制到http目录
[root@repo-server ~]#mount /dev/sr0 /mnt/
[root@repo-server ~]#cp -a /mnt/* /var/www/html/centos/8/
#下载阿里云的epel源
[root@repo-server ~]#vim /etc/yum.repos.d/base.repo
[epel]
name=EPEL
baseurl=https://mirrors.aliyun.com/epel/$releasever/Everything/$basearch/
gpgcheck=0
[root@repo-server ~]#yum reposync --repoid=epel --download-metadata -p /var/www/html
#下载key文件
[root@repo-server ~]#wget -P /var/www/html/epel/ https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-8
[root@repo-server ~]#ls /var/www/html/epel/
Packages repodata RPM-GPG-KEY-EPEL-8
#配置客户端
[root@repo-client ~]#vim /etc/yum.repos.d/test.repo
[BaseOS]
name=BaseOS
baseurl=http://10.0.0.8/centos/8/BaseOS
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
[AppStream]
name=AppStream
baseurl=http://10.0.0.8/centos/8/AppStream
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
[epel]
name=epel
baseurl=http://10.0.0.8/epel/
gpgkey=http://10.0.0.8/epel/RPM-GPG-KEY-EPEL-8
原文地址:http://www.cnblogs.com/studyblogs/p/16813238.html