不确定在任何端口/协议被阻止的情况下打开端口/协议的shell脚本是否正确
我正在编写一个脚本,它将在任何端口/协议被阻止时检查/打开端口/协议。到目前为止,我所了解的情况如下。端口/协议名称在我看来很奇怪。我本来希望有IP地址,但我以前从未这样做过。主机是DSLAM的IP地址吗?另外,如果是当前机器,是否可以在不指定主机的情况下运行nc?否则,此脚本是否执行所需的操作不确定在任何端口/协议被阻止的情况下打开端口/协议的shell脚本是否正确,shell,unix,port,protocols,Shell,Unix,Port,Protocols,我正在编写一个脚本,它将在任何端口/协议被阻止时检查/打开端口/协议。到目前为止,我所了解的情况如下。端口/协议名称在我看来很奇怪。我本来希望有IP地址,但我以前从未这样做过。主机是DSLAM的IP地址吗?另外,如果是当前机器,是否可以在不指定主机的情况下运行nc?否则,此脚本是否执行所需的操作 #!/bin/bash PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin echo -e "############
#!/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
我指的是,而且也是
,它在每次循环中为$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
bash
不使用逗号定义数组,如果使用逗号
它们成为数组数据中的字符。例如,给定数组
正如上面所说:
echo ${PORTS[0]}
产出:
123,
,它在每次循环中为$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
bash
不使用逗号定义数组,如果使用逗号
它们成为数组数据中的字符。例如,给定数组
正如上面所说:
echo ${PORTS[0]}
产出:
123,
我很确定我看到了一些语法错误。将您的代码剪切/粘贴到中,更正发现的任何错误,然后更新您的Q。祝您好运。我想您希望
-ne
位于[…]
的内部。我很惊讶shellcheck没有看到。当我在命令行上只运行那一行代码时,我得到了-ksh:[:ne:unknown operator
,但那是ksh
。没有当前的bash
来测试。祝你好运。#!/bin/bash
需要出现在第1行(对于shellcheck.net和bash脚本内部)。我处理端口的经验有限,不想给出不好的建议。例如,我必须去维基百科看看DSLAM是什么;-)。一般来说,如果你能通过测试证明打开/关闭的端口标记正确,我会假设你有一个工作脚本。哎哟,{…}&&
完全不可见后的
块。你应该能够将它移到下面,使代码更可读。根据你的需要,有许多更有效的工具可以测试端口。例如,在你的android手机上加载fing
。祝你好运。你可以破解{…}
在;
字符上阻止代码。但至少知道读者知道代码存在;-)。此外,请查看nmap
utils(广泛可用,但需要重新思考您的问题/解决方案)。祝你好运。我很确定我看到了一些语法错误。剪切/粘贴你的代码,更正它发现的任何错误,然后更新你的Q。祝你好运。我想你想要-ne
在[…]
中。我很惊讶shellcheck没有看到。当我在命令行上只运行那行代码时,我得到-ksh:[:ne:unknown operator
,但那是ksh
。没有当前的bash
进行测试。祝你好运。#!/bin/bash
需要出现在第1行(对于shellcheck.net和bash脚本内部)。我处理端口的经验有限,不想给出不好的建议。例如,我必须去维基百科看看DSLAM是什么;-)。一般来说,如果你能通过测试证明打开/关闭的端口标记正确,我会假设你有一个工作脚本。哎哟,{…}&&
完全不可见后的
块。你应该能够将它移到下面,使代码更可读。根据你的需要,有许多更有效的工具可以测试端口。例如,在你的android手机上加载fing
。祝你好运。你可以破解{…}
在;
字符上阻止代码。但至少知道读者知道代码存在;-)。此外,请查看nmap
utils(广泛可用,但需要重新思考您的问题/解决方案)。祝你好运。非常感谢!我没有意识到这一点。我相应地更新了代码。我还添加了主机数组。希望我可以用这种方式嵌套for循环。当我尝试使用shellcheck进行检查时,它抱怨“无法解析此测试表达式”在if行。@Michele:我将把iptables
输出转换成一个var,您可以在echo
语句中使用它。例如count=$(iptables-nL-INPUT | grep-ACCEPT | grep-dpt);echo-e“stuff$count”
。否则,请使用当前代码更新Q,并突出显示生成shellcheck错误的行。祝您好运。@shellter-我在问题行中添加了错误消息,非常感谢!我没有意识到这一点。我相应地更新了代码。我还添加了主机数组。希望我能以这种方式嵌套for循环。当我尝试我们时为了检查它,它抱怨在if行上“无法解析这个测试表达式”。@Michele:我会将iptables
输出转换成一个var,您在echo
语句中使用它。例如count=$(iptables-nL-INPUT | grep ACCEPT | grep dpt);echo-e“stuff$count”
。否则,请使用当前代码更新您的Q,并突出显示生成shellcheck错误的行。祝您好运。@shellter-我现在已将错误消息添加到问题的行中