假设我正在检查是否与特定端口建立了连接。
nc -zv 162.147.191.141 8080 2>&1 |grep -w 8080;
output-
Connection to 162.147.191.141 port 8080 [tcp/*] succeeded!
nc -zv 162.147.191.141 80 2>&1 |grep -w 80;
output-
nc: connectx to 162.147.191.141 port 80 (tcp) failed: Connection refused
字符串
所以现在我有一个场景,如果连接建立与特定端口(前8080或80),然后添加IP到输出文件。
这里的$?我已经用来查看连接是成功还是失败。如果连接将成功然后添加ip到out.txt文件。
如何在then语句中提取ip[162.247.241.14]写入输出文件?
nc -zv 162.247.241.14 8080 2>&1 |grep -w 8080; if [ $? -eq 0 ];
then ??
; fi
型
稍后我将使用这些代码来实现更大规模的应用。
port1=80
port2=8080
for host in `cat hostfile.txt`
do
nc -zv $host $portno1; if [ $? -eq 0 ]; then ?? >>output.txt
nc -zv $host $portno2; if [ $? -eq 0 ]; then ?? >>output.txt
done
型
1条答案
按热度按时间2uluyalo1#
考虑类似这样的情况:
字符串
注意事项:
sh
开始我们的脚本;这确保了扩展功能(如数组)可用。while read
循环阅读输入文件;请参阅DontReadLinesWithFor了解为什么这是一种更安全的做法。ports
变量时,没有理由将port1
和port2
存储为多个变量。nc
的stdin附加到/dev/null
,这样它就不会阻止读取脚本的当前stdin。2>&1
选择)存储在一个名为output
的变量中。3>>output.txt
可以让我们在整个循环中只打开output.txt
* 一次 *;随后,在特定的echo
命令上使用>&3
将内容定向到已经打开的文件描述符--比为每次写入创建一个全新的文件句柄快得多。