使用NETSTAT获取外部地址名称以建立活动TCP连接

时间:2013-03-22 00:16:05

标签: powershell netstat

我在PowerShell中使用NETSTAT命令。我需要获取以XYZ名称开头的外部地址列表,并使用TCP连接将ESTABLISHED作为状态。

由于NETSTAT结果如下,我坚持解析。

PS C:\Windows\system32> .\NETSTAT.EXE

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    10.125.4.233:2310      157.05.39.133:2492     ESTABLISHED

我只需要外部地址名称而不是本地主机上的远程地址 远程地址不显示FQDN。

3 个答案:

答案 0 :(得分:4)

 $netstats = netstat -p TCP -f
 $data = $netstats[4..($netstats.count)] #The good info starts on index 4
 foreach($line in $data){
     $line = $line -split ' ' | ? {$_ -ne ''}
     $final += @(New-Object -TypeName psobject -Property @{'Proto'=$line[0];'LAddress'=$line[1];'FAddress'=$line[2];'State'=$line[3]})
 }
 $netstat_results = $final
 $netstat_results | ? {$_.state -eq 'ESTABLISHED'}

现在,在解析netstat返回的文本后,应该很容易获得所需的数据。

答案 1 :(得分:0)

运行netstat /?收益率等等:

-f显示外部的完全限定域名(FQDN)               地址。

解析,使用New-PSObjectFromMatches:

netstat -f |
 new-psobjectfrommatches -pattern "(TCP|UDP)\s+(\S+)\s+(\S+):(\S+)\s+(\S+)" -property $nul,TCP/UDP,LocalAddress,ForeignAddress,Protocol,State |
 where {(
         ($_.TCP/UDP -eq 'TCP') -and
         ($_.State -eq 'ESTABLISHED') -and
         ($_.ForeignAddress -like 'XYZ*')
        )} | select -ExpandProperty ForeignAddress 

答案 2 :(得分:0)

+1代表@ E.V.I.L。答案,但由于分配(NetStat$netstats,它阻塞了$final的(慢)流。 为了使管道保持流式传输,最好避免分配,例如:

netstat -p TCP -f | Select -Skip 4 | ForEach {
    $Properties = $_.Trim() -split '[\s]+'
    [PSCustomObject]@{
        'Proto'= $Properties[0]
        'Local Address'= $Properties[1]
        'Foreign Address'= $Properties[2]
        'State'= $Properties[3]
    }
}

通过添加例如| Select -Expand 'Foreign Address',您只得到Foreign Address