网络安全运维必须掌握的Windows命令行工具

作者:Sender Su  来源:原创内容  发布日期:2023-01-11  最后修改日期:2023-01-11

在上一篇关于数据库备份操作的文章中,简单带入了PowerShell脚本及命令操作,以及两个Windows命令行程序:net和robocopy。

很显然,会写脚本,无论是传统的批处理抑或现代的PowerShell,都是网管运维水平的分水岭,尤其是在网络安全运维领域,这分水岭就越发显得差距巨大。

article banner

笔者:国际认证信息系统审计师、软考系统分析师

如果想全面了解Windows操作系统提供的命令行工具,可以在这个地址找到完整的命令清单:

https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/windows-commands

本文中介绍的命令都可以在这个清单中找到相应的入口。

在笔者的认识中,这么多命令,具体到网络安全运维上,作为一名网管应该掌握的主要且关键的Windows命令行程序应包括下面这些:

一、基础操作命令

(觉得基础命令无聊的可以直接跳过,看第二部分)

1、ping和pathping

熟悉得不需要介绍,只是为归类而提及。但是需要注意随着Windows操作系统版本变化,ping命令也在不断加强。比如最新版本的ping支持源路由,支持IPV6等等。

pathping知道的人相对较少,该命令提供有关源和目标之间的中间跃点的网络延迟和网络丢失的信息,执行时能返回PING测试过程中路由上每个节点的RTT、发起PING的设备到每一个路由节点的丢包率。

通过pathping给出的路由器或链路的数据包丢失程度,可以确定哪些路由器或子网可能有网络问题。 

2、tracert

tracert,也是已经相当熟悉的路由节点分析命令。它和pathping是相似的,但pathping在碰到路由节点不响应icmp包时就会自动中断,而tracert则会按最大跃点数量进行尝试找到路由的最终节点。

3、ipconfig

ipconfig,也是作为网管不可能不知道的命令。除了显示网络接口信息之外,还支持dhcp和dns相关操作。在网络安全运维上最大的作用在于在脚本中获得网络接口信息作进一步处理使用。

4、route

操作路由表,从这个命令开始,不少网管员就开始转向使用Microsoft管理控制台(MMC)或者某些单机网管软件了。但类似route命令这样Windows操作系统内建的命令的优势,就是在于可以把操作记录到命令脚本,实现自动化运维。route命令的主要用途一般在于操作本机的静态(永久)路由。

5、netstat

netstat除了用于观察端口开放状态和对外链接情况外,在网络安全运维中的关键意义最重要在于找出端口被哪个进程占用,具体命令形式是:

netstat -ano

得到和端口对应的进程ID清单后,可以通过进程管理命令tasklist检索进程名称,或者通过taskkill杀掉进程。

另外,通过netstat列出与本地端口连接的远端地址和端口,有经验的网管可以从这些连接信息中判断是否存在可能的恶意情况。

6、cipher

cipher比较小众,使用的场合并不多。该命令主要用途包括加密、解密和复写擦除数据,但需要注意只适用于NTFS文件系统分区的文件。

作为网络安全运维管理员来说,需要明确的是cipher进行的是文件一级的加解密(Encrypting File System,EFS)和数据擦除,这和BitLocker这种对整个分区进行的加解密工具是不同的概念。具体可以参考:

https://learn.microsoft.com/en-us/windows/win32/fileio/file-encryption

一般来说,如果已经对硬盘进行了BitLocker加密,那么除非有足够的理由,比如计算机是多人公用的计算机,否则就没必要再对文件应用EFS加密。

值得注意的是加解密之外的用法,比如擦除硬盘分区上的空闲空间,可以给出如下的参数去使用cipher,该命令不会覆盖已存在的文件:

cipher /w
二、复杂操作命令

实在不好定义,姑且叫“复杂操作”。这类命令通常通过大量的参数去灵活使用,实现多种类别的操作系统管理配置操作能集中在一个命令行程序内完成。普遍需要给出多级命令参数,个别还提供了交互式操作控制台。

很多网管员都是通过Windows的各种图形界面功能去实现这些配置工作,但通过掌握这些命令,不仅工作效率能得到提升,而且通过脚本实现运维自动化,更能释放自己。

1、tasklist和taskkill

这两个进程管理的命令,使用起来介乎于基本和复杂之间。tasklist列出当前运行中的进程,taskkill则是杀掉进程。大多数网管员会习惯于通过任务管理器界面去操作进程,但如果需要在脚本中进行这些操作,那就必须使用这两个命令。

在网络安全运维方面值得指出的是,一些特殊的木马程序,会针对任务管理器在UI上做手脚来隐藏自己。但tasklist可以更直接地列出全部进程,这些木马就不容易隐藏自己。

tasklist有比较多的参数,其中一个比较有用的参数是:

tasklist -svc

这个参数可以列出和每个进程相关的服务,这在查找隐藏服务时很有效。

由于输出内容会包括没有服务的进程,所以一般通过管道操作把输出重定向到find命令进行过滤,比如

tasklist /svc | find /v "暂缺"

又如需要给出进程关联的DLL文件时,可以使用

tasklist /m

