﻿# Kod zwraca wyniki bardzo podobne jak polecenie netstat –an.  
# Kod wymaga, aby na zdalnym komputerze był zainstalowany protokół SNMP 
# i komponent WMI SNMP Provider.

use Win32::OLE qw(in);
$Win32::OLE::Warn = 3;

# ------ KONFIGURACJA SKRYPTU ------
$strComputerIP = '127.0.0.1';
# ------ KONIEC KONFIGURACJI ---------
$objLocator = Win32::OLE->new('WbemScripting.SWbemLocator');
$objWMI = $objLocator->ConnectServer('', 'root/snmp/localhost');
$objNamedValueSet = Win32::OLE->new('WbemScripting.SWbemNamedValueSet');
$objNamedValueSet->Add('AgentAddress', $strComputerIP)->Value;
$objNamedValueSet->Add('AgentReadCommunityName', 'public')->Value;
$objNamedValueSet->Add('AgentWriteCommunityName', 'public')->Value;

print " Protokół  Lokalny adres   Zdalny adres       Status\n";
$colTCPConns = $objWMI->InstancesOf('SNMP_RFC1213_MIB_tcpConnTable', undef, $objNamedValueSet->{Item});
foreach my $objConn (in $colTCPConns) {
    print '  TCP   ' . $objConn->tcpConnLocalAddress . ':' . $objConn->tcpConnLocalPort . '         ' . $objConn->tcpConnRemAddress . ':' . $objConn->tcpConnRemPort . '       ' . $objConn->tcpConnState, "\n";
}

$colUDPConns = $objWMI->InstancesOf('SNMP_RFC1213_MIB_udpTable', undef, $objNamedValueSet->{Item});
foreach my $objConn (in $colUDPConns) {
    print '  UDP   ' . $objConn->udpLocalAddress . ':' . $objConn->udpLocalPort . '         *:*', "\n";
}
