Перечисление открытых сетевых портов - C#
Формулировка задачи:
приветствую, нужна помощь знающих людей. есть задача, а именно нужно написать в форме программу, с использованием winAPI которая будет показывать открытые сетевые порты, сколько времени открыт порт, информацию (путь, версии, имя (это основное)...).
сам никогда с winAPI не работал, вообще не знаю что да как. если мой вопрос носит исчерпывающий характер, то прошу скинуть ссылку где есть подобная проблема. может у кого есть какие-нибудь наработки что поможет мне в изучении текущей задачи. в любом случае спасибо!
на данный момент курирую MSDN и google, но продвижений нет(
Решение задачи: «Перечисление открытых сетевых портов»
textual
Листинг программы
[DllImport( "Ws2_32.dll", SetLastError = true, CharSet = CharSet.Ansi )]
static extern string inet_ntoa (
[In] IN_ADDR in_addr
);
[DllImport( "ntdll.dll", SetLastError = true, CharSet = CharSet.Unicode )]
unsafe private static extern IntPtr RtlIpv4AddressToString (
uint* Addr,
StringBuilder S
);
unsafe static void Main ( string[] args )
{
MIB_TCPROW2[] tcpRows;
IN_ADDR in_addr0 = new IN_ADDR(), in_addr1 = new IN_ADDR();
do
{
tcpRows = GetTcpRows();
Console.Clear();
Console.WriteLine( "Process\t\tPID\tProtocol\tLocal Address\tLocal Port\tRemote Address\tRemote Port\tState\tOffload State" );
for ( int i = tcpRows.Length - 1; i >= 0; i-- )
{
//if ( Process.GetProcessById( (int)tcpRows[i].dwOwningPid ).ProcessName == "uTorrent" )
//{
//// RtlIpv4AddressToString
//StringBuilder addr0 = new StringBuilder( 16 ),
// addr1 = new StringBuilder( 16 );
//var addr = tcpRows[i].dwLocalAddr;
//RtlIpv4AddressToString( &addr, addr0 );
//addr = tcpRows[i].dwRemoteAddr;
//RtlIpv4AddressToString( &addr, addr1 );
in_addr0.S_addr = tcpRows[i].dwLocalAddr;
in_addr1.S_addr = tcpRows[i].dwRemoteAddr;
Console.WriteLine( string.Format( "{0}\t{1}\t{2}\t\t{3}\t{4}\t\t{5}\t{6}\t{7}\t{8}",
Process.GetProcessById( (int)tcpRows[i].dwOwningPid ).ProcessName,
tcpRows[i].dwOwningPid,
"TCP",
//addr0,
string.Format( "{0}.{1}.{2}.{3}", in_addr0.S_un_b.s_b1, in_addr0.S_un_b.s_b2, in_addr0.S_un_b.s_b3, in_addr0.S_un_b.s_b4 ),
ntohs( (ushort)tcpRows[i].dwLocalPort ),
//addr1,
string.Format( "{0}.{1}.{2}.{3}", in_addr1.S_un_b.s_b1, in_addr1.S_un_b.s_b2, in_addr1.S_un_b.s_b3, in_addr1.S_un_b.s_b4 ),
ntohs( (ushort)tcpRows[i].dwRemotePort ),
tcpRows[i].dwState,
tcpRows[i].dwOffloadState )
);
//}
}
} while ( Console.ReadLine() != "end" );
}