如何在Shell脚本中提取IP并写入文件(基于nc端口连通性检测)
解决方案
单例检测脚本优化
你不需要从nc的输出里提取IP,目标IP是已知的,直接在连通成功时写入文件即可。修改后的脚本如下:
target_ip="162.247.241.14" target_port="8080" # 执行检测,将输出重定向到/dev/null避免干扰屏幕输出 nc -zv "$target_ip" "$target_port" >/dev/null 2>&1 if [ $? -eq 0 ]; then echo "$target_ip" >> output.txt fi
批量检测脚本修正
批量脚本里存在变量名错误(portno1/portno2应为port1/port2),而且同样不需要提取IP——循环中的$host就是待检测的目标IP,直接写入即可。优化后的脚本:
port1=80 port2=8080 # 遍历hostfile.txt中的每个IP for host in $(cat hostfile.txt); do # 检测第一个端口 nc -zv "$host" "$port1" >/dev/null 2>&1 if [ $? -eq 0 ]; then echo "$host" >> output.txt fi # 检测第二个端口 nc -zv "$host" "$port2" >/dev/null 2>&1 if [ $? -eq 0 ]; then echo "$host" >> output.txt fi done
可选:记录带端口的连通信息
如果需要同时记录IP和连通成功的端口,可将echo内容修改为:
echo "$host:$port1" >> output.txt
补充:特殊场景下从nc输出提取IP
如果确实需要从nc的成功输出中动态提取IP(比如输出来源不固定的情况),可以这样捕获并提取:
result=$(nc -zv 162.247.241.14 8080 2>&1) if echo "$result" | grep -q "succeeded"; then # 用awk提取成功输出中的IP字段(对应输出里的第三个字段) echo "$result" | awk '{print $3}' >> output.txt fi
内容的提问来源于stack exchange,提问作者NIMI
相关产品推荐
相关产品推荐