这功能会列出每个进程所调用的DLL文件。

tasklist命令本身提供了筛选器参数,可以按进程状态、名称、PID、SESSION等进程信息进行筛选过滤。这就是我前面说的这两个命令具有一定复杂性的特征。

如果要杀掉进程,最简单的操作是通过:

taskkill -im 进程名称

taskkill -pid 进程ID

注意taskkill支持批量杀进程操作,既可以通过一次给出多个PID参数的方式,也可以通过筛选器参数实现对进程的条件筛选,把符合筛选条件的进程一次全部杀掉。

必须指出的是这两个命令还可以操作远程计算机。

2、robocopy

robocopy在我们上一篇文章 MSSQL数据库自动备份和自动复制转移备份中起到关键作用。这个文件复制命令的功能其实远远不是那么简单,网络上也有大量的参考介绍,比如:

https://ss64.com/nt/robocopy.html

https://www.cnblogs.com/zhanglei1371/p/6724167.html

另外,由于robocopy的参数是如此之多,为了方便使用,不少人开发了一些图形界面的外壳工具去调用robocopy,比如:

RoboCop RoboCopy:

https://sourceforge.net/projects/robocoprobocopy/files/RoboCopRoboCopy.exe/download

robocop robocopy 1

robocop robocopy 2

RoboMirror:

https://sourceforge.net/projects/robomirror/files/RoboMirror/RoboMirror%202.0%20Setup.exe/download

robomirror

ChoEazyCopy:

https://github.com/Cinchoo/ChoEazyCopy/releases/tag/v2.0.0.1

ChoEazyCopy

RoboCopyGUI:

https://www.softpedia.com/get/System/OS-Enhancements/RoboCopy-GUI.shtml

robocopy gui

还有好几个。但GUI工具并不是这里要介绍的,而且大部分GUI工具并没有完整实现robocopy的全部功能。但为了充分学习了解robocopy的使用方法,从GUI操作界面开始入手,观感会来得更直接一些。

robocopy的使用重点主要在于同步备份,支持多线程同时复制的特性在合理运用时可以充分利用网络带宽或者压榨存储设备性能,但如果不合理使用,反而会拖慢robocopy的复制效率。

3、net

net命令相当有历史了,可以追溯到WINDOWS 95 版本。只要看一眼NET命令的操作参数,就能领会到NET命令的设计目标是打造成为能对操作系统进行全面配置和管理操作的单一命令行程序,所以net命令包括了账号管理、用户组管理、域计算机管理、共享文件管理、登录会话管理、后台服务管理、时间服务管理、用户管理等等。

由于net命令功能多且杂,要在这里详细介绍是不可能的。由于微软也认为net命令过于繁杂已经不应该再被使用而需要重构,因此net命令在微软网站上的介绍已经基本消失,仅剩下若干片言只语,比如:

https://learn.microsoft.com/zh-cn/windows/win32/winsock/net-exe-2

不过,在互联网上还可以搜索到大量关于net命令使用方法的介绍文章,虽然有点零碎散乱,但还是能良好支撑使用net命令的,而且net命令也一直保留直到现在的Windows 11都还提供。下面这个链接文章对net命令进行了详细的介绍,可以保存起来作为参考:

https://www.computerhope.com/nethlp.htm

在网络安全运维上,从net命令所能实现的操作,就可以理解到net命令对于编写自动脚本非常有用,而且相比其它功能完整的复杂命令,高度简化隐藏细节的net命令,反而是网管员实现有限度脚本的好帮手。

4、sc

sc是用来与服务控制管理器和服务进行通信的命令行程序。sc也即Service Control的首字母缩写。

很显然sc的出现就是net start/net stop这两个操作的深度和完整替代。因此,在自动化脚本中按需启动和停止服务,通过sc命令就可以方便地实现。

除了最基础的启动和停止系统服务之外,sc支持大量面向系统服务的配置操作,而且相当多的功能在服务管理控制台中是没有的,比如创建服务、删除服务、设置服务器的安全描述符等等。

但是微软网站上也没有足够详细的介绍文档,只是介绍了config/create/delete/query四个命令参数。或者我以后会专门写一下sc.exe的特殊用法。

5、reg

reg是注册表编辑器的命令行版本。作为网络安全运维的管理员,在掌握注册表编辑器之余,也应该熟悉reg命令,这样就可以在自动化脚本中操作注册表了。

值得一提的是reg命令也具有一些注册表编辑器所不具备的功能,典型如:

  • reg compare  比较指定的注册表子项或条目。

  • reg copy  将注册表项复制到本地或远程计算机上的指定位置。

  • reg restore/save 将保存的子项和项写入注册表/在指定的文件中保存指定子项、项和注册表值的副本。

注意restore/save操作与注册表导出/导入注册表文件、加载/卸载配置单元是不同的。

6、netsh

netsh是功能强大的Windows网络组件配置安装的命令行工具。前述的清单中对netsh的介绍内容太少。但好在netsh是当前推荐使用的工具,所以在微软网站上有比较详细的文档,比如:

https://learn.microsoft.com/zh-cn/windows/win32/winsock/netsh-exe

