curl 是 Linux 系统是一个数据传输的工具,它支持多种协议,多用 API 请求测试、文件上传下载、数据抓取等。同时该命令也可用作网络测试,但是使用该命令测试网络时,返回的结果可能较为多样,有时不好根据返回结果统一进行判断网络情况。

curl  的基本语法

curl [参数] [URL]
curl -v localhost:80
参数 描述
-X 指定请求方法(GET、POST等)
-o

将响应结果保存到文件中

-v 显示详细的请求以及响应信息
-s 静默模式,不显示相关信息

执行结果如下

 对于22端口,返回的结果是因为 curl 通常不兼容 ssh 的协议,但是实际使用 telnet 命令测试,可以看出该端口确实通的。

对于80端口,返回结果显示连接被拒绝,实际通过 telnet 进行测试,确实该端口不通。

 因此通常情况下使用 curl 可以测试 http 服务的端口应用。

相关脚本

而针对 http 协议的返回,通常情况下成功便会返回相关的响应信息,如 html 文本信息。因此可以根据返回的结果中是否包含相关 html 信息来初步判断该端口的网络是否疏通。

#!/bin/bash

# HOSTS_FILE="hosts_ports.txt"

RESULT_FILE="curl_results.txt"

search_strings=("Connected" "<html>" "OpenSSH")

> "$RESULT_FILE"

while IFS=: read -r ip port; do

    URL="http://$ip:$port"
    
    echo "Testing $URL..." >> "$RESULT_FILE"
    
	TMP_OUTPUT_FILE="$(mktemp)"
	
	search="Connected"
    timeout 5 curl -v "$URL" 2>&1 >> "$TMP_OUTPUT_FILE" 

	echo "=======================内容开始=====================" >> "$RESULT_FILE"
	found=false
	
	for string in "${search_strings[@]}"; do
    # 使用grep检查临时文件中是否包含该字符串
		if grep -qF "failed" "$TMP_OUTPUT_FILE"; then
			found=false
			echo "Found string: failed"
			break
		fi
	
		if grep -qF "$string" "$TMP_OUTPUT_FILE"; then
			# 如果找到匹配项,设置标志变量为true并打印找到的字符串
			found=true
			echo "Found string: $string"
			# 如果你只想在找到第一个匹配项时停止搜索,可以取消下面的注释
			break
		fi
	done
	
	
    if [ "$found" = true ]; then
		echo "$ip $port is reachable 成功通过" >> "$RESULT_FILE"
    else
        echo "$ip $port is not reachable 失败不通" >> "$RESULT_FILE"
    fi
    rm "$TMP_OUTPUT_FILE"
    echo "=======================内容结束=====================" >> "$RESULT_FILE"
done < hosts_ports.txt

echo "CURL tests completed. Results are saved in $RESULT_FILE"

 可以对以上文本进行修改,上面的文本是根据返回的响应结果中是否包含 "Connected" "<html>" "OpenSSH" 其中某个字符串来判断是否网络疏通。

IP端口文件格式如下,可以自行修改。

 执行脚本

bash 测试脚本.sh

最后可以将结果保存到文件中,根据需要进行调整和使用。

相关信息可以参考

Linux使用telnet批量测试网络

Linux 中使用 nc 命令批量测试网络

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