目前,我们使用 PowerShell 中的一些逻辑来获取netstat -ano
所有 TCP 和 UDP 结果并过滤掉我们不需要看到的结果,然后将其导出到 CSV。我们希望结果仅包含聆听和(空白的)和非环回 IP。
一个例子是netstat -ano | Where-Object{$_ -notlike '*127.?.?.?*' -and $_ -notmatch '\[::1]' -and $_ -notmatch 'TIME_WAIT' -and $_ -notmatch 'CLOSE*' -and $_ -notmatch 'ESTABLISHED' -and $_ -notmatch 'SYN_*' -and $_ -notmatch 'FIN_*'}
。
但是,如果我们碰巧同时运行脚本,我们不想错过其他时间可能出现的其他选项。我刚刚发现的一个是最后确认我不知道还有什么其他选择是我们的逻辑没有包括的。
有没有办法翻转这个逻辑,而不是过滤掉所有的匹配项,我们是否可以只包含以下匹配项(空白的)或者聆听或者非环回 IP? 如果没有,我可以对该逻辑进行更多补充,但我只是想看看一些专家的想法。
答案:我找到了所有州这里并刚刚对其进行了更新,以包含所有这些内容。
答案1
没有必要时不要重新发明轮子。任何合理的问题都可能已经在整个网络上以多种方式多次被提出和回答过。您可能无法在一次搜索中找到绝对的答案,并且您可能需要使用不同的字符串、字符串匹配、精确字符串匹配、部分字符串匹配、站点特定匹配等进行搜索。
点击数
获取网络统计信息 - netstat -ano 带过滤
此代码借鉴了 Shay Levy 的 Get-NetworkStatistics 函数。此函数在本地或远程系统上运行 netstat -ano,并按进程名称、地址、端口、协议或状态(如果指定)过滤结果。使用 get-process 为每个 PID 提取进程名称。
https://gallery.technet.microsoft.com/scriptcenter/Get-NetworkStatistics-66057d71
按原样使用或根据需要进行修改。
答案2
这是处理我认为您想要的东西的一种方法......将文本行转换为您可以根据需要进行过滤的 PoSh 对象。这是我 3 或 4 年前编写的旧代码。
它能做什么 ...
- 将调用的结果保存
netstat
到 $Var - 清除不需要的线条
- 将每一行转换为 CSV 行
- 将 CSV 行集合转换为 PoSh 对象数组
- 显示集合
- 显示
.PID
第 0 个对象的属性
代码 ...
$Raw_Result = netstat -a -o -n
# get rid of the unwanted 1st three lines
$Raw_Result = $Raw_Result | Select-Object -Skip 3
# remove the `---` line
$Raw_Result = $Raw_Result | Select-String -Pattern '[^---]'
$Cleaned_Result = foreach ($Line in $Raw_Result)
{
$Line = $Line.ToString().Trim()
if ($Line[53] -eq ' ')
{
$Line = $Line.Insert(53, '-NA-')
}
$Line = $Line -replace ' {2,}', ','
$Line
}
$Final_Result = $Cleaned_Result | ConvertFrom-Csv
#$Raw_Result
#$Cleaned_Result
$Final_Result
Write-Output ''
$Final_Result[0].PID
截断输出...
Proto : UDP
Local Address : [::]:55356
Foreign Address : *:*
State : -NA-
PID : 3352
[*...snip...*]
Proto : UDP
Local Address : [fe80::d129:4be7:98da:e357%14]:53382
Foreign Address : *:*
State : -NA-
PID : 3908
1308
所有这些工作的好处是,你现在拥有一个易于排序或过滤的相当标准的对象集合。[咧嘴笑]
答案3
我找到了所有州这里并刚刚更新了它以包括最后一项,现在它们都在那里了。它们如下:
CLOSE_WAIT、CLOSED、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、LAST_ACK、LISTEN、SYN_RECEIVED、SYN_SEND 和 TIME_WAIT。