https://learn.microsoft.com/zh-cn/windows-server/networking/technologies/netsh/netsh

以及一些旧版本Windows服务器的文档都有介绍:

https://learn.microsoft.com/zh-cn/previous-versions/windows/it-pro/windows-server-2008-r2-and-2008/cc754753(v=ws.10)

netsh是从Windows 2008 Server版本开始引入的,其作用是实现操作网络配置的交互式命令行界面,这类似于企业级可网管的交换机、路由器之类的网络设备的命令行操作。

通过netsh,可以安装Windows操作系统内的各种网络通信服务器角色和组件、配置和显示它们的状态,典型如配置网络访问保护(NAP)客户端和动态主机配置协议(DHCP)客户端等。

基本上,netsh命令提供了每个服务器角色或组件使用Microsoft管理控制台(MMC)管理单元时相同的功能。

此外,netsh命令还有大量操作功能是在MMC管理控制台中没有提供的,比如配置IPv6、配置网桥、配置远程过程调用(RPC)等。

7、auditpol

查询和设置用户账户审计策略的命令行工具。在网络安全中,审计的要求和作用对于网络安全运维管理员来说已经是耳熟能详。通过auditpol,可以实现和“本地安全策略”管理控制台中的“账户策略”的相关设置,包括有:

  • 设置并查询系统审核策略。

  • 设置并查询每个用户的审核策略。

  • 设置和查询审核选项。

  • 设置并查询用于委托访问审计策略的安全描述符。

  • 将审核策略报告或备份到以逗号分隔的值(CSV)文本文件中。

  • 从CSV文本文件中加载审核策略。

  • 配置全局资源SACL。

auditpol命令比较方便的一个参数功能是backup,可以把系统审核策略设置、所有用户的按用户审核策略设置以及所有审核选项备份到 CSV 格式文件中。

cmd help

小结

Windows还有很多命令行工具,这里介绍只是我认为比较有用和常用的,好像写了很多,又好像没写什么,就已经4千字了,总之三言两语就只能带个入门而已。

还有一些其它的命令行工具,比如mpcmdrun.exe,可以配置和管理Microsoft Defender,都是值得关注的。

本栏目相关
  •  2024-09-06 拿来主义也高质:优化 WSUS 之不会开发但会找
  •  2020-02-27 服务器热加硬盘、热转RAID模式,配合LINUX卷操作实现不重启服务器完成扩容
  •  2023-01-26 Windows服务器折腾安装MegaRAID存储管理器17.05版
  •  2022-02-24 如何安装使用 Broadcom RAID卡命令行管理工具 StorCLI(或称PercCLI)?
  •  2023-02-26 能否用Windows服务器作为路由器?(基本配置篇)
  •  2022-10-17 安装 MegaRAID 存储管理器集中监控 DAS 存储状态
  •  2023-04-08 Windows 服务器网络性能调优系列网卡篇
  •  2022-12-03 VMware vSphere Hypervisor 6.7 手动升级过程实例
  •  2022-05-20 内网DNS服务实现公网域名在内网转换解析
  • 本站微信订阅号:

    微信订阅号二维码

    本页网址二维码:

    本栏目热门内容
  • Acrobat虚拟PDF打印机执行打印时挂起,解决办法竟然...
  • LINKSYS交换机登录WEB界面显示不正确的解决方法
  • 又一次RAID 5阵列故障记录
  • 解决VMware vSphere ESXi 5.0 Update 1 中虚机不能...
  • 修改CentOS发行信息以绕过Dell服务器BIOS更新和DSET...
  • 解决虚拟化运行的 Windows Server 2003 标准版出现...
  • Windows Server 2008 重命名域和域控制器
  • Intel Nehalem CPU Errata 导致 VMWare ESXi(vSpher...
  • 一次很精神的电脑组装过程记录(但不是自己的电脑)...
  • 解决MySQL Cluster 备份总是失败,提示文件已存在的...
  • MegaCli安装及使用杂记
  • 解决WSUS显示客户端不全的问题
  • 解决 VMWare vSphere 6 客户端无法修改用户密码
  • 解决Windows Server 2008 R2域控制器显示无法连接到...
  • 本站服务器RAID 5阵列双硬盘失效挽救记录
  • 网站数据库从MySQL 5.0升级到5.6的记录
  • 解决MariaDB使用Percona XtraBackup增量备份出错
  • DELL PowerEdge 820 报CPU3 INTERNAL ERROR 的解决...
  • Linux 下的分区调整工具GParted实战
  • 修改arpwatch使通知邮件主题显示IP地址
  • 程序员漫画:如何用8种不同的编程语言去解救公主
  • 解决Samba WINS服务的错误解释问题
  • 解决很好用的多合一即时通信软件pidgin的崩溃问题
  • 使用 GParted 进行虚拟机硬盘分区调整操作
  • 解决Squid代理HTTP时在浏览器出现Content Encoding ...
  • 用Delphi编写使用到ADO的DLL的一些问题
  • 网站简单改版
  • 索尼系列手提电脑备份失败,出现700错误的解决办法
  • Dell R900服务器 BMC firmware incompatible with C...
  • 更多...