Hi~ 我是李小咖,主要从事网络安全技术开发和研究。
本文取自《李小咖·网安技术库》,欢迎一起交流学习🫡:https://imbyter.com
BITS(Background Intelligent Transfer Service)是Windows中用于管理文件传输的一种服务,而bitsadmin命令则是用于管理BITS的命令行工具,能够实现文件的下载传输。
一、BITS服务是什么
BITS (后台智能传送服务) 是一个Windows服务,它可以在前台或后台异步传输文件,为保证其他网络应用程序获得响应而调整传输速度,并在重新启动计算机或重新建立网络连接之后自动恢复文件传输。
在后台所对应的系统服务名为:BITS(显示名为“Background Intelligent Transfer Service”):
二、bitsadmin是什么
Bitsadmin是一个系统自带的命令行工具(C:\Windows\System32\bitsadmin.exe),用于创建、下载或上载文件,以及监视其进度。
因为bitsadmin是一个独立的可执行程序,所以可以在cmd中执行,也可以单独运行这个程序。不过一般为了便于查看bitsadmin执行后的输出结果,所以大多会在cmd中执行。
1. 查看BITS任务
我们可以使用bitsadmin命令来查看当前系统中所有BITS任务的信息。例如,以下命令会列出所有BITS任务的名称、状态、文件大小等信息:
bitsadmin /list /allusers
其中,/allusers参数表示列出所有用户的BITS任务信息。
2. 文件下载
我们可以使用bitsadmin命令来创建一个新的BITS任务,来将web上的图片下载到本地。
E:\>bitsadmin /transfer aaa /download https://img.js.design/assets/stableDiffusion/thumbnail/diffusionImage/641017156a21b6a39f0aa61e.png E:\1.png
如上命令,表示创建了一个图片下载的BITS任务,将https://img.js.design/assets/stableDiffusion/thumbnail/diffusionImage/641017156a21b6a39f0aa61e.png
下载到本地E:\1.png
。
-
/transfer:表示数据传输作业,名称为aaa;
-
/download:表示类型是下载,后跟web文件路径,以及存放到本地的路径。
如上命令执行时,过程如下:
-
DISPLAY:显示名(即作业名);
-
TYPE:类型(下载);
-
STATE:当前的状态(下载中);
-
PRIORITY:作业的优先级(正常);
-
FILES:目标文件列表;
-
BYTES:传输的进度;
-
TRANSFER RATE:传输速度;
-
TIME REMAINING:剩余时间;
3. 高速下载
-
一般使用bitsadmin进行文件下载时,如果不刻意指定优先级,则默认会以中等优先级(即priority参数为normal)进行下载。此时下载任务会根据当前系统数据传输的情况,智能的调配自己传输的速度(在不影响其他进程数据传输速度的情况下)。
优先级参数/priority有以下四个级别:-
FOREGROUND
-
HIGH
-
NORMAL
-
LOW
其中low是最低级别,normal是正常级别,high是高级别,foreground是前台级别(即全速状态)。
我们可以使用
/priority foreground
来设置高速下载:E:\>bitsadmin /transfer aaa /priority foreground /download https://img.js.design/assets/stableDiffusion/thumbnail/diffusionImage/641017156a21b6a39f0aa61e.png E:\1.png
-
此时我们会发现,速度明显高于之前正常级别下载的时候。
4. 直接下载,不显示进度
如果不关注下载的进度信息,可以添加/rawreturn
参数:
E:\>bitsadmin /rawreturn /transfer aaa /download https://img.js.design/assets/stableDiffusion/thumbnail/diffusionImage/641017156a21b6a39f0aa61e.png E:\1.png
5. 创建后台下载作业
创建任务
使用bitsadmin /create
创建后台下载作业:
# 创建一个名为aaa的作业(作业名不能重复创建)
E:\>bitsadmin /create aaa
创建成功后,会有类似如下的输出,表示创建成功:
添加任务
作业创建成功后,当前作业是空的,里面还没有任务,需要用/addfile添加新任务:
# /download是缺省参数,可以不写
E:\>bitsadmin /addfile aaa https://img.js.design/assets/stableDiffusion/thumbnail/diffusionImage/641017156a21b6a39f0aa61e.png E:\aaa.png
执行后效果:
注意:相较于之前使用 /transfer 的前台单文件下载,后台下载方式可以添加多个文件同时下载,继续添加使用/addfile
参数。
# 继续添加其他下载文件
E:\>bitsadmin/addfileaaahttps://img.js.design/assets/stableDiffusion/thumbnail/diffusionImage/641014906a21b6a39f0896d7.png E:\bbb.png
E:\>bitsadmin/addfileaaahttps://img.js.design/assets/stableDiffusion/thumbnail/diffusionImage/64081e68c9e8438484c96d19.png E:\ccc.png
查看任务
使用/list参数来查看当前作业信息:
E:\>bitsadmin /list
执行任务
使用/resume(后跟作业名)来将作业执行起来:
E:\>bitsadmin /resume aaa
查看下载进度
执行后,整个下载的过程会在后台进行,前台无进度界面。可以通过/info(后跟作业名)来查看当前下载进度:
E:\>bitsadmin /info aaa
还可以通过/verbose来查看更详细的进度情况:
E:\>bitsadmin /info aaa /verbose
如果在传输过程中我们发现速度很慢,可以使用/setpriority选项重新设定将指定的作业优先级,这样能即时改变作业的传输速度:
# /setpriority 后先跟作业名,再跟优先级
E:\>bitsadmin /setpriority aaa foreground
完成下载
使用后台下载的方式,需要我们先使用/info查看任务传输,在传输完成后,要使用/complete来手动将作业设置为“已完成”状态,这样才能将下载好的文件恢复出来:
# /setpriority 后先跟作业名,再跟优先级
E:\>bitsadmin /setpriority aaa foreground
在我们未使用/complete
设置作业“已完成”时,被下载的文件会在目标目录一直以临时文件的形式存在:
直到使用/complete
设置“已完成”后,才会恢复显示:
清除作业
对于使用bitsadmin /complete
设置为“完成”状态的任务,会被自动清除。对于未执行下载或下载失败的任务,可以使用/cancel来手动清除:
# /cancel 后跟作业名
E:\>bitsadmin /cancel aaa
总结一下,后台下载方式:
流程步骤:
创建作业(/create)-->添加文件(/addfile)-->开始下载(/resume)-->查看进度(/info)-->完成下载(/complete)
三、注意事项
使用bitsadmin进行文件下载时,需要被下载的文件所在的web服务器支持该文件的range请求头响应,否则无法下载。可以使用curl命令来测试目标web服务器是否支持range响应:
# -H表示添加额外请求头
# Range: bytes=0-10,表示请求的是0-10个字节的内容
E:\>curl -H "Range: bytes=0-10" https://img.js.design/assets/stableDiffusion/thumbnail/diffusionImage/641014906a21b6a39f0896d7.png
备注:实测未能实现使用bitsadmin进行文件上传的功能,有实测成功的同学可以实测后评论区 show 出来🫰👍
参考资料: