网络安全(Java语言)简单脚本汇总 (一)

文章目录

  • 敏感信息探测脚本
    • 源代码
    • 思路
  • URL批量存活探测器
    • 源代码
    • 思路
  • 端口扫描器
    • 源代码
    • 思路

敏感信息探测脚本

源代码


/*** @description 该脚本通过分析HTTP响应头,来检测可能暴露服务器信息的安全隐患*/import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;
import java.util.Scanner;public class HeaderLeakScanner {public static void main(String[] args) throws IOException {Scanner scanner = new Scanner(System.in);System.out.print("请输入要扫描的URL(例如:http://example.com):");String urlString = scanner.nextLine();URL url = new URL(urlString);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.setConnectTimeout(5000);connection.setReadTimeout(5000);// 发起请求int responseCode = connection.getResponseCode();System.out.println("HTTP响应状态码: " + responseCode);// 获取响应头Map<String, List<String>> headers = connection.getHeaderFields();//就是标签和值的组合的集合 headers.entrySet()就是逐个查看每个标签和对应的筐子boolean found = false;System.out.println("\n响应头信息如下:");for (Map.Entry<String, List<String>> entry : headers.entrySet()) {String key = entry.getKey();List<String> values = entry.getValue();//Map.entry可以将键和值一起抓取,方便直接获取其相关信息,但是如果不是用就需要先找到key,再通过key找valueif (key != null) {System.out.println(key + ": " + String.join(", ", values));// 检查是否包含敏感字段if (key.equalsIgnoreCase("Server") ||key.equalsIgnoreCase("X-Powered-By") ||key.equalsIgnoreCase("X-AspNet-Version")) {found = true;}}}if (found) {System.out.println("\n⚠ 该站点存在潜在的HTTP头信息泄露!");} else {System.out.println("\n✅ 未发现明显的HTTP头信息泄露。");}connection.disconnect();}
}

思路

接收用户输入的字符串 ---- > 将字符串转换为URL类型 -----> 向此URL发起连接
----> 设置连接的请求头 ------> 发起请求并获取响应码和响应体 ------> 将属性及对应的值使用Map类型进行存储 -----> 对其中的属性进行敏感信息的匹配 ,如果匹配成功,则提示,如果未成功则提示匹配失败

URL批量存活探测器

源代码

/***  脚本功能:URL批量存活探测器*  @function:1.输入一个包含一堆URL的txt文件*             2.脚本自动尝试连接这些URL*             3.输出响应码和是否存活*             4,将结果输出到文件result.txt*/
//引入Java标准库中的类
import java.io.*;   //导入文件读写相关的类,比如BufferedReader,FileReader,BufferedWriter,FileWriter
import java.net.HttpURLConnection;  //用于发送HTTP请求
import java.net.URL;   //用来处理网址对象,比如创建URL,打开连接等//主类和主方法
public class URLScanner {public static void main(String[] args) {String inputFile = "urls.txt";String outputFile = "result.txt";//定义两个字符串,分别表示要读取的网址列表文件(输入) 和 要保存结果的文件//打开文件,逐行读取try(BufferedReader reader = new BufferedReader(new FileReader(inputFile));BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile))) {//从url.txt中一行行读取URL//BufferedWriter 将检测结果写入到result.txtString line;//定义好读取内容的字符串对象 在下方进行赋值while ((line = reader.readLine()) != null) {String url = line.trim();//去除首尾空格,跳过空行if (url.isEmpty()) continue;int status = getHttpStatus(url);String result = url + "=>" + status + "[" + (status == 200 ? "存活" : "异常") + "]";System.out.println(result);writer.write(result);writer.newLine();//同时打印结果到控制台和写入到结果文件中}System.out.println("\n扫描完成,结果已写入result.txt。");} catch (IOException e) {System.out.println("文件读取/写入出错:" + e.getMessage());}}public static int getHttpStatus(String urlStr) {try {URL url = new URL(urlStr);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(3000);//设置连接服务器的超时conn.setReadTimeout(3000);//设置读取数据的超时时间为3秒conn.setRequestMethod("GET");//指导HTTP请求方法为GETreturn conn.getResponseCode();} catch (IOException e) {return -1;}}
}

思路

  1. 首先分别定义好要存放扫描的URL和存放扫描结果的文件
  2. 创建文件读取和文件写入对象
  3. 对存放的URL进行读取进行首尾去空,非空等判断
  4. 对进行处理后的URL进行请求连接
  5. 连接思路和上方敏感信息泄露探测脚本思路一样
  6. 将由响应码组成的结果存入相对应的文件中

端口扫描器

源代码

/*** @description 端口扫描器* 在该程序中,for循环负责循环将任务提交给线程池进行*/
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class MultiThreadedPortScanner {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 获取用户输入System.out.print("请输入目标 IP 地址:");String targetIP = scanner.nextLine();System.out.print("请输入起始端口(如 1):");int startPort = scanner.nextInt();System.out.print("请输入结束端口(如 65535):");int endPort = scanner.nextInt();System.out.print("请输入线程数(建议 100~500):");int threadCount = scanner.nextInt();System.out.println("\n开始扫描主机 " + targetIP + " 的端口 " + startPort + " 到 " + endPort + "...\n");ExecutorService executor = Executors.newFixedThreadPool(threadCount);// 创建一个线程池,最多同时执行threadCount个任务,这避免了手动管理线程,同时提高扫描效率for (int port = startPort; port <= endPort; port++) {//从起始端口(startPort) 循环到结束端口 (endPort) , 一个个端口地扫描int finalPort = port;executor.execute(() -> {// 提交一个任务给线程池try (Socket socket = new Socket()) {//使用Socket试图连接目标主机的finalPortsocket.connect(new InetSocketAddress(targetIP, finalPort), 100); // 100ms 超时//System.out.println("✅ 端口 " + finalPort + " 是开放的");} catch (IOException ignored) {// 忽略关闭端口}});}executor.shutdown();// 告诉线程池: 不再接受新任务,但要把已提交的任务全部执行完while (!executor.isTerminated()) {// 等待所有任务完成}System.out.println("\n✅ 扫描完成。");}
}
/**

思路

  1. @mind
  2. 对用户要探测的IP地址以及端口范围进行接收
  3. 创建线程池,对应相当数字的线程数
  4. 从起始到结束端口,将每个端口的扫描任务分配到线程中
  5. 设置任务具体内容为向目标IP以及对应端口发起连接请求,并设置超时时间
  6. 设置如果连接失败,那么忽略
  7. .关闭线程池 executor.shutdown()
  8. 通过while循环来达到当所有端口及任务完成之后再结束的效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95566.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

buuctf_NSBlogin_http_upload(极客2019+ACTF2020新生赛)

今天做三1个web 题目&#xff1a;NSB_login用户名有admin&#xff0c;看源码&#xff1a;I like rockyou&#xff01;今天学习到&#xff0c;kali里面有密码爆破的文件叫rockyou.txt&#xff08;/usr/share/wordlists/&#xff09;&#xff08;没kali也可以去https://gitcode.c…

IDEA如何引用brew安装的openjdk

因为 brew 安装的 openjdk@21 目录结构和 IDEA 期望的 JDK 目录不一样。所以默认brew安装的jdk,在IDEA中是无法识别到的。 一、创建软连接 sudo mkdir -p /Library/Java/JavaVirtualMachines sudo ln -sfn /usr/local/opt/openjdk@21/libexec/openjdk.jdk /Library/Java/Java…

【Unity3D】Spine黑线(预乘问题)、贴图边缘裁剪问题

一、黑线问题 Spine正确的导出和Unity导入设置&#xff08;解决黑边/彩条带问题&#xff09;_spine导出的图片有黑边-CSDN博客 采用&#xff08;已解决问题&#xff09; Texture 打包器启用 Premultiply alpha ,禁用Bleed Unity Texture 设置中禁用 sRGB (Color Texture) 和…

嵌入式系统学习Day18(文件编程-系统调用文件IO)

- open#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 功能:打开文件 参数:pathname --- 文件名 flags 必选:O_RDONLYO_WRONLY…

Vue浅学

概述在最近的学习任务中了解了 Vue&#xff0c;并对其产生了浓厚的兴趣&#xff0c;现在分享一下我的学习所得关键字其一statestate 是 Vuex 存储中的“状态对象”&#xff0c;用于存储整个应用的共享数据&#xff08;如用户信息、令牌、权限等&#xff09;&#xff0c;比如&am…

机器翻译:Hugging Face库详解

文章目录一、Hugging Face概述1.1 Hugging Face介绍1.2 核心理念&#xff1a;模型即服务&#xff0c;但以开源形式二、核心架构2.1 Transformers库&#xff1a;模型交互的统一接口2.2 Datasets库&#xff1a;高效的数据处理引擎2.3 Tokenizers库&#xff1a;文本与模型的“翻译…

服务器安装gielab社区版

第一步&#xff1a;安装Gitlab 1,使用的是CentOs镜像(服务器最低配置为4核8g内存才行要不然带不动) 登录目标实例。 2,执行如下命令&#xff0c;安装所需依赖。 1 sudo yum install -y curl policycoreutils-python openssh-server 3,执行如下命令&#xff0c;启动SSH服务…

C#报错:System.NullReferenceException:“未将对象引用设置到对象的实例。”

C#使用自定义的类创建数组时&#xff0c;使用时报错&#xff0c;报错内容如下图&#xff1a;原因&#xff1a;C#中的数组是引用类型。当声明自定义类数组时&#xff0c;数组本身会被创建&#xff0c;但其元素&#xff08;即自定义类的实例&#xff09;默认未被实例化&#xff0…

Maven 的 module 管理

一、Maven 的 module 管理 1. 什么是 Maven module&#xff1f; Maven module&#xff08;模块&#xff09;&#xff0c;是 Maven 多模块项目结构&#xff08;multi-module project&#xff09;中的核心概念。它允许你将一个大型项目拆分为若干独立的小项目&#xff08;模块&am…

现在都是APP,小程序抢购,支持浏览器不支持 SSE

在 APP 和小程序抢购场景中&#xff0c;通常不原生支持SSE&#xff08;Server-Sent Events&#xff09;&#xff0c;这与浏览器对 SSE 的支持情况不同&#xff0c;具体如下&#xff1a;APP&#xff1a;一般情况下&#xff0c;APP 端不支持原生 SSE。若使用 UniApp 开发&#xf…

Spring Boot 深度解析:从原理到实践

一、Spring Boot 本质与核心价值 1.1 什么是 Spring Boot&#xff1f; Spring Boot 是 Spring 生态的革命性框架&#xff0c;旨在解决传统 Spring 开发的复杂性。它通过"约定优于配置"&#xff08;Convention Over Configuration&#xff09;理念&#xff0c;提供开箱…

WebSocket-java篇

问题引入消息推送的方式我们要实现&#xff0c;服务器把消息推送到客户端&#xff0c;可以轮训&#xff0c;长轮训还有sseWebSocket理论WebSocket 的由来与核心价值诞生背景&#xff1a;解决 HTTP 协议在实时通信中的固有缺陷&#xff08;单向请求-响应模式&#xff09;核心驱动…

用Python从零开始实现神经网络

反向传播算法用于经典的前馈人工神经网络。 它仍然是训练大型深度学习网络的技术。 在这个教程中&#xff0c;你将学习如何用Python从头开始实现神经网络的反向传播算法。 完成本教程后&#xff0c;您将了解&#xff1a; 如何将输入前向传播以计算输出。如何反向传播错误和…

算法148. 排序链表

题目&#xff1a;给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。示例 1&#xff1a;输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 示例 2&#xff1a;输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5] 示例 3&a…

在腾讯云CodeBuddy上实现一个AI聊天助手

在腾讯云CodeBuddy上实现一个AI聊天助手项目 在当今数字化时代&#xff0c;AI聊天助手已经成为一种非常流行的应用&#xff0c;广泛应用于客户服务、智能助手等领域。今天&#xff0c;我们将通过腾讯云CodeBuddy平台&#xff0c;实现一个基于Spring Boot和OpenAI API的AI聊天助…

JavaScript Array.prototype.flatMap ():数组 “扁平化 + 映射” 的高效组合拳

在 JavaScript 数组处理中&#xff0c;我们经常需要先对每个元素进行转换&#xff08;映射&#xff09;&#xff0c;再将结果 “铺平”&#xff08;扁平化&#xff09;。比如将数组中的每个字符串按空格拆分&#xff0c;然后合并成一个新数组。传统做法是先用map()转换&#xf…

区块链与元宇宙:数字资产的守护者

1 区块链支撑元宇宙数字资产的底层逻辑1.1 不可篡改性构建信任基石区块链的不可篡改性为元宇宙数字资产提供了坚实的信任基础。其核心在于分布式账本技术&#xff0c;当一笔数字资产交易发生时&#xff0c;会被打包成区块并广播至网络中的所有节点。每个节点都会对这笔交易进行…

Linux软件编程:进程和线程(进程)

进程一、基本概念进程&#xff1a;是程序动态执行过程&#xff0c;包括创建、调度、消亡程序&#xff1a;存放在外存的一段数据的集合二、进程创建&#xff08;一&#xff09;进程空间分布每个进程运行起来后&#xff0c;操作系统开辟0-4G的虚拟空间进程空间&#xff1a;用户空…

Mybatis学习笔记(五)

分页插件与性能优化 分页插件配置 简要描述&#xff1a;MybatisPlus分页插件是基于物理分页实现的高性能分页解决方案&#xff0c;支持多种数据库的分页语法&#xff0c;能够自动识别数据库类型并生成对应的分页SQL。 核心概念&#xff1a; 物理分页&#xff1a;直接在SQL层面进…

企业可商用的conda:「Miniforge」+「conda-forge」

文章目录一、彻底卸载现有 Anaconda/Miniconda二、安装 Miniforge&#xff08;推荐&#xff09;macOS/Linux检查Windows检查三、将通道固定为 conda-forge&#xff08;严格优先&#xff09;四、验证是否仍引用 Anaconda 源五、常见问题&#xff08;FAQ&#xff09;六、参考命令…