概述

Fetch是microrotik RouterOS中的一个控制台工具。它用于通过HTTP、FTP或SFTP(在v6.45中添加了对SFTP的支持)向网络设备复制文件,它也可以用于发送POST/GET请求和向远程服务器发送任何类型的数据。支持HTTPS协议;默认情况下,不进行证书检查,但是将 check-certificate 设置为 yes 将启用来自本地证书存储的信任链验证。

属性

属性 说明
address (string; Default: ) 复制文件的设备IP地址。
-value (set| not-set;Default:not-set) 将输出存储在一个变量中,应该与output属性一起使用。
ascii (yes| no;Default:no) 可用于FTP和TFTP
check-certificate (yes| no;Default:no) 启用本地证书存储的信任链验证。
dst-path (string;Default:) 目标文件名和路径
host (string; Default: ) 域名或虚拟域名(如果在网站上使用,您希望从中复制信息)。例如,
address=wiki.mikrotik.com host=forum.mikrotik.com
本例中解析后的ip地址相同(66.228.113.27),但主机不同。
http-method (|delete|get|post|put; Default: get) 使用的HTTP方法
http-data (string;Default:) 使用PUT或POST方法时将要发送的数据
http-header-field (string;Default:empty) 所有报头字段及其值的列表,格式为' http-header-field=h1:fff,h2:yyy '
keep-result (yes | no;Default:yes) 如果是,则创建一个输入文件。
mode (ftp|http|tftp {!} https;Default:http) 选择连接协议:http、https、ftp或tftp。
output (none|file|user; Default: file) 设置在何处存储下载的数据
- none 表示不存储下载的数据
- file 将下载的数据保存到文件中
-user 在data变量中存储下载的数据
password (string; Default: anonymous) 密码,用于对远端设备进行认证。
port (integer;Default:) 连接端口。
src-path (string;Default:) 需要复制的远程文件的标题。
upload (yes | no;Default:no) 只有(S)FTP模式支持上传。如果启用,则fetch将用于将文件上传到远程服务器。要求设置 src-pathdst-path 参数。
url (string;Default:) 指向文件的URL。可以用来代替 addresssrc-path 参数。
user (string;Default:anonymous) 用户名,用于对远端设备进行认证。

配置举例

下面的示例展示了如何通过FTP协议从ip地址为192.168.88.2的设备上复制文件名为“conf.rsc”的文件,并将其保存为文件名为“123.rsc”的文件。登录设备需要用户名和密码。

[admin@MikroTik] /tool> fetch address=192.168.88.2 src-path=conf.rsc \
user=admin mode=ftp password=123 dst-path=123.rsc port=21 \
host="" keep-result=yes

上传文件到另一个服务器的例子:

[admin@MikroTik] /tool> fetch address=192.168.88.2 src-path=conf.rsc \
user=admin mode=ftp password=123 dst-path=123.rsc upload=yes

另一个演示url属性用法的文件下载例子。

[admin@MikroTik] /> /tool fetch url="https://www.mikrotik.com/img/netaddresses2.pdf" mode=http
  status: finished

[admin@test_host] /> /file print
 # NAME                     TYPE                  SIZE                 CREATION-TIME
 ...
 5 netaddresses2.pdf        .pdf file             11547                jun/01/2010 11:59:51

向远程主机发送信息

可以使用HTTP POST请求将信息发送到准备接受它的远程服务器。在下面的例子中,我们将地理坐标发送到一个PHP页面:

/tool fetch http-method=post http-content-type="application/json" http-data="{\"lat\":\"56.12\",\"lon\":\"25.12\"}" url="https://testserver.lv/index.php"

在本例中,数据以文件的形式上传。注意,由于文件来自一个变量,因此它的大小最多只能为4KB。这是RouterOS变量的限制。

/export file=export.rsc

:global data [/file get [/file find name=export.rsc] contents];
:global $url "https://prod-51.westeurope.logic.azure.com:443/workflows/blabla/triggers/manual/paths/invoke....";

/tool fetch mode=https http-method=put http-data=$data url=$url

变量返回值

可以将fetch命令的结果保存到一个变量中。例如,可以根据HTTP页面返回的结果触发特定的操作。可以在下面找到一个非常简单的例子,当PHP页面返回“0”时禁用 ether2:

{
    :local result [/tool fetch url=https://10.0.0.1/disable_ether2.php as-value output=user];
    :if ($result->"status" = "finished") do={
        :if ($result->"data" = "0") do={
            /interface ethernet set ether2 disabled=yes;
        } else={
            /interface ethernet set ether2 disabled=no;
        }
    }
}

SFTP

自6.45beta50 /tool fetch 支持SFTP (SSH文件传输协议)协议:

[admin@MikroTik] > /tool fetch url="sftp://10.155.126.200/home/x86/Desktop/50MB.zip" user=x86 password=root dst-path=disk1
      status: downloading
  downloaded: 1048KiB
       total: 51200KiB
    duration: 6s
-- [Q quit|D dump|C-z pause]