PowerShell统计本地的网络连接(CMD吐数据互访)

需求:想把netstat-an吐出来的数据统计一下,看看本地连外地有多少个,外地连本地有多少个。协议分类什么的。

注意:因为netstat是cmd的命令,尽管在PowerShell下可以运行这个命令,但是吐出来的数据是没办法在加工的,它不是PowerShell原生命令。所以解决方法是把数据吐到一个csv文件中,然后针对CSV进行加工,最后得到需要的统计信息。

首先来一个中文版的,经过测试,需要PowerShell3.0以上,也就是Windows Server 2012以上的版本(windows8以上也可以)。

#Powered By kukisama   http://jiushu.blog.51cto.com/
netstat -an |Out-File -Encoding utf8 D:\3456.csv
$files = (Get-Childitem d:\3456.csv).pspath
$content = get-content $files
clear-content $files
add-Content $files -Value "协议,本地IP地址,端口,对端IP地址,对端端口,状态"
foreach ($line in $content -ne "活动连接" -ne "  协议  本地地址          外部地址        状态")
   {
   $liner = $line.Replace("[::1]","本地");
   $line = $liner
   $liner = $line.Replace("[::]","本地");
   $line = $liner
   $line = $liner -replace("\s{1,}" ,",")
   $liner = $line
   $line = $liner -replace(":{1,}" ," ")
   $liner = $line
   $liner = $line.Replace(",TCP","TCP")
   $line = $liner
   $liner = $line.Replace(",UDP","UDP")
   $line = $liner
   $line = $liner -replace("\s{1,}" ,",")
   $liner = $line
   $liner = $line.Replace("127.0.0.1","本地")
   $line = $liner
   $liner = $line.Replace("0.0.0.0","本地")
   $line = $liner
   $liner = $line.Replace("LISTENING","监听")
   $line = $liner
   $liner = $line.Replace("ESTABLISHED","等待")
   $line = $liner
   $liner = $line.Replace("TIME_WAIT","已建立连接")
   $line = $liner
   $liner = $line.Replace("CLOSE_WAIT","关闭等待")
   $line = $liner
   $liner = $line.Replace("SYN_SENT","同步发送")
   add-Content $files -Value $liner -Encoding Default
      } 


$bb = Import-Csv -Path d:/3456.csv -Encoding Default
echo "====================================="
echo "以下为协议计数"
$bb| Group-Object –Property:协议|select Name,Count|sort -Property count
echo "====================================="
echo "以下为您本地IP连接外端地址的统计数据"
$bb| Group-Object –Property:本地IP地址|select Name,Count|sort -Property count
echo "====================================="
echo "以下为外端地址连接您本地IP的统计数据"
$bb| Group-Object –Property:对端IP地址|select Name,Count|sort -Property count
echo "====================================="
echo "以下为状态计数"
$bb| Group-Object –Property:状态|select Name,Count|sort -Property count

再来一个英文版的,因为在PowerShell2.0 也就是Windows Server 2008 R2中,是没有-Encoding Default参数的,所以要删了它,改成全英文的描述和说明。所以用中文装逼是失败的了。因此建议大家也尽量升级PowerShell到4.0(Windows Server 2008 R2是可以升级PowerShell的)

这里要说明一下的是,该文档只适合中文和英文系统,其他语种你需要修改第7行,增加更多-ne的属性。

#Powered By kukisama   http://jiushu.blog.51cto.com/
netstat -an |Out-File  D:\3456.csv
$files = (Get-Childitem d:\3456.csv).pspath
$content = get-content $files
clear-content $files
add-Content $files -Value "proto,localAddress,duankou,duiduanip,duiduanduanou,zhuangtai"
foreach ($line in $content -ne "active connections" -ne "  proto  local address          foreign address         state" -ne "活动连接" -ne "  协议  本地地址          外部地址        状态")
   {
   $liner = $line.Replace("[::1]","local");
   $line = $liner
   $liner = $line.Replace("[::]","local");
   $line = $liner
   $line = $liner -replace("\s{1,}" ,",")
   $liner = $line
   $line = $liner -replace(":{1,}" ," ")
   $liner = $line
   $liner = $line.Replace(",TCP","TCP")
   $line = $liner
   $liner = $line.Replace(",UDP","UDP")
   $line = $liner
   $line = $liner -replace("\s{1,}" ,",")
   $liner = $line
   $liner = $line.Replace("127.0.0.1","local")
   $line = $liner
   $liner = $line.Replace("0.0.0.0","local")
   $line = $liner
  <# $liner = $line.Replace("LISTENING","监听")
   $line = $liner
   $liner = $line.Replace("ESTABLISHED","等待")
   $line = $liner
   $liner = $line.Replace("TIME_WAIT","已建立连接")
   $line = $liner
   $liner = $line.Replace("CLOSE_WAIT","关闭等待")
   $line = $liner
   $liner = $line.Replace("SYN_SENT","同步发送")#>
   add-Content $files -Value $liner 
      } 

$files
$bb = Import-Csv -Path d:\3456.csv 
echo "====================================="
echo "以下为协议计数"
$bb| Group-Object –Property:proto|select Name,Count|sort -Property count
echo "====================================="
echo "以下为您本地IP连接外端地址的统计数据"
$bb| Group-Object –Property:localAddress|select Name,Count|sort -Property count
echo "====================================="
echo "以下为外端地址连接您本地IP的统计数据"
$bb| Group-Object –Property:duiduanip|select Name,Count|sort -Property count
echo "====================================="
echo "以下为状态计数"
$bb| Group-Object –Property:zhuangtai|select Name,Count|sort -Property count


输出结果如下

技术分享

本文出自 “九叔-微软私有云” 博客,请务必保留此出处http://jiushu.blog.51cto.com/972756/1663669

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。