【Linux中高级运维: 第55天——Shell编程】第6章:解决类DDOS攻击+批量改名+批量生成随机字符文件名

编程入门 行业动态 更新时间:2024-10-07 22:28:47

【Linux中高级运维: 第55天——Shell编程】第6章:解决类DDOS攻击+<a href=https://www.elefans.com/category/jswz/34/1770428.html style=批量改名+批量生成随机字符文件名"/>

【Linux中高级运维: 第55天——Shell编程】第6章:解决类DDOS攻击+批量改名+批量生成随机字符文件名

面试题1:已知test.txt文件里含有如下域名:

www.etiantian
bbs.etiantian
www.etiantian
blog.etiantian
www.etiantian
www.etiantian
blog.etiantian

统计每个域名出现的次数,并且按照从多到少排序。

uniq 去重 -c计数
sort -r倒序 -n数字排序
[root@web01 /server/scripts]# sort test.txt|uniq -c|sort -rn4 www.etiantian2 blog.etiantian1 bbs.etiantian[root@web01 /server/scripts]# awk '{++S[$1]} END {for(key in S) print S[key],key}' test.txt|sort -rn
4 www.etiantian
2 blog.etiantian
1 bbs.etiantian

第一篇:详解linux netstat输出的网络连接状态信息

第二篇:庖丁解牛获取连接状态数的awk数组命令

第三篇:awk数组命令经典生产实战应用拓展

第四篇:老男孩培训第八节课前awk考试题案例(门户面试题解答)

第五篇:linux生产服务器有关网络状态的优化措施(告一段落)

范例10_10:写一个Shell脚本解决类DDOS攻击的生产案例

请根据web日志或者系统网络连接数,监控当某个IP并发连接数,若短时内PV达到100,即调用防火墙命令封掉对应的IP。

防火墙命令为:iptables -I INPUT -s IP地址 -j DROP。
[root@web01 /server/scripts]# cat ctrl_ddos1.sh 
#!/bin/bash
##############################################################
# File Name: ctrl_ddos.sh
# Version: V1.0
# Author: oldboy
# Organization: www.oldboyedu
##############################################################
jisuan(){awk -F "[ :]+" '/ESTABLISHED/{print $(NF-3)}' netstat.log|sort|uniq -c|sort -rn|head -10 >/tmp/ip.logwhile read linedoip=`echo $line|awk '{print $2}'`count=`echo $line|awk '{print $1}'`if [ $count -gt 10 ] && [ `iptables -nL|grep "$ip"|wc -l` -lt 1  ]thenecho "$ip is 危险的"iptables -I INPUT -s $ip -j DROPelseecho "$ip is 安全的"fidone</tmp/ip.log
}
main(){while truedojisuansleep 5done
}
main
for 变量名 in 变量取值列表
do指令...
donefor n in 1 2 3 4 5
doecho $n
done
for n in {1..5} 
doecho $n
done
for n in `seq 5`
doecho $n
done

第二种for循环语句称之为C语言型for循环语句,其语法结构如下:

for((exp1;exp2;exp3))
do指令...
donefor ((i=1;i<=5;i++))
doecho $i
doneecho ====================
i=1
while ((i<=5))
doecho $i((i++))
done 

随机数:

1、openssl随机数

[root@web01 /server/scripts]# openssl rand -base64 8|cut -c 1-8
M7R3cvSl
[root@web01 /server/scripts]# openssl rand -base64 8|cut -c 1-8
lqknKo1o

2、简单random随机数

[root@web01 /server/scripts]# echo $RANDOM
28127RANDOM Each  time  this parameter is referenced, a random integer between 0 and 32767 is generated.  The
sequence of random numbers may be initialized by assigning a  value  to  RANDOM.   If  RANDOM  is
unset, it loses its special properties, even if it is subsequently reset.

3、时间随机数

[root@web01 /server/scripts]# date +%N
783556744
[root@web01 /server/scripts]# date +%N|md5sum|cut -c 5-13
c2ceaa04c

4、

[root@web01 /server/scripts]# head /dev/urandom|cksum|md5sum
f448a3b537ca1d8883079efc12705282  -
[root@web01 /server/scripts]# head /dev/urandom|cksum|md5sum
ef8bfd1604c04d0665c80741e5a6154d  -

5、

[root@web01 /server/scripts]# cat /proc/sys/kernel/random/uuid
4c2c10a8-e340-48e8-a61e-65b052fe1ea8
[root@web01 /server/scripts]# cat /proc/sys/kernel/random/uuid
23fccdff-cae2-472b-8d26-65403ff8efe4

6、

mkpasswd命令依赖于数据包expect,因此必须通过yum install expect -y命令先安装该数据包。

使用for循环在/oldboy目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串oldboy,名称示例如下:

