云计算百科
云计算领域专业知识百科平台

服务器宝塔面板的API调试,超详细,亲测可用!

小编最近在强化开发安全的处理,除了软件的内置安全防护以外,外置的安全也是必不可少的。小编的服务器使用的是宝塔面板,所以在宝塔面板上做一下操作,本文章以宝塔面板==>安全==>IP规则为例,详细介绍了宝塔面板API的使用。

一、开启宝塔面板的API接口调用。

想要以API的形式对宝塔面板进行调试,必须先开启面板的API接口,并配置。

一定要配置好宝塔面板API接口的白名单,不然是调用不了宝塔的API接口的。复制接口秘钥并保存,在调用接口的时候会用到。

a.IP白名单放置的是公网IP,电脑的公网IP可以通过百度搜索IP地址就可以查询到本机的公网IP。

b.下面的接口文档地址,里面记录了一些常用开发语言的demo。https://www.bt.cn/bbs/thread-20376-1-1.html 

小编是Java开发者,所以也是借鉴了Java-Demo。

二、获取宝塔面板需要的功能接口以及参数。

想要通过API的形式来操作宝塔面板,必须要知道需要控制宝塔功能的接口,这里以上述提到的IP规则接口为例,切换到IP规则菜单,在浏览器中按F12,打开控制台,进入网络选项,就可以看到宝塔的接口地址了,点击网络中的链接,就能看到接口功能所需要的参数。

 

在上面可以看到,宝塔面板的接口都是post请求,并且传参是以form表单的形式进行传递的。

三、开始编写Java代码并且测试发起请求。

public void baota() throws Exception {
//将此ip添加到服务器的防火墙
String url="http://宝塔IP:宝塔端口号";
String action="/firewall/com/set_ip_rule";
String btSign = "pJ7gDZ***********Fbf0m";
String timestamp = (new Date().getTime()+"");
String md5Sign = getMd5(btSign);
String temp = timestamp+md5Sign;
String token = getMd5(temp);
String cookie = "request_time="+timestamp+"&request_token="+token;
String ipaddform="types=drop&brief=&chain=INPUT&family=ipv4&zone=public&operation=add&strategy=drop&address=";
String json = cookie+"&"+ipaddform+"192.168.2.15";

url=url+action;

//组装请求头
Map<String,Object> header_map=new HashMap<>();
header_map.put("accept","text/xml,text/javascript,text/html,application/json");
header_map.put("connection","Keep-Alive");

try {
String body= HttpRequestUtil.form_send_wjwjy(url,"post",header_map,null,json);
System.out.println(body);
Map<String,Object> baotaresult_map= StringMapUtil.stringToMapObject(body);
String msg=StringEncryptUtil.unicodeToChinese(baotaresult_map.get("msg")+"");
System.out.println("{status:"+baotaresult_map.get("status")+",msg:"+msg+"}");
}catch (Exception e){
log.info("请求出现异常:"+e.getMessage());
}
}
public static String getMd5(String str) throws Exception
{
try {
// 生成一个MD5加密计算摘要
MessageDigest md = MessageDigest.getInstance("MD5");
// 计算md5函数
md.update(str.getBytes());
// digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
return new BigInteger(1, md.digest()).toString(16);
} catch (Exception e) {
throw new Exception("MD5加密出现错误,"+e.toString());
}
}

由于接口自然返回的会是一些编码,所以需要做一下转换。

public static String unicodeToChinese(String unicode) {
// 定义一个正则表达式匹配Unicode编码,但不包括开头的反斜杠
Pattern pattern = Pattern.compile("(?<!\\\\\\\\)\\\\\\\\u(\\\\p{XDigit}{4})");
Matcher matcher = pattern.matcher(unicode);
StringBuffer stringBuffer = new StringBuffer();
while (matcher.find()) {
// 将匹配到的Unicode编码转换为字符,并替换到StringBuffer中
matcher.appendReplacement(stringBuffer,
Character.toString((char)Integer.parseInt(matcher.group(1), 16)));
}
matcher.appendTail(stringBuffer); // 将剩余部分追加到StringBuffer中
return stringBuffer.toString(); // 返回转换后的字符串
}

暂时调试结果:

以上就是通过API的形式操作服务器宝塔面板的案例全部了,这里是以添加IP规则为例,如果需要删除规则或者其他功能的,流程和展示的代码是一样的。再给大家说一个细节,服务器如果安装了宝塔面板,宝塔面板设置的IP限制规则优先级要高于服务器本身,所以有宝塔面板直接操作宝塔面板就可以了,没有的操作服务器本身的安全控制。

以上为小编自行编写,如有不足之处,欢迎留言讨论。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 服务器宝塔面板的API调试,超详细,亲测可用!
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!