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次断开原理,重点是出现状态代表什么含义,需要画图

  • 三次握手

三次握手.drawio.png

​ 1.客户端连接时,把本地 socket 状态设置成TCP_SYN_SENT,选一个可用的端口,发出 SYN 握手请求并启动重传定时器。

​ 2.服务器响应 ack 时,会判断下接收队列是否满了,满的话可能会丢弃该请求。否则发出 synack,申请request_sock 添加到半连接队列中,同时启动定时器。

​ 3.客户端响应 synack 时,清除了 connect 时设置的重传定时器,把当前 socket 状态设置为 ESTABLISHED,开启保活计时器后发出第三次握手的 ack 确认。

​ 4.服务器响应 ack 时,把对应半连接对象删除,创建了新的 sock 后加入到全连接队列中,最后将新连接状态设置为 ESTABLISHED。

​ 5.accept 从已经建立好的全连接队列中取出一个返回给用户进程。

  • 四次挥手

四次挥手.drawio.png

第一次挥手:客户端主动关闭TCP连接,向服务器发送FIN报文,进入到FIN_WAIT_1状态,等待服务器的确认

第二次挥手:服务器向客户端发送ACK应答报文,进入等待关闭状态,设状态为CLOSE_WAIT;客户端收到来自服务器的ACK应答,进入FIN_WAIT_2状态。

第三次挥手:服务器主动关闭连接,向客户端发送FIN,进入最后确认状态,设状态为LASK_ACK,等待客户端确认

第四次挥手:客户端收到来自服务器的FIN,向服务器发送ACK应答,之后客户端进入时间等待状态,服务器收到ACK应答后进入关闭状态,此时服务器连接已经关闭;客户端等待2MSL后才进入关闭状态。

3、 总结OSI 7层模型及对应的协议,需要画图

七层模型.drawio.png

应用层:为应用程序或用户请求提供各种服务

表示层:数据编码、格式转换、数据加密

会话层:创建、管理和维护会话

传输层:数据通信

网络层: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

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性