[root@oldboy scripts]# ls /oldboy
apquvdpqbk_oldboy.html  mpyogpsmwj_oldboy.html  txynzwofgg_oldboy.html
bmqiwhfpgv_oldboy.html  mtrzobsprf_oldboy.html  vjxmlflawa_oldboy.html
jhjdcjnjxc_oldboy.html  qeztkkmewn_oldboy.html
jpvirsnjld_oldboy.html  ruscyxwxai_oldboy.htmltouch apquvdpqbk_oldboy.html
touch bmqiwhfpgv_oldboy.html
touch jhjdcjnjxc_oldboy.html
touch jpvirsnjld_oldboy.html

1、10位小写字母随机数:

[root@web01 /server/scripts]# openssl rand -base64 40|sed 's#[^a-z]##g'|cut -c 2-11
vtrowtjefi

2、命令行手工搞定一个

[root@web01 /server/scripts]# random=`openssl rand -base64 40|sed 's#[^a-z]##g'|cut -c 2-11`
[root@web01 /server/scripts]# echo $random
qvnprjvpey
[root@web01 /server/scripts]# echo $random
qvnprjvpey
[root@web01 /server/scripts]# random=`openssl rand -base64 40|sed 's#[^a-z]##g'|cut -c 2-11`
[root@web01 /server/scripts]# echo $random
ftlhpzuvcg
[root@web01 /server/scripts]# touch ${random}_oldboy.html
[root@web01 /server/scripts]# random=`openssl rand -base64 40|sed 's#[^a-z]##g'|cut -c 2-11`
[root@web01 /server/scripts]# touch ${random}_oldboy.html

3、搞定多个脚本for循环

[root@web01 /server/scripts]# vim 19_1_1.sh
#!/bin/bash
##############################################################
# File Name: 19_1_1.sh
# Version: V1.0
# Author: oldboy
# Organization: www.oldboyedu
##############################################################
Path=/oldboy
[ -d $Path ] || mkdir $Path
for n in {1..10}
dorandom=`openssl rand -base64 40|sed 's#[^a-z]##g'|cut -c 2-11`touch $Path/${random}_oldboy.html                                                                  
done[root@web01 /server/scripts]# sh 19_1_1.sh
[root@web01 /server/scripts]# ls /oldboy/
hdsktbnueg_oldboy.html  ndiwjuwlmc_oldboy.html  sofpatdies_oldboy.html  xatlfezzzq_oldboy.html
ierjzagjho_oldboy.html  phsdsrbrej_oldboy.html  vlamkzfoac_oldboy.html
knsujjmavg_oldboy.html  rhobejmimj_oldboy.html  wxmrqzxjcz_oldboy.html

19.1.2 企业Shell面试题2:批量改名特殊案例
将上面试题19.1.1中结果文件名中的oldboy字符串全部改成oldgirl(最好用for循环实现),并且将扩展名html全部改成大写HTML。
三种方法实现:

1、先命令行处理一个

[root@web01 /oldboy]# file1=kfixfkghqz_oldboy.html
[root@web01 /oldboy]# mv $file1 ${file1/oldboy.html/oldgirl.HTML}

2、脚本处理多个
方法1:

Path=/oldboy
[ -d $Path ] || mkdir $Path
cd $Path
for file1 in `ls`
domv $file1 ${file1/oldboy.html/oldgirl.HTML}                                                        
done

方法2:
rename专业改名

[root@web01 /oldboy]# rename "oldgirl.HTML" "oldboy.html" *HTML
[root@web01 /oldboy]# ls
fzewmfbowb_oldboy.html  kfixfkghqz_oldboy.html  qaxuezrdyh_oldboy.html  vkftijhssz_oldboy.html
ibcmutcmyj_oldboy.html  ovqxxevhlw_oldboy.html  rkoxkozsfs_oldboy.html
inpdcqsmfo_oldboy.html  paoreutqqd_oldboy.html  sksdayeamk_oldboy.html
[root@web01 /oldboy]# rename "oldboy.html" "oldgirl.HTML" *html
[root@web01 /oldboy]# ls
fzewmfbowb_oldgirl.HTML  kfixfkghqz_oldgirl.HTML  qaxuezrdyh_oldgirl.HTML  vkftijhssz_oldgirl.HTML
ibcmutcmyj_oldgirl.HTML  ovqxxevhlw_oldgirl.HTML  rkoxkozsfs_oldgirl.HTML
inpdcqsmfo_oldgirl.HTML  paoreutqqd_oldgirl.HTML  sksdayeamk_oldgirl.HTML

方法3:

