mirror of
https://github.com/shuanx/BurpFingerPrint.git
synced 2026-10-16 21:00:35 +08:00
修复BUG
This commit is contained in:
Generated
+19
-34
@@ -3,45 +3,30 @@
|
||||
<output-path>$PROJECT_DIR$/out/artifacts/BurpFingerPrint_jar</output-path>
|
||||
<root id="archive" name="BurpFingerPrint.jar">
|
||||
<element id="module-output" name="BurpFingerPrint" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/alibaba/fastjson2/fastjson2/2.0.40/fastjson2-2.0.40.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/commons-logging/commons-logging/1.2/commons-logging-1.2.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/portswigger/burp/extender/burp-extender-api/2.3/burp-extender-api-2.3.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.11/commons-codec-1.11.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/miglayout/miglayout-core/5.2/miglayout-core-5.2.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/miglayout/miglayout-swing/5.2/miglayout-swing-5.2.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/github/virtuald/curvesapi/1.07/curvesapi-1.07.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/zaxxer/SparseBitSet/1.2/SparseBitSet-1.2.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.18.0/log4j-api-2.18.0.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/poi/poi-ooxml-lite/5.2.3/poi-ooxml-lite-5.2.3.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/poi/poi-ooxml/5.2.3/poi-ooxml-5.2.3.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/poi/poi/5.2.3/poi-5.2.3.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/xmlbeans/xmlbeans/5.1.1/xmlbeans-5.1.1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/github/luben/zstd-jni/1.5.5-11/zstd-jni-1.5.5-11.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/javax/inject/javax.inject/1/javax.inject-1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/maven/plugins/maven-assembly-plugin/3.7.1/maven-assembly-plugin-3.7.1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/maven/resolver/maven-resolver-api/1.4.1/maven-resolver-api-1.4.1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/maven/resolver/maven-resolver-util/1.4.1/maven-resolver-util-1.4.1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/maven/shared/maven-common-artifact-filters/3.3.2/maven-common-artifact-filters-3.3.2.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/maven/shared/maven-filtering/3.3.2/maven-filtering-3.3.2.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/maven/maven-archiver/3.6.1/maven-archiver-3.6.1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-archiver/4.9.2/plexus-archiver-4.9.2.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-interpolation/1.27/plexus-interpolation-1.27.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-io/3.4.2/plexus-io-3.4.2.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-xml/3.0.0/plexus-xml-3.0.0.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/iq80/snappy/snappy/0.4/snappy-0.4.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/sonatype/plexus/plexus-build-api/0.0.7/plexus-build-api-0.0.7.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/tukaani/xz/1.9/xz-1.9.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/xerial/sqlite-jdbc/3.45.3.0/sqlite-jdbc-3.45.3.0.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-interpolation/1.27/plexus-interpolation-1.27.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-compress/1.26.1/commons-compress-1.26.1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/iq80/snappy/snappy/0.4/snappy-0.4.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/github/luben/zstd-jni/1.5.5-11/zstd-jni-1.5.5-11.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/maven/resolver/maven-resolver-api/1.4.1/maven-resolver-api-1.4.1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/portswigger/burp/extender/burp-extender-api/2.3/burp-extender-api-2.3.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/maven/resolver/maven-resolver-util/1.4.1/maven-resolver-util-1.4.1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/maven/shared/maven-common-artifact-filters/3.3.2/maven-common-artifact-filters-3.3.2.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/sonatype/plexus/plexus-build-api/0.0.7/plexus-build-api-0.0.7.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-archiver/4.9.2/plexus-archiver-4.9.2.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/codehaus/plexus/plexus-xml/3.0.0/plexus-xml-3.0.0.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/maven/maven-archiver/3.6.1/maven-archiver-3.6.1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/maven/shared/maven-filtering/3.3.2/maven-filtering-3.3.2.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/javax/inject/javax.inject/1/javax.inject-1.jar" path-in-jar="/" />
|
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" path-in-jar="/" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
Generated
-1
@@ -1,7 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding">
|
||||
<file url="file://$PROJECT_DIR$/log/logger.log" charset="GBK" />
|
||||
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
|
||||
</component>
|
||||
|
||||
@@ -21,46 +21,21 @@
|
||||
<artifactId>burp-extender-api</artifactId>
|
||||
<version>2.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.alibaba.fastjson2</groupId>
|
||||
<artifactId>fastjson2</artifactId>
|
||||
<version>2.0.40</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.13.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<version>2.8.9</version> <!-- replace with the latest version -->
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpclient</artifactId>
|
||||
<version>4.5.14</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-ooxml</artifactId>
|
||||
<version>5.2.3</version>
|
||||
</dependency>
|
||||
<!-- SQLite JDBC 驱动 -->
|
||||
<dependency>
|
||||
<groupId>org.xerial</groupId>
|
||||
<artifactId>sqlite-jdbc</artifactId>
|
||||
<version>3.45.3.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<version>3.7.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
<build>
|
||||
<finalName>BurpFingerPrint-v1.0</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
@@ -70,7 +45,7 @@
|
||||
<descriptorRefs>
|
||||
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||
</descriptorRefs>
|
||||
<appendAssemblyId>true</appendAssemblyId>
|
||||
<appendAssemblyId>false</appendAssemblyId>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
|
||||
@@ -12,7 +12,7 @@ import java.nio.charset.StandardCharsets;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
|
||||
public class BurpExtender implements IBurpExtender, IExtensionStateListener {
|
||||
public final static String extensionName = "FinderPrint";
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package burp;
|
||||
|
||||
import burp.model.TableLogModel;
|
||||
import burp.ui.FingerConfigTab;
|
||||
import burp.ui.FingerTab;
|
||||
import burp.util.FingerUtils;
|
||||
import burp.util.HTTPUtils;
|
||||
@@ -52,6 +51,7 @@ public class IProxyScanner implements IProxyListener {
|
||||
FingerTab.lbRequestCount.setText("0");
|
||||
BurpExtender.getDataBaseService().clearRequestsResponseTable();
|
||||
BurpExtender.getDataBaseService().clearTableDataTable();
|
||||
FingerTab.timer.stop();
|
||||
}
|
||||
|
||||
public void processProxyMessage(boolean messageIsRequest, final IInterceptedProxyMessage iInterceptedProxyMessage) {
|
||||
|
||||
@@ -196,8 +196,8 @@ public class DatabaseService {
|
||||
String sql = "SELECT * FROM table_data";
|
||||
|
||||
try (Connection conn = getConnection();
|
||||
Statement stmt = conn.createStatement();
|
||||
ResultSet rs = stmt.executeQuery(sql)) {
|
||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||
ResultSet rs = stmt.executeQuery()) {
|
||||
|
||||
// loop through the result set
|
||||
while (rs.next()) {
|
||||
@@ -358,9 +358,10 @@ public class DatabaseService {
|
||||
// 查询表格行数的SQL语句
|
||||
String sql = "SELECT COUNT(*) AS rowcount FROM table_data";
|
||||
|
||||
try (Statement stmt = connection.createStatement();
|
||||
ResultSet rs = stmt.executeQuery(sql)) {
|
||||
try (Connection conn = getConnection();
|
||||
PreparedStatement checkStmt = conn.prepareStatement(sql)) {
|
||||
// 如果查询结果存在,返回第一行的计数
|
||||
ResultSet rs = checkStmt.executeQuery();
|
||||
if (rs.next()) {
|
||||
int count = rs.getInt("rowcount");
|
||||
return count;
|
||||
|
||||
@@ -5,7 +5,6 @@ import burp.Wrapper.FingerPrintRulesWrapper;
|
||||
import burp.model.FingerPrintRule;
|
||||
|
||||
import java.io.*;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
@@ -14,7 +13,6 @@ import javax.swing.table.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.net.URL;
|
||||
import java.awt.event.*;
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
|
||||
@@ -8,7 +8,6 @@ import java.awt.*;
|
||||
import java.awt.Color;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.sql.SQLException;
|
||||
import java.time.Duration;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.HashMap;
|
||||
@@ -17,16 +16,11 @@ import java.awt.event.MouseEvent;
|
||||
import javax.swing.table.*;
|
||||
import java.awt.Component;
|
||||
import java.util.Map;
|
||||
import java.util.ArrayList;
|
||||
|
||||
//import burp.ui.event.FingerTabEventHandlers;
|
||||
import burp.model.DatabaseService;
|
||||
import burp.model.TableLogModel;
|
||||
import burp.ui.event.FingerTabEventHandlers;
|
||||
import burp.ui.renderer.CenterTableCellRenderer;
|
||||
import burp.ui.renderer.HavingImportantRenderer;
|
||||
import burp.ui.renderer.HeaderIconRenderer;
|
||||
import burp.ui.renderer.IconTableCellRenderer;
|
||||
import burp.util.UiUtils;
|
||||
import javax.swing.event.ListSelectionListener;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
@@ -235,7 +229,7 @@ public class FingerTab implements IMessageEditorController {
|
||||
gbc_btnClear.gridy = 0;
|
||||
FilterPanel.add(moreButton, gbc_btnMore);
|
||||
|
||||
// exportItem.addActionListener(FingerTabEventHandlers.exportItemAddActionListener(contentPane, logTable));
|
||||
exportItem.addActionListener(FingerTabEventHandlers.exportItemAddActionListener());
|
||||
|
||||
// 点击”功能“的监听事件
|
||||
moreButton.addMouseListener(new MouseAdapter() {
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
package burp.ui;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.HashMap;
|
||||
import javax.swing.*;
|
||||
|
||||
import burp.ITab;
|
||||
import burp.IBurpExtenderCallbacks;
|
||||
import burp.model.FingerPrintRule;
|
||||
|
||||
|
||||
public class Tags implements ITab {
|
||||
|
||||
@@ -2,17 +2,13 @@ package burp.ui.event;
|
||||
|
||||
import burp.BurpExtender;
|
||||
import burp.model.TableLogModel;
|
||||
import burp.ui.FingerConfigTab;
|
||||
import burp.ui.FingerTab;
|
||||
import burp.util.UiUtils;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.TableModelEvent;
|
||||
import javax.swing.event.TableModelListener;
|
||||
import javax.swing.filechooser.FileNameExtensionFilter;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import javax.swing.table.TableModel;
|
||||
import javax.swing.table.TableRowSorter;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
@@ -21,6 +17,10 @@ import java.awt.event.MouseEvent;
|
||||
import java.io.File;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
|
||||
import static burp.util.Utils.escapeCsv;
|
||||
|
||||
/**
|
||||
* @author: shaun
|
||||
@@ -209,37 +209,67 @@ public class FingerTabEventHandlers {
|
||||
}
|
||||
};
|
||||
}
|
||||
//
|
||||
//
|
||||
// public static ActionListener exportItemAddActionListener(JPanel contentPane, HttpLogTable logTable){
|
||||
// return new ActionListener() {
|
||||
// @Override
|
||||
// public void actionPerformed(ActionEvent e) {
|
||||
// JFileChooser fileChooser = new JFileChooser();
|
||||
// fileChooser.setDialogTitle("Specify a file to save");
|
||||
//
|
||||
// // 设置默认文件名
|
||||
// fileChooser.setSelectedFile(new File("ExportedData.xlsx"));
|
||||
//
|
||||
// // 限制文件类型为.xlsx
|
||||
// FileNameExtensionFilter filter = new FileNameExtensionFilter("Excel Files", "xlsx");
|
||||
// fileChooser.setFileFilter(filter);
|
||||
//
|
||||
// int userSelection = fileChooser.showSaveDialog(contentPane);
|
||||
//
|
||||
// if (userSelection == JFileChooser.APPROVE_OPTION) {
|
||||
// File fileToSave = fileChooser.getSelectedFile();
|
||||
// // 确保文件有正确的扩展名
|
||||
// if (!fileToSave.toString().toLowerCase().endsWith(".xlsx")) {
|
||||
// fileToSave = new File(fileToSave.toString() + ".xlsx");
|
||||
// }
|
||||
// // 导出表格数据到Excel文件
|
||||
// UiUtils.exportTableToExcel(fileToSave, contentPane, logTable);
|
||||
// }
|
||||
// }
|
||||
// };
|
||||
// }
|
||||
//
|
||||
|
||||
public static ActionListener exportItemAddActionListener() {
|
||||
return new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
// 创建一个文件选择器实例
|
||||
JFileChooser fileChooser = new JFileChooser();
|
||||
fileChooser.setDialogTitle("Save As"); // 设置对话框标题
|
||||
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
||||
fileChooser.setAcceptAllFileFilterUsed(false); // 取消所有文件过滤
|
||||
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("CSV Files", "csv")); // 只允许CSV文件格式
|
||||
|
||||
// 设置默认的文件名
|
||||
fileChooser.setSelectedFile(new File("BurpFinderPrint-TableData.csv"));
|
||||
|
||||
// 弹出保存对话框
|
||||
int userSelection = fileChooser.showSaveDialog(null);
|
||||
|
||||
if (userSelection == JFileChooser.APPROVE_OPTION) {
|
||||
// 获取用户选择的文件
|
||||
File fileToSave = fileChooser.getSelectedFile();
|
||||
String filePath = fileToSave.getAbsolutePath();
|
||||
// 确保文件有.csv扩展名
|
||||
if (!filePath.endsWith(".csv")) {
|
||||
filePath += ".csv";
|
||||
}
|
||||
|
||||
// 获取所有数据模型
|
||||
List<TableLogModel> allTableDataModels = BurpExtender.getDataBaseService().getAllTableDataModels();
|
||||
|
||||
// 创建CSV文件并写入数据
|
||||
try (FileWriter csvWriter = new FileWriter(filePath)) {
|
||||
// 写入标题行(根据TableLogModel的字段)
|
||||
csvWriter.append("PID,URL,Method,Title,Status,Result,Type,IsImportant,ResultInfo,Host,Port,Protocol,RequestResponseIndex,Time\n");
|
||||
|
||||
// 遍历所有的数据模型并写入CSV
|
||||
for (TableLogModel model : allTableDataModels) {
|
||||
csvWriter.append(escapeCsv(String.valueOf(model.getPid())) + ",");
|
||||
csvWriter.append(escapeCsv(model.getUrl()) + ",");
|
||||
csvWriter.append(escapeCsv(model.getMethod()) + ",");
|
||||
csvWriter.append(escapeCsv(model.getTitle()) + ",");
|
||||
csvWriter.append(escapeCsv(model.getStatus()) + ",");
|
||||
csvWriter.append(escapeCsv(model.getResult()) + ",");
|
||||
csvWriter.append(escapeCsv(model.getType()) + ",");
|
||||
csvWriter.append(escapeCsv(String.valueOf(model.getIsImportant())) + ",");
|
||||
csvWriter.append(escapeCsv(model.getResultInfo()) + ",");
|
||||
csvWriter.append(escapeCsv(model.getHost()) + ",");
|
||||
csvWriter.append(escapeCsv(String.valueOf(model.getPort())) + ",");
|
||||
csvWriter.append(escapeCsv(model.getProtocol()) + ",");
|
||||
csvWriter.append(escapeCsv(String.valueOf(model.getRequestResponseIndex())) + ",");
|
||||
csvWriter.append(escapeCsv(model.getTime()));
|
||||
csvWriter.append("\n");
|
||||
}
|
||||
} catch (IOException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
public static ActionListener clearItemAddActionListener(DefaultTableModel model, JTable logTable, JLabel lbSuccessCount){
|
||||
return new ActionListener() {
|
||||
|
||||
@@ -1,17 +1,7 @@
|
||||
package burp.util;
|
||||
|
||||
import org.apache.poi.ss.usermodel.Cell;
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
import org.apache.poi.ss.usermodel.Sheet;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.TableModel;
|
||||
import java.awt.*;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
|
||||
/**
|
||||
@@ -37,53 +27,5 @@ public class UiUtils {
|
||||
Image newImg = img.getScaledInstance(17, 17, Image.SCALE_SMOOTH);
|
||||
return new ImageIcon(newImg);
|
||||
}
|
||||
//
|
||||
// public static void exportTableToExcel(File file, JPanel contentPane, HttpLogTable logTable) {
|
||||
// Workbook workbook = new XSSFWorkbook();
|
||||
// Sheet sheet = workbook.createSheet("Table Data");
|
||||
// TableModel model = logTable.getModel();
|
||||
//
|
||||
// // 创建表头
|
||||
// Row headerRow = sheet.createRow(0);
|
||||
// for (int i = 0; i < model.getColumnCount(); i++) {
|
||||
// Cell cell = headerRow.createCell(i);
|
||||
// cell.setCellValue(model.getColumnName(i));
|
||||
// }
|
||||
//
|
||||
// // 填充数据
|
||||
// for (int j = 0; j < model.getRowCount(); j++) {
|
||||
// Row row = sheet.createRow(j + 1);
|
||||
// for (int k = 0; k < model.getColumnCount(); k++) {
|
||||
// Cell cell = row.createCell(k);
|
||||
// Object value = model.getValueAt(j, k);
|
||||
// if (value instanceof Boolean) {
|
||||
// cell.setCellValue((Boolean) value);
|
||||
// } else if (value instanceof Number) {
|
||||
// cell.setCellValue(((Number) value).doubleValue());
|
||||
// } else {
|
||||
// cell.setCellValue(value.toString());
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // 自动调整所有列的宽度
|
||||
// for (int i = 0; i < model.getColumnCount(); i++) {
|
||||
// sheet.autoSizeColumn(i);
|
||||
// }
|
||||
//
|
||||
// // 写入到文件
|
||||
// try (FileOutputStream outputStream = new FileOutputStream(file)) {
|
||||
// workbook.write(outputStream);
|
||||
// JOptionPane.showMessageDialog(contentPane, "导出成功!保存路径为:\n" + file.getAbsolutePath(), "导出成功", JOptionPane.INFORMATION_MESSAGE);
|
||||
// } catch (IOException e) {
|
||||
// JOptionPane.showMessageDialog(contentPane, "导出失败,原因:\n" + e.getMessage(), "导出失败", JOptionPane.ERROR_MESSAGE);
|
||||
// e.printStackTrace();
|
||||
// } finally {
|
||||
// try {
|
||||
// workbook.close();
|
||||
// } catch (IOException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@@ -1,14 +1,6 @@
|
||||
package burp.util;
|
||||
|
||||
import burp.BurpExtender;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.util.Base64;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import burp.IBurpExtenderCallbacks;
|
||||
import burp.IHttpService;
|
||||
import burp.model.TableLogModel;
|
||||
@@ -17,17 +9,13 @@ import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import javax.net.ssl.*;
|
||||
import java.security.cert.X509Certificate;
|
||||
|
||||
import org.apache.http.Header;
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.net.URL;
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.util.Base64;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
||||
/**
|
||||
@@ -419,41 +407,6 @@ public class Utils {
|
||||
}
|
||||
|
||||
|
||||
public static byte[] identifyFingerprint(String urlString) {
|
||||
try {
|
||||
CloseableHttpClient httpClient = HttpClients.createDefault();
|
||||
HttpGet httpGet = new HttpGet(urlString);
|
||||
CloseableHttpResponse response = httpClient.execute(httpGet);
|
||||
|
||||
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
||||
try {
|
||||
// 获取响应状态行
|
||||
byteArrayOutputStream.write((response.getStatusLine().toString() + "\r\n").getBytes());
|
||||
// 获取所有响应头部
|
||||
Header[] headers = response.getAllHeaders();
|
||||
for (Header header : headers) {
|
||||
byteArrayOutputStream.write((header.getName() + ": " + header.getValue() + "\r\n").getBytes());
|
||||
}
|
||||
// 添加一个空行来结束头部
|
||||
byteArrayOutputStream.write("\r\n".getBytes());
|
||||
|
||||
// 获得响应实体
|
||||
HttpEntity entity = response.getEntity();
|
||||
if (entity != null) {
|
||||
// 将响应体添加到字节数组输出流中
|
||||
byteArrayOutputStream.write(EntityUtils.toByteArray(entity));
|
||||
}
|
||||
} finally {
|
||||
response.close();
|
||||
}
|
||||
|
||||
// 返回字节数组
|
||||
return byteArrayOutputStream.toByteArray();
|
||||
|
||||
} catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取-插件运行路径
|
||||
@@ -486,4 +439,17 @@ public class Utils {
|
||||
};
|
||||
}
|
||||
|
||||
public static String escapeCsv(String value) {
|
||||
String escapedValue = value;
|
||||
if (value.contains("\"")) {
|
||||
// 将所有的双引号替换成两个双引号
|
||||
escapedValue = escapedValue.replace("\"", "\"\"");
|
||||
}
|
||||
// 如果值包含逗号、双引号或换行符,将其包围在双引号之中
|
||||
if (value.contains(",") || value.contains("\n") || value.contains("\"")) {
|
||||
escapedValue = "\"" + escapedValue + "\"";
|
||||
}
|
||||
return escapedValue;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user