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

Posted

技术标签:

【中文标题】如何将连接到网络的所有IP地址保存在文本文件中【英文标题】:How to save all ip addresses connected to the network in a text file 【发布时间】:2021-11-30 16:22:54 【问题描述】:

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

msg @allip.txt "test"

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

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    
  ...

有没有办法只保存网址

【问题讨论】:

您的第一个question 已关闭是有原因的。请拨打tour。请阅读How to Ask 一个好问题。那么请edit您的问题与您尝试使用的代码minimal reproducible example。 尽管如此,arp 命令不会为您提供网络上所有计算机的列表。 我不希望通过设备名称来完成,因为员工可以更改它,我希望通过 ip 来完成,因为设备是有线的 我不知道你为什么提到设备名称。我在我的cmets中没有说任何关于它的事情。无论如何,您在原始问题中谈到 SECURITY,但随后在评论中提到允许员工更改其设备名称。这让我想知道您的员工还被允许做哪些其他事情。无需外包此代码,您就有一个巨大的安全漏洞。 我很难相信仅通过搜索该站点就找不到现有答案。我搜索了 [batch-file] arp,这是它找到的第一个链接。 Parse IP address from ARP command BATCH 【参考方案1】:

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

注意:从链接的文档来看,这些 缓存地址 连同它们的“解析的以太网或令牌环物理地址”一起存储,并为每个网络适配器维护一个单独的表,是 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”)/Set-Content 为 ANSI)

PowerShell (Core) 7+ 中,默认情况下您将获得无 BOM 的 UTF-8 文件。

使用Set-Content-Encoding 参数显式控制编码。

说明

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

.ForEach() 为每个匹配的行执行一个脚本块 ( ... )。

-split 的一元形式,string splitting operator,将每个匹配行按空格拆分为一个字段数组,索引 [0] 返回第一个这样的字段。

【讨论】:

以上是关于如何将连接到网络的所有IP地址保存在文本文件中的主要内容,如果未能解决你的问题,请参考以下文章

如何在linux 获得局域网内所有IP地址,并重定向至文本文件

超级网管大师2006V6.2的功能

在文本框中手动输入并连接到服务器

Ping网络中的所有IP并将输出存储在文本文件中

如何将添加的文本保存到 navigator.notification.prompt 中的新变量?

网络配置,文本文件查找