基于Javafx的Fofa爬虫

文章目录

    • 下载链接
    • 介绍
    • 使用方法
      • 关键字生成器
      • API爬虫
      • Fofa爬虫
      • 导出功能
      • 修改配置文件

下载链接

介绍

顾名思义,fofa爬虫。可以用api爬,也可以对页面进行爬取。

开发环境是java11,基于maven和javafx做的。

想做这个很久了,但是一直懒得弄。就偶尔写一下,不知不觉就写好了。看下运行效果吧。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用方法

关键字生成器

在各个框中按需求输入关键字。点击生成即可。

例如,要获取状态码为200的中国的Tomcat,可在APP处输入Tomcat,点击生成即可。
在这里插入图片描述
若想取消国家的限制,可在Country框中输入*号。状态码同理。

例如要查找任意国家任意状态码的Tomcat
在这里插入图片描述

API爬虫

使用之前请先填入fofa邮箱和APIKey。可点击保存按钮,下次运行程序可自动加载。

填入之后可点击测试API按钮测试API是否可用。
在这里插入图片描述
输入关键词后点击开始爬取,会开始爬取数据。并呈现在表格中。
在这里插入图片描述
双击表格中的数据可快速在浏览器中打开。

点击结束爬取可终止爬虫线程。

Fofa爬虫

首先输入cookie。由于fofa的反爬虫机制,cookie在一天后就会失效,因此当程序检测到时间不为同一天时会自动清空已保存的cookie。请使用前更新cookie。

输入cookie后可点击保存按钮保存当天cookie,点击测试按钮测试cookie是否可用
在这里插入图片描述
在输入关键字后点击开始爬取,首先会获取页数,接着弹出一个对话框,要求获取爬取至多少页。

例如,我想爬取Tomcat从1到10页的数据。
在这里插入图片描述
点击确定即可开始爬取。

由于网络不稳定,爬取大量数据时很可能会发生数据损耗或连接超时。当你看到当前数据量超过一分钟没有变动,则为爬取结束。
在这里插入图片描述

导出功能

当数据表中有数据时,点击导出数据按钮会弹出导出数据对话框
在这里插入图片描述
在此处可选择需要导出的信息,数据源。

导出到文件功能可将数据导出至文件。导出到MySQL功能可将数据导出到MySQL数据库。

在导出至数据库之前请填写数据库连接信息,可点击测试连接按钮测试,可点击保存按钮保存
在这里插入图片描述

修改配置文件

第一次运行程序后,程序同目录下会自动生成一个名为FoSpi.ini的文件,这是该程序的配置文件。

打开编辑该文件,可看到以下内容。
在这里插入图片描述
在此处可修改超时时间,等待时间,单页数量,并可设置代理。

参数介绍:

  • timeout : 超时时间。超时时间越短,越容易出错。
  • timewait : 每爬取一页后的等待时间。防止封ip。
  • pagenum : 单页数据。填入10或20。建议值为20,这样会加快效率
  • ip : 代理服务器的ip地址
  • port : 代理服务器的端口

配置文件中的值不建议修改。如要添加代理可自行修改proxy的内容

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于 JavaFX 的文件传输可以通过 Socket 实现。以下是一个简单的示例代码: ```java public class FileSender extends Thread { private String ipAddress; private int portNumber; private File fileToSend; private ProgressIndicator progressIndicator; public FileSender(String ipAddress, int portNumber, File fileToSend, ProgressIndicator progressIndicator) { this.ipAddress = ipAddress; this.portNumber = portNumber; this.fileToSend = fileToSend; this.progressIndicator = progressIndicator; } @Override public void run() { try { Socket socket = new Socket(ipAddress, portNumber); DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); // send file name and size dos.writeUTF(fileToSend.getName()); dos.writeLong(fileToSend.length()); // send file data FileInputStream fis = new FileInputStream(fileToSend); byte[] buffer = new byte[4096]; int read; long totalSent = 0; while ((read = fis.read(buffer)) != -1) { dos.write(buffer, 0, read); totalSent += read; double progress = (double) totalSent / fileToSend.length(); Platform.runLater(() -> progressIndicator.setProgress(progress)); } fis.close(); dos.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } public class FileReceiver extends Thread { private int portNumber; private File receivedFile; private ProgressIndicator progressIndicator; public FileReceiver(int portNumber, File receivedFile, ProgressIndicator progressIndicator) { this.portNumber = portNumber; this.receivedFile = receivedFile; this.progressIndicator = progressIndicator; } @Override public void run() { try { ServerSocket serverSocket = new ServerSocket(portNumber); Socket socket = serverSocket.accept(); DataInputStream dis = new DataInputStream(socket.getInputStream()); // receive file name and size String fileName = dis.readUTF(); long fileSize = dis.readLong(); // receive file data FileOutputStream fos = new FileOutputStream(receivedFile); byte[] buffer = new byte[4096]; int read; long totalReceived = 0; while ((read = dis.read(buffer)) != -1) { fos.write(buffer, 0, read); totalReceived += read; double progress = (double) totalReceived / fileSize; Platform.runLater(() -> progressIndicator.setProgress(progress)); } fos.close(); dis.close(); socket.close(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在 JavaFX 应用程序中,您可以通过选择文件和指定接收方的 IP 地址和端口号来触发文件发送和接收。以下是一个示例界面代码: ```java public class FileTransferController { // UI components @FXML private TextField ipAddressTextField; @FXML private TextField portNumberTextField; @FXML private Button selectFileButton; @FXML private Button sendFileButton; @FXML private ProgressIndicator sendProgressIndicator; @FXML private TextField destinationFolderTextField; @FXML private Button receiveFileButton; @FXML private ProgressIndicator receiveProgressIndicator; // variables private File selectedFile; private File receivedFile; public void initialize() { sendProgressIndicator.setProgress(0); receiveProgressIndicator.setProgress(0); } @FXML private void handleSelectFile() { FileChooser fileChooser = new FileChooser(); selectedFile = fileChooser.showOpenDialog(null); } @FXML private void handleSendFile() { if (selectedFile == null) { // handle error return; } String ipAddress = ipAddressTextField.getText(); int portNumber = Integer.parseInt(portNumberTextField.getText()); FileSender fileSender = new FileSender(ipAddress, portNumber, selectedFile, sendProgressIndicator); fileSender.start(); } @FXML private void handleReceiveFile() { if (destinationFolderTextField.getText().isEmpty()) { // handle error return; } int portNumber = Integer.parseInt(portNumberTextField.getText()); receivedFile = new File(destinationFolderTextField.getText() + "\\" + receivedFile.getName()); FileReceiver fileReceiver = new FileReceiver(portNumber, receivedFile, receiveProgressIndicator); fileReceiver.start(); } } ``` 请注意,此代码仅作为示例,并应该进行修改以满足您的特定需求和安全要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值