Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2012, 15:29   #1
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Всем доброго вечера. Будьте добры помочь в поиске информации. Где почитать, чтобы написать программулину на выдергивание порта процесса по PID для C#. Т.е. я могу получить ProcessID, но какие мне использовать библиотеки для получения доступа к списку портов. Некий аналог консольной команды netstat -aon . Желательно ссылку на источник, а долбше я уже сам разберусь, искал в msdn и гугле, ничего полезного.

вот набросал немного, надо понять как сделать portsList
Код:
using System;
using System.Diagnostics;

namespace getPortsOfProcess
{
    class Program
    {
        static void Main() 
        {
            string processName = "blablabla"; //здесь напишите название искомого процесса
            bool flag = false;
            string ports = "";
            int processId = 0;

            // Console.WriteLine("All process:");
            foreach (System.Diagnostics.Process process in System.Diagnostics.Process.GetProcesses())
            {
                //Console.WriteLine("Process: {0}, ID: {1}", process.ProcessName, process.Id);
                if (process.ProcessName == processName) 
                {
                    flag = true;
                    processId = process.Id;
                }
            }

            if (flag) {
                //как же здесь определить portsList
                for (int i=0; i<portsList.length; i++) {
                    if (portsList[i].Id == processId) {
                        ports += ","+portsList[i].port;
                    }
                }
            }
            ports = ports.Substring(1);

            if (ports != "") {
                Console.WriteLine("Процесс {0} использует порты: {1}", processName, ports);
            }
            else {
                Console.WriteLine("Ничего не найдено! Процесс {0} не использует порты!", processName);
            }

            Console.ReadKey();
        }
    }
}
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"

Последний раз редактировалось Stilet; 09.12.2012 в 16:44.
bpystep вне форума Ответить с цитированием
Старый 09.12.2012, 21:25   #2
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Сделал вот так, как в приложении: код практически весь не мой. Кто нибудь сможет адаптировать еще и под UDP, на примере TCP(сделано)? http://rghost.ru/42126525
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 09.12.2012, 21:45   #3
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

когда-то давно делал нечто подобное
Код:
public class TConnection : MarshalByRefObject
9 	{
10 	string dwState;
11 	string dwLocalAddr;
12 	int dwLocalPort;
13 	string dwRemoteAddr;
14 	int dwRemotePort;
15 	
16 	public TConnection(string dwState,
17 	string dwLocalAddr,
18 	int dwLocalPort,
19 	string dwRemoteAddr,
20 	int dwRemotePort)
21 	{
22 	this.dwState = dwState;
23 	this.dwLocalAddr = dwLocalAddr;
24 	this.dwLocalPort = dwLocalPort;
25 	this.dwRemoteAddr = dwRemoteAddr;
26 	this.dwRemotePort = dwRemotePort;
27 	}
28 	
29 	public string getdwState() { return dwState;}
30 	public string getdwLocalAddr(){ return dwLocalAddr;}
31 	public int getdwLocalPort() { return dwLocalPort;}
32 	public string getdwRemoteAddr() { return dwRemoteAddr; }
33 	public int getdwRemotePort() { return dwRemotePort; }
34 	}
35 	
36 	public class TConnectionList : NetTools
37 	{
38 	[DllImport("Iphlpapi.dll")]
39 	public static extern int GetTcpTable(byte[] TcpTable, out int pdwSize, bool bOrder);
40 	
41 	/*Ïîðÿäîê çàïîëíåíèÿ ëó÷øå íå ìåíÿòü*/
42 	private TConnection setConnInf(byte[] tcpTable, ref int indx)
43 	{
44 	TConnection conn = new TConnection(
45 	bufToState(tcpTable, ref indx),
46 	bufToIp(tcpTable, ref indx),
47 	byteToInt(tcpTable, ref indx),
48 	bufToIp(tcpTable, ref indx),
49 	byteToInt(tcpTable, ref indx)
50 	);
51 	return conn;
52 	}
53 	
54 	public List<TConnection> getConnectionList()
55 	{
56 	List<TConnection> conList = new List<TConnection>();
57 	int sizebuf = 0;
58 	int status;
59 	byte[] tcpTable = null;
60 	GetTcpTable(tcpTable, out sizebuf, false);
61 	if (sizebuf > 0)
62 	{
63 	tcpTable = new Byte[sizebuf];
64 	status = GetTcpTable(tcpTable, out sizebuf, true);
65 	if (status == 0)
66 	{
67 	int nOffSet = 0;
68 	int NumEntries = byteToInt(tcpTable, ref nOffSet);
69 	for (int i = 0; i < NumEntries; i++)
70 	{
71 	conList.Add(setConnInf(tcpTable, ref nOffSet));
72 	}
73 	}
74 	}
75 	return conList;
76 	}
77 	}
Код:
public class NetTools : MarshalByRefObject
    {
        //статусы отсюда http://msdn.microsoft.com/en-us/library/aa366909(VS.85).aspx
        enum STATE
        {
            CLOSED = 1,
            LISTEN,
            SYN_SENT,
            SYN_RECEIVED,
            ESTABLISHED,
            FIN_WAIT1,
            FIN_WAIT2,
            CLOSE_WAIT,
            CLOSING,
            LAST_ACK,
            TIME_WAIT,
            DELETE_TCB
        }

        /*ip-шники переведём в строки*/
        protected string bufToIp(byte[] buf, ref int indx)
        {
            string ip = buf[indx++] + "." + buf[indx++] + "." + buf[indx++] + "." + buf[indx++];
            return ip;
        }

        /*приводим byte к int и перескакиваем каждый раз на 4 вперёд (на размер int)*/
        protected int byteToInt(byte[] arr, ref int indx)
        {
            byte[] _arr = new byte[4];
            int _i = 0;
            int t_indx = indx;
            while (t_indx < indx + 4)
            {
                _arr[_i] = arr[t_indx];
                t_indx++;
                _i++;
            }
            indx = t_indx;
            return System.BitConverter.ToInt32(_arr, 0);
        }

        protected string bufToState(byte[] arr, ref int indx)
        {
            int state = byteToInt(arr, ref indx);
            return Enum.Format(typeof(STATE), state, "G");
        }
    }
Не знаю то не то =)
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация netstat Horus92 Работа с сетью в Delphi 0 06.05.2010 22:12