上传单个文件到多台机器工具
使用示例:./mooon_upload -h=192.168.10.11,192.168.10.12 -p=6000 -u=root -P='root123' -s=./abc -d=/tmp/
表示将本地的文件./abc上传到两台机器192.168.10.11和192.168.10.12的/tmp/目录
- #include "mooon/net/libssh2.h"
- #include "mooon/sys/stop_watch.h"
- #include "mooon/utils/args_parser.h"
- #include "mooon/utils/print_color.h"
- #include "mooon/utils/string_utils.h"
- #include "mooon/utils/tokener.h"
- #include
- #include
- // 逗号分隔的远程主机列表
- STRING_ARG_DEFINE(h, "", "remote hosts");
- // 远程主机的sshd端口号
- INTEGER_ARG_DEFINE(uint16_t, p, 22, 10, 65535, "remote hosts port");
- // 用户名
- STRING_ARG_DEFINE(u, "root", "remote host user");
- // 密码
- STRING_ARG_DEFINE(P, "", "remote host password");
- // 被上传的文件路径
- STRING_ARG_DEFINE(s, "", "the source file uploaded");
- // 文件上传后存放的目录路径
- STRING_ARG_DEFINE(d, "", "the directory to store");
- // 连接超时,单位为秒
- INTEGER_ARG_DEFINE(uint16_t, t, 10, 1, 65535, "timeout seconds to remote host");
- // 结果信息
- struct ResultInfo
- {
- bool success; // 为true表示执行成功
- std::string ip; // 远程host的IP地址
- uint32_t seconds; // 运行花费的时长,精确到秒
- ResultInfo()
- : success(false), seconds(0)
- {
- }
- std::string str() const
- {
- std::string tag = success? "SUCCESS": "FAILURE";
- return mooon::utils::CStringUtils::format_string("[%s %s]: %u seconds", ip.c_str(), tag.c_str(), seconds);
- }
- };
- inline std::ostream& operator
- {
- std::string tag = result.success? "SUCCESS": "FAILURE";
- out
- return out;
- }
- int main(int argc, char* argv[])
- {
- // 解析命令行参数
- std::string errmsg;
- if (!mooon::utils::parse_arguments(argc, argv, &errmsg))
- {
- fprintf(stderr, "parameter error: %s\n", errmsg.c_str());
- exit(1);
- }
- uint16_t port = mooon::argument::p->value();
- std::string source = mooon::argument::s->value();
- std::string directory = mooon::argument::d->value();
- std::string hosts = mooon::argument::h->value();
- std::string user = mooon::argument::u->value();
- std::string password = mooon::argument::P->value();
- mooon::utils::CStringUtils::trim(source);
- mooon::utils::CStringUtils::trim(directory);
- mooon::utils::CStringUtils::trim(hosts);
- mooon::utils::CStringUtils::trim(user);
- mooon::utils::CStringUtils::trim(password);
- // 检查参数(-s)
- if (source.empty())
- {
- fprintf(stderr, "parameter[-s]'s value not set\n");
- exit(1);
- }
- // 检查参数(-d)
- if (directory.empty())
- {
- fprintf(stderr, "parameter[-d]'s value not set\n");
- exit(1);
- }
- // 检查参数(-h)
- if (hosts.empty())
- {
- // 尝试从环境变量取值
- const char* hosts_ = getenv("HOSTS");
- if (NULL == hosts_)
- {
- fprintf(stderr, "parameter[-h]'s value not set\n");
- exit(1);
- }
- hosts= hosts_;
- mooon::utils::CStringUtils::trim(hosts);
- if (hosts.empty())
- {
- fprintf(stderr, "parameter[-h]'s value not set\n");
- exit(1);
- }
- }
- // 检查参数(-u)
- if (user.empty())
- {
- fprintf(stderr, "parameter[-u]'s value not set\n");
- exit(1);
- }
- // 检查参数(-P)
- if (password.empty())
- {
- fprintf(stderr, "parameter[-P]'s value not set\n");
- exit(1);
- }
- std::vector<:string> hosts_ip;
- const std::string& remote_hosts_ip = hosts;
- int num_remote_hosts_ip = mooon::utils::CTokener::split(&hosts_ip, remote_hosts_ip, ",", true);
- if (0 == num_remote_hosts_ip)
- {
- fprintf(stderr, "parameter[-h] error\n");
- exit(1);
- }
- std::string remote_filepath = directory + std::string("/") + mooon::utils::CStringUtils::extract_filename(source);
- std::vector
results(num_remote_hosts_ip); - for (int i=0; i
- {
- bool color = true;
- const std::string& remote_host_ip = hosts_ip[i];
- results[i].ip = remote_host_ip;
- results[i].success = false;
- fprintf(stdout, "["PRINT_COLOR_YELLOW"%s"PRINT_COLOR_NONE"]\n", remote_host_ip.c_str());
- fprintf(stdout, PRINT_COLOR_GREEN);
- mooon::sys::CStopWatch stop_watch;
- try
- {
- int file_size = 0;
- mooon::net::CLibssh2 libssh2(remote_host_ip, port, user, password, mooon::argument::t->value());
- libssh2.upload(source, remote_filepath, &file_size);
- fprintf(stdout, "["PRINT_COLOR_YELLOW"%s"PRINT_COLOR_NONE"] SUCCESS: %d bytes\n", remote_host_ip.c_str(), file_size);
- results[i].success = true;
- }
- catch (mooon::sys::CSyscallException& ex)
- {
- if (color)
- fprintf(stdout, PRINT_COLOR_NONE); // color = true;
- fprintf(stderr, "["PRINT_COLOR_RED"%s"PRINT_COLOR_NONE"] failed: %s\n", remote_host_ip.c_str(), ex.str().c_str());
- }
- catch (mooon::utils::CException& ex)
- {
- if (color)
- fprintf(stdout, PRINT_COLOR_NONE); // color = true;
- fprintf(stderr, "["PRINT_COLOR_RED"%s"PRINT_COLOR_NONE"] failed: %s\n", remote_host_ip.c_str(), ex.str().c_str());
- }
- results[i].seconds = stop_watch.get_elapsed_microseconds() / 1000000;
- std::cout
- }
- // 输出总结
- std::cout
- std::cout
- int num_success = 0; // 成功的个数
- int num_failure = 0; // 失败的个数
- for (std::vector
::size_type i=0; i - {
- const struct ResultInfo& result_info = results[i];
- std::cout
- if (result_info.success)
- ++num_success;
- else
- ++num_failure;
- }
- std::cout
- return 0;
- }

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

SublimeText3 English version
Recommended: Win version, supports code prompts!

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

Dreamweaver CS6
Visual web development tools

Atom editor mac version download
The most popular open source editor
