【发布时间】:2016-01-18 15:07:18
【问题描述】:
我有一个复杂的 shell 脚本 (check_axfr.sh) 来检查域是否容易受到 DNS 区域传输漏洞的影响。只需将single domain 作为argument 即可检查该域是否易受攻击。
例子:
#./check_axfr.sh example.com
如果它在域的任何name servers 中存在漏洞,它会产生以下结果。
DOMAIN example.com: ns0.example.com. Vulnerable
DOMAIN example.com: ns1.example.com. Not Vulnerable
为了检查多个域,我将所有域列表 (100) 保存在文件 Input.txt 中。
example.com
abc.com
mno.com
xyz.com
prq.com
.......
我试过了,
for i in $(cat Input.txt);do sh check_axfr.sh $i;done
现在,我的输入文件 (Input.txt) 现在将包含 number,domain
1,example.com
2,abc.com
3,mno.com
4,xyz.com
5,prq.com
.........
我想得到输出,
1,DOMAIN example.com: ns0.example.com. Vulnerable
1,DOMAIN example.com: ns1.example.com. Not Vulnerable
2,DOMAIN abc.com : ns1.abc.com. Not Vulnerable
3,DOMAIN mno.com : .............
4,DOMAIN xyz.com : .............
5,DOMAIN prq.com : .............
我不熟悉 shell 脚本并且我不想更改父脚本,有人可以帮我解决这个问题吗?
【问题讨论】:
-
Bash和其他 shell 可以修剪变量中保存的字符串的前导字符。而不是$i使用"${i#*,}";它应该删除任何前导字符,直到逗号。例如,当i='34,gog.com',"${i#*,}"是gog.com。阅读 bash 手册页中的 Shell Parameter Expansion section。 -
BashFAQ #1 -- mywiki.wooledge.org/BashFAQ/001 -- 将是一个很好的起点。
-
原始标题(“shell 脚本问题”)没有以任何有用的方式描述问题(从字面上看,任何标记为“shell”的问题都可以具有相同的标题,并且具有描述性)。我试图让它更有用,但因为最初并不清楚,所以很难确定我做得是否准确。 @Arun,请检查并更正。
-
顺便说一句——在可执行脚本上使用诸如
.sh或.bash之类的扩展名并不是一个好习惯。对于可执行文件,它们的文件名是用于运行它们的命令的名称;在文件名中包含语言意味着您不能在不使名称误导或更改所有调用者的情况下用不同的语言重写脚本。此外,这根本不是惯例:你运行ls,而不是ls.elf。 -
...
.sh、.ksh或.bash等是的唯一合适的地方是一个脚本,该脚本预计将被引入 shell,不在它自己的解释器中执行。例如,这对于 shell 库很常见。