如何将连接到网络的所有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
报告的 - 使用以下内容:
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地址,并重定向至文本文件