批量捕获传入的 Netstat IP 作为变量

批量捕获传入的 Netstat IP 作为变量

我想知道是否有办法捕获(如果可能的话,记录)“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

相关内容