不知道是否在任何被阻止的事件中打开端口/协议的shell脚本是正确的
我正在编写一个脚本来检查/打开任何阻塞的端口/协议。我到目前为止已经在下面。端口/协议名称对我来说看起来很奇怪。我会预期IP地址,但我从来没有这样做过。主机是否是DSLAM的IP地址?另外,如果它是当前机器,我可以在不指定主机的情况下运行nc吗?否则,这个脚本是否需要做什么?不知道是否在任何被阻止的事件中打开端口/协议的shell脚本是正确的
#!/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
echo -e "############################nnnPresent ports opened on this machine are
$(iptables -nL INPUT | grep ACCEPT | grep dpt)
nCompleted listing...nnn#########################"
#these look funny to me
PORTS=(123 161 69 "UDP" 80 443 22 8443 8080 23 25 3307 "TCP" "HTTPS" "SNMP" "SFTP" "TFTP")
#modified ip's for public sharing
HOSTS=("10.x.x.x" "10.x.x.x" "10.x.x.x" "10.x.x.x" "10.x.x.x")
for HOST in "${HOSTS[@]}"
do
for PORT in "${PORTS[@]}"
do
#see which ones need opening...0 is pass (open), 1 fail, 5 timeout; need host still
#alternatively try nmap
nc -z -v -w5 ${HOST} ${PORT}
#if it's not open, then open it
if [ "$?" ne 0 ]; then #shellcheck err this line: Couldn't parse this test expression.
iptables -A INPUT -m tcp -p tcp --dport "$PORT" -j ACCEPT &&
{ service iptables save;
service iptables restart;
echo -e "Ports opened through iptables are n$(iptables -nL INPUT | grep ACCEPT | grep dpt)"; }
else
echo "Port $PORT already open"
fi
done
done
我已经提到test if port is open,也open port。
-
这些线看上去很奇怪,OP edit #6增加了一个外
for
环的相同的值分配给$HOST
每个去轮:HOSTS=("10.x.x.x" "10.x.x.x" "10.x.x.x" "10.x.x.x" "10.x.x.x") for HOST in "${HOSTS[@]}" do < stuff ... > done
假设运行
< stuff ... >
四次是没有必要的,然后 的如上所述,以上七行将等同于:HOST="10.x.x.x" < stuff ... >
-
(固定。)从该行中删除逗号:
PORTS=(123, 161, 69, UDP, 80, 443, 22, 8443, 8080, 23, 25, 3307, TCP, HTTPS, SNMP, SFTP, TFTP)
bash
不使用逗号来定义数组,而如果使用逗号 它们成为数组数据字符。例如,给定阵列 正是,因为它是上面:echo ${PORTS[0]}
输出:
123,
非常感谢!我没有意识到这一点。我相应地更新了代码。我还添加了主机数组。希望我能以这种方式嵌套我的循环。当我尝试使用shellcheck检查它时,它在if行上抱怨“无法解析此测试表达式”。 – Michele
@Michele:我会将'iptables'输出转换成你在'echo'语句中使用的var。即'count = $(iptables -nL INPUT | grep ACCEPT | grep dpt); echo -e“stuff $ count”'。请使用当前代码更新您的Q,并突出显示生成shellcheck错误的行。祝你好运。 – shellter
@shellter - 我现在在问题中添加了错误信息 – Michele
我敢肯定,我看到一些语法错误。将你的代码剪切/粘贴到http://shellcheck.net,更正它找到的任何错误,然后更新你的Q.祝你好运。 – shellter
谢谢!我不知道该网站存在。它仍在抱怨解析if行,但我不知道为什么。我更新了if行所需的空格。 – Michele
我想你想在''[']''里面有'-ne'。我惊讶于shellcheck错过了这一点。当我在命令行上运行这行代码时,会得到'-ksh:[:ne:unknown operator',但是'ksh'。没有当前的'bash'来测试。祝你好运。 – shellter