我想知道是否有办法捕获(如果可能的话,记录)“netstat”命令显示的 IP 地址。我正在尝试编写一个脚本,等待来自特定主机的 ping。有没有办法将这些信息捕获到可行变量中,然后可以在脚本中使用?我已将输出通过管道传输到文本文件中,但我仍然不明白如何将文本文件中的 IP 捕获到变量中
提前致谢
答案1
如果您有一个包含 IP 的文本文件,而您只想要 IP,那么 netstat 就变得无关紧要了。
从 gnuwin32 获取 grep 和正确的正则表达式。这样就可以了
C:\blah>grep -oP (\d{1,3}\.){1,3}\d{1,3} filewithips
尝试arp -a>myfile
或 netstat -aon>a 然后你有一个包含 IP 和其他信息的文件,你只想要 IP,现在运行我给你的 grep 命令,你就会得到 IP
或这个
C:\>netstat -aon | grep -oP (\d{1,3}\.){1,3}\d{1,3}
将输出 IP 列表
您可以运行一个 for 循环,将每一行读入一个变量
那么这就不是读取 IP 的问题,只是读取文件行的问题。
答案2
此脚本演示如何将netstat
的输出 IP 保存到 PowerShell 中的变量中
只需在 PowerShell ISE 中运行脚本,打开新浏览器,转到 www.google.com 并查看发生了什么。
$allIPs = [System.Net.Dns]::GetHostAddresses("www.google.com")
$myIP = $allIPs[0].IPAddressToString
while ($true) {
cls
netstat -n | select-string "$myIP.*ESTABLISHED" | foreach {
$part = $_.line.split(' ',[System.StringSplitOptions]::RemoveEmptyEntries)
$localIP = $part[1] -replace ":.*", ""
$remoteIP = $part[2] -replace ":.*", ""
write-host $localIP $remoteIP
}
sleep 2
}
一旦启动,它会netstat -n
每 2 秒查询一次所有连接(while ($true)
与一起sleep 2
)。
为了加快 netstat 的速度,-n
(numeric) 是最重要的参数,因为不会进行 DNS 查找。您可以在以下位置阅读有关其他参数的更多信息,-a
例如-o
科技网
接下来,PowerShell 仅过滤已建立的连接(select-string "$myIP.*ESTABLISHED"
例如 www.google.com)。这只是一个示例,用于说明其工作原理。更改
$myIP = $allIPs[0].IPAddressToString
等待 ping 的 IP
$myIP = '192.168.1.1'
最后一部分是用空格分隔行($_.line.split(' '
),然后删除空格([System.StringSplitOptions]::RemoveEmptyEntries
),删除端口(-replace ":.*", ""
)并将结果保存到相应的变量中。
你可以用它们做任何你想做的事。我只是重复了他们的话write-host $localIP $remoteIP