mv fzewmfbowb_oldboy.html fzewmfbowb_oldgirl.HTML
mv fzewmfbowb_oldboy.html fzewmfbowb_oldgirl.HTML
mv fzewmfbowb_oldboy.html fzewmfbowb_oldgirl.HTML[root@web01 /oldboy]# ls *.html|awk -F '_' '{print "mv",$0,$1"_oldgirl.HTML"}'
mv fzewmfbowb_oldboy.html fzewmfbowb_oldgirl.HTML
mv ibcmutcmyj_oldboy.html ibcmutcmyj_oldgirl.HTML
mv inpdcqsmfo_oldboy.html inpdcqsmfo_oldgirl.HTML
mv kfixfkghqz_oldboy.html kfixfkghqz_oldgirl.HTML
mv ovqxxevhlw_oldboy.html ovqxxevhlw_oldgirl.HTML
mv paoreutqqd_oldboy.html paoreutqqd_oldgirl.HTML
mv qaxuezrdyh_oldboy.html qaxuezrdyh_oldgirl.HTML
mv rkoxkozsfs_oldboy.html rkoxkozsfs_oldgirl.HTML
mv sksdayeamk_oldboy.html sksdayeamk_oldgirl.HTML
mv vkftijhssz_oldboy.html vkftijhssz_oldgirl.HTML
[root@web01 /oldboy]# 
[root@web01 /oldboy]# 
[root@web01 /oldboy]# ls *.html|awk -F '_' '{print "mv",$0,$1"_oldgirl.HTML"}'|bash
[root@web01 /oldboy]# ls
fzewmfbowb_oldgirl.HTML  kfixfkghqz_oldgirl.HTML  qaxuezrdyh_oldgirl.HTML  vkftijhssz_oldgirl.HTML
ibcmutcmyj_oldgirl.HTML  ovqxxevhlw_oldgirl.HTML  rkoxkozsfs_oldgirl.HTML
inpdcqsmfo_oldgirl.HTML  paoreutqqd_oldgirl.HTML  sksdayeamk_oldgirl.HTML
#!/bin/sh
Filename=_oldgirl.HTML
Dirname="/oldboy"
cd $Dirname||exit 1
for n in `ls`  
doname=$(echo ${n}|awk -F '_' '{print $1}')mv $n ${name}${Filename}
done

19.1.1 企业Shell面试题1:批量生成随机字符文件名案例

使用for循环在/oldboy目录下批量创建10个html文件,其中每个文件需要包含oldboy固定字符串加10个随机小写字母,名称示例如下:

[root@oldboy scripts]# ls /oldboy
oldboy_amaeeurmja.html  oldboy_jmtiqwhinw.html  oldboy_rnbwmjkjkh.html  oldboy_yhufdiceox.html
oldboy_antodvkjcf.html  oldboy_ncivkckvok.html  oldboy_tyqfhfxvup.html
oldboy_epwmszmttm.html  oldboy_osjmrurgsx.html  oldboy_vpgslhajdn.html

19.1.3 企业Shell面试题3:批量创建特殊要求用户案例

批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机数,要求字符和数字等混合)。
不用for循环的实现思路:
解答:
本题的详细答案见第11章范例11_14,此处仅作为Shell案例集中收集整理。

范例12_4:已知下面的字符串是通过将RANDOM随机数采用md5sum加密后任意取出连续10位的结果,请破解这些字符串对应的md5sum前的数字?
4fe8bf20ed

19.1.8 企业Shell面试题8:筛选符合长度的单词案例

利用bash for循环打印下面这句话中字母数不大于6的单词(某企业面试真题)。
I am oldboy teacher welcome to oldboy training class
解答:
本题的详细答案见第13章范例13_4,此处仅作为Shell案例集中收集整理。

1)字符串长度

[root@web01 /server/scripts]# oldboy="I am oldboy."
[root@web01 /server/scripts]# echo ${#oldboy}
12
[root@web01 /server/scripts]# echo ${oldboy}|wc -L
12
[root@web01 /server/scripts]# expr length "${oldboy}"
12
[root@web01 /server/scripts]# echo $oldboy|awk '{print length}'
12
[root@web01 /server/scripts]# echo $oldboy|awk '{print length($0)}'
12chars="I am oldboy teacher welcome to oldboy training class"
for word in $chars
doif [ ${#word} -le 6 ]thenecho $wordfi
done                                                                                                   [root@web01 /server/scripts]# sh 19_1_8.sh
I
am
oldboy
to
oldboy
class

19.1.1 企业Shell面试题1:批量生成随机字符文件名案例

使用for循环在/oldboy目录下批量创建10个html文件,其中每个文件需要包含oldboy固定字符串加10个随机小写字母,名称示例如下:

[root@oldboy scripts]# ls /oldboy
oldboy_amaeeurmja.html  oldboy_jmtiqwhinw.html  oldboy_rnbwmjkjkh.html  oldboy_yhufdiceox.html
oldboy_antodvkjcf.html  oldboy_ncivkckvok.html  oldboy_tyqfhfxvup.html
oldboy_epwmszmttm.html  oldboy_osjmrurgsx.html  oldboy_vpgslhajdn.html

更多推荐

【Linux中高级运维: 第55天——Shell编程】第6章:解决类DDOS攻击+批量改名+批量生成随机字符文件名

本文发布于:2024-03-06 21:10:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1716383.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:批量   文件名   字符   Linux   DDOS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!