如何将所有连接到网络的IP地址保存在文本文件中

How to save all ip addresses connected to the network in a text file

出于安全原因,我想在没有外包的情况下为员工创建一个警报软件。我找到了一种使用 msg 命令从 cmd 发送警报的方法,我没有测试这段代码,但我是从 Microsoft 站点生成的,如果有任何错误请告诉我

msg @allip.txt "test"

对于 IP 列表,我找到了使用 arp -a 使用 cmd 的解决方案,但我必须像这样清除文件中的额外信息,问题是如果我在文本中保留额外信息,代码不工作

Interface: 192.168.1.140 --- 0x3
  Internet Address      Physical Address      Type
  192.168.1.1           00-00-00-00-00-00     dynamic   
  192.168.1.61          00-00-00-00-00-00     dynamic   
  192.168.1.255         00-00-00-00-00-00     static    
  ...

有没有办法只保存互联网地址table

要提取所有 缓存的 IP 地址 - 这是 arp.exe /a 报告的内容 - 使用以下内容:

  • 注意:根据链接文档判断,这些 缓存地址 与它们的“它们解析的以太网或令牌环物理地址”一起存储,并带有单独的 table为每个网络适配器维护,是手头计算机 在当前 OS 会话中主动与之交谈的 IP 地址 ,即 与联网的整套计算机相同
    扫描整个子网以获得可达 IP 地址,请考虑第三方功能,例如Ping-Subnet
((arp /a) -match '^\s+\d').ForEach({ (-split $_)[0] })

要保存到文件,说 ips.txt,附加 > ips.txt| Set-Content ips.txt

注:

  • Windows PowerShell 中,您将通过这些文件保存方法获得不同的字符编码 (UTF-16 LE ("Unicode" ) > / ANSI Set-Content)

  • PowerShell (Core) 7+ 中,您将默认(一致)获得无 BOM 的 UTF-8 文件。

使用Set-Content-Encoding参数明确控制编码。

说明:

  • -match '^\s+\d' 过滤由 arp /a 输出的行数组,仅包括以 (^) 开头的行,至少有一个 (+) 空白字符。 (\),后跟十进制数字 (\d) - 这将输出行限制为显示缓存-table 条目的行。

  • .ForEach() 为每个匹配行执行脚本块 ({ ... })。

  • -split的一元形式,即string splitting operator,将每个匹配行按空格分割成字段数组,索引[0]returns 第一个这样的字段。