【网站连通性检测】java项目telnet、curl命令的使用

telnet、curl命令的使用

1.封装工具类

复制代码
package com.redxun.system.util;

import org.apache.commons.net.telnet.TelnetClient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

/**
 * @author huangquanguang
 * @date 2023/3/22 8:57
 * @description telnet、curl工具类
 */
public class TelnetCurlUtil {
    private static TelnetClient telnetClient = null;
    private static InputStream is = null;
    private static OutputStream os = null;

    /**
     * 连接远程计算机,连接完成后,获取读取流与发送流
     *
     * @param ip   远程计算机IP地址
     * @param port 远程计算机端口
     */
    public static void connection(String ip, int port) {
        try {
            telnetClient = new TelnetClient();
            telnetClient.connect(ip, port);
            is = telnetClient.getInputStream();
            os = telnetClient.getOutputStream();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取远程计算机返回的信息
     */
    public String readTelnetMsg() {
        try {
            int len = 0;
            byte[] b = new byte[1024];
            do {
                len = is.read(b);
                if (len >= 0)
                    return new String(b, 0, len);
            }
            while (len >= 0);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 向远端计算机发送指令消息
     *
     * @param msg 需要传送的指令
     **/
    public void sendTelnetMsg(String msg) {
        byte[] b = msg.getBytes();
        try {
            os.write(b, 0, b.length);
            os.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 查找远端计算机返回的指令中是否包含想要指令
     * 一直查找,直到包含,返回true
     */
    public boolean findStr(String str) {
        for (; ; ) {
            String msg = readTelnetMsg();
            if (msg == null) return false;
            if (msg.indexOf(str) != -1)
                return true;
        }
    }

    /**
     * 关闭连接,关闭IO
     */
    public void close() {
        try {
            is.close();
            os.close();
            telnetClient.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /**
     * java 调用 Curl的方法
     *
     * @param cmds
     * @return
     */
    public static String execCurl(String[] cmds) {
        ProcessBuilder process = new ProcessBuilder(cmds);
        Process p;
        try {
            p = process.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
            StringBuilder builder = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                builder.append(line);
                builder.append(System.getProperty("line.separator"));
            }
            return builder.toString();

        } catch (IOException e) {
            System.out.print("获取线程异常" + e);
        }
        return null;
    }

    /**
     * curl方法
     * url:请求地址
     * methodType:请求类型
     * 只返回状态码
     */
    public static String execCurl(String url,String methodType){
        String[] cmds = {"curl", "-H", "Content-Type:application/json","-sL","-w", "%{http_code}","-o","/dev/null",
                "-X",""+ methodType +"" ,"-k", ""+url+""};
        StringBuffer sb = new StringBuffer();
        for(int i=0;i<cmds.length;i++){
            sb.append(cmds[i]+" ");
        }
        System.out.println(sb);//这个是测试中调试输出你的发送命令航
        String responseMsg=execCurl(cmds);
        System.out.println(responseMsg);
        return responseMsg;
    }

    /**
     * curl get示例
     */
//    public static void getToken(){
//        String url = "https://www.baidu.com/";  //这个为url连接,随便写了个连接,一般接口会先调用接口获取token,然后拼接token,post发送请求
//        String[] cmds = {"curl","X","GET" ,"-k", "-i",""+url+""};
//        StringBuffer sb = new StringBuffer();
//        for(int i=0;i<cmds.length;i++){
//            sb.append(cmds[i]+" ");
//        }
//        System.out.println(sb);
//        String responseMsg=execCurl(cmds);
//        System.out.println(responseMsg);
//    }

    /**
     * curl post示例
     */
//    public static void getMsg(){
//        String jsonStr= "{'content':'testtest','creator':'creator''name':'lili'}";        //这里为发送的json串
//        String url = "http://192.168.2.120:7200/restApi/form/getData";   //这里为连接发送的url
//        String accessToken = "123456";   //这一步这个token为上面get获取到的,有些简单的接口不需要获取这个
//        String[] cmds = {"curl","-H","access-token:{{"+accessToken+"}}" ,
//                "-H", "Content-Type:application/json",
//                "-X","POST" ,"-k", "-i",""+url+"",
//                "-d",""+jsonStr+""};   //超级注意:这个拼接json串的时候不要拼接双引号或者单引号,这个是踩坑提示,因为这个改了好久
//        StringBuffer sb = new StringBuffer();
//        for(int i=0;i<cmds.length;i++){
//            sb.append(cmds[i]+" ");
//        }
//        System.out.println(sb);//这个是测试中调试输出你的发送命令航
//        System.out.println(execCurl(cmds));
//    }


    public static void main(String[] args) {
        execCurl("http://192.168.2.120:7200/form/core/formCustomQuery/queryForJson_ywgxtz","POST");
        execCurl("http://192.168.2.120:7200/restApi/form/getData","GET");
        execCurl("http://192.168.2.120:7200/restApi/form/queryForJson_project_can_review","POST");
    }
}

2.curl参数解释

复制代码
"-H", "Content-Type:application/json", 设置请求头类型

"-sL","-w", "%{http_code}","-o","/dev/null", 只返回状态码

"-X",""+ methodType +"" , 指定请求类型,POST、GET

"-k" 发送https请求加上这个参数,否则会有证书报错

参考文档:https://blog.csdn.net/heihaozi/article/details/122609296

3.检测接口连通情况

复制代码
1.获取所有开启服务发现的接口
2.telnet这些接口的项目路径
3.telnet通的话,curl接口地址,返回非空且不是500以上则修改连通状态为1,返回空且为500以上修改为0
4.telnet不通的直接修改连通状态为0,发送预警日志等
相关推荐
摇滚侠1 小时前
《Spring Boot 3:高级与架构设计》第 2 章 IOC 容器的高级机制 编程式驱动 IOC 阅读笔记 7
java·spring boot·笔记
IT枫斗者枫哥1 小时前
UPDATE影响0行,接口却返回成功:把版本冲突接回业务
java·后端
霸道流氓气质1 小时前
AI应用成本优化完全指南:Token压缩、语义缓存与模型路由的Java生产级实战
java·人工智能·缓存
mmm.c1 小时前
Redis 两级缓存 + Pub/Sub 广播:一次为抗高并发做的缓存改造
java
yexianglunbai1 小时前
中间件(Middleware)详解:概念、作用与实战
java·开发语言·中间件
叶总没有会1 小时前
OpenFeign
java·开发语言·springcloud·openfeign
小七在进步1 小时前
类和对象(四)
java·javascript·ajax
白帽攻防录1 小时前
SRC 挖洞:Apache Tomcat 加密拦截器绕过深度复盘,CVE-2026-34486 fail-open 一行代码怎么打穿集群通信
java·网络安全·tomcat·apache
后端LV1 小时前
三级缓存的两个失效盲区,我用 binlog 和消费组广播补上了
java·架构