Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 43

Добавить в сниффер соотношение tcp пакета (порта) и процесса

06.03.2015, 14:20. Показов 2581. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пишу программу-сниффер,есть код ,где происходит прослушивание пакетов,хочу добавить соотношение tcp пакета(порта) и процесса,который занял порт,в нете не нашёл нужной инфы,кому не сложно помогите,заранее спасибо

p.s реализация была с помощью библиотеки winpcap
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.03.2015, 14:20
Ответы с готовыми решениями:

Сниффер локального SMTP сервера по порту TCP
Доброго времени! Есть локальный SMTP сервер который расположен на 25-ом порту TCP и несколько клиентов-"роботов",...

Разбор TCP пакета
Подскажите я нашел примеры на C# но там надо подключать PcapDotNet. Можно ли без него собрать ICMP пакет самостоятельно по байтам. Если у...

Парсер TCP пакета
Доброго всем времени суток. Подскажите как можно отловить информацию из tcp пакета, как это делает Wireshark На данный момент...

12
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
06.03.2015, 18:16
Лучший ответ Сообщение было отмечено Psilon как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
public static List<Port> GetNetStatPorts()
{
  var Ports = new List<Port>();
  
  try {
    using (Process p = new Process()) {
  
      ProcessStartInfo ps = new ProcessStartInfo();
      ps.Arguments = "-a -n -o";
      ps.FileName = "netstat.exe";
      ps.UseShellExecute = false;
      ps.WindowStyle = ProcessWindowStyle.Hidden;
      ps.RedirectStandardInput = true;
      ps.RedirectStandardOutput = true;
      ps.RedirectStandardError = true;
  
      p.StartInfo = ps;
      p.Start();
  
      StreamReader stdOutput = p.StandardOutput;
      StreamReader stdError = p.StandardError;
  
      string content = stdOutput.ReadToEnd() + stdError.ReadToEnd();
      string exitStatus = p.ExitCode.ToString();
       
      if (exitStatus != "0") {
        Console.WriteLine("Error {0}", exitStatus);
      }
  
      string[] rows = Regex.Split(content, "\r\n");
      foreach (string row in rows) {
        string[] tokens = Regex.Split(row, "\\s+");
        if (tokens.Length > 4 && (tokens[1].Equals("UDP") || tokens[1].Equals("TCP"))) {
          string localAddress = Regex.Replace(tokens[2], @"\[(.*?)\]", "1.1.1.1");
          Ports.Add(new Port {
            protocol = localAddress.Contains("1.1.1.1") ? String.Format("{0}v6",tokens[1]) : String.Format("{0}v4",tokens[1]),
            port_number = localAddress.Split(':')[1],
            process_name = tokens[1] == "UDP" ? LookupProcess(Convert.ToInt16(tokens[4])) : LookupProcess(Convert.ToInt16(tokens[5]))
          });
        }
      }
    }
  }
  catch (Exception ex)
  {
    Console.WriteLine(ex.Message)
  }
  return Ports;
}
  
public static string LookupProcess(int pid)
{
  string procName;
  try { procName = Process.GetProcessById(pid).ProcessName; }
  catch (Exception) { procName = "-";}
  return procName;
}
  
 
 
public class Port
{
  public string name
  {
    get
    {
      return string.Format("{0} ({1} port {2})",this.process_name, this.protocol, this.port_number);
    }
  }
  public string port_number { get; set; }
  public string process_name { get; set; }
  public string protocol { get; set; }
}
1
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
06.03.2015, 18:34
Цитата Сообщение от Lexxdru Посмотреть сообщение
пишу программу-сниффер,есть код ,где происходит прослушивание пакетов,хочу добавить соотношение tcp пакета(порта) и процесса,который занял порт,в нете не нашёл нужной инфы,кому не сложно помогите,заранее спасибо
p.s реализация была с помощью библиотеки winpcap
WinPcap работает на таком уровне сетевого стека, где данные о
процессе отсутствуют. К примеру:

[Winpcap-users] How can I get packets in/out by certain process id?
https://www.winpcap.org/piperm... 02023.html
Unfortunately WinPcap does not provide such information. There are ways
(with the IP helper API) to know the sockets opened by each process, and
then match such information with the TCP and UDP packets captured by
WinPcap, but this is not something offered by WinPcap directly.

Also, consider that some packets are not generated by any process at all,
they are generated by the OS itself (e.g. by the TCP/IP stack during its
normal operation).
0
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 43
06.03.2015, 19:42  [ТС]
а какие библиотеки использовались?
Regex не видит
<Port>-тоже ругается
в чём может быть причина?
0
28 / 28 / 5
Регистрация: 24.03.2013
Сообщений: 238
07.03.2015, 08:34
Неймспейсы
C#
1
2
3
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;
Вызов
C#
1
2
foreach (var item in GetNetStatPorts())
    richTextBox1.Text += item.name + "\n";
Ну и точку с запятой не забудьте добавить:
C#
1
2
3
4
5
catch (Exception ex)
  {
    Console.WriteLine(ex.Message); <- тут
  }
  return Ports;
Добавлено через 11 минут
p.s. добавил бы еще к коду

C#
1
ps.CreateNoWindow = true;
чтобы консолька не мелькала.
0
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 43
07.03.2015, 11:52  [ТС]
теперь только на Port ругается.

ещё такой вопрос,это в консольке,а как удобнее будет перенести на win forms?
0
28 / 28 / 5
Регистрация: 24.03.2013
Сообщений: 238
07.03.2015, 11:56
Значит класс Port не скопировали.

Чтобы адаптировать нужно Console.WriteLine заменить на MessageBox.Show, остальное не трогать.
0
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 43
07.03.2015, 21:02  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.NetworkInformation;
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;
 
namespace ConsoleApplication1
{
    class Program
    {
        public static List<Port> GetNetStatPorts()
        {
            var Ports = new List<Port>();
 
            try
            {
                using (Process p = new Process())
                {
 
                    ProcessStartInfo ps = new ProcessStartInfo();
                    ps.Arguments = "-a -n -o";
                    ps.FileName = "netstat.exe";
                    ps.UseShellExecute = false;
                    ps.WindowStyle = ProcessWindowStyle.Hidden;
                    ps.RedirectStandardInput = true;
                    ps.RedirectStandardOutput = true;
                    ps.RedirectStandardError = true;
 
                    p.StartInfo = ps;
                    p.Start();
 
                    StreamReader stdOutput = p.StandardOutput;
                    StreamReader stdError = p.StandardError;
 
                    string content = stdOutput.ReadToEnd() + stdError.ReadToEnd();
                    string exitStatus = p.ExitCode.ToString();
 
                    if (exitStatus != "0")
                    {
                        Console.WriteLine("Error {0}", exitStatus);
                    }
 
                    string[] rows = Regex.Split(content, "\r\n");
                    foreach (string row in rows)
                    {
                        string[] tokens = Regex.Split(row, "\\s+");
                        if (tokens.Length > 4 && (tokens[1].Equals("UDP") || tokens[1].Equals("TCP")))
                        {
                            string localAddress = Regex.Replace(tokens[2], @"\[(.*?)\]", "1.1.1.1");
                            Ports.Add(new Port
                            {
                                protocol = localAddress.Contains("1.1.1.1") ? String.Format("{0}v6", tokens[1]) : String.Format("{0}v4", tokens[1]),
                                port_number = localAddress.Split(':')[1],
                                process_name = tokens[1] == "UDP" ? LookupProcess(Convert.ToInt16(tokens[4])) : LookupProcess(Convert.ToInt16(tokens[5]))
                            });
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            return Ports;
        }
 
        public static string LookupProcess(int pid)
        {
            string procName;
            try { procName = Process.GetProcessById(pid).ProcessName; }
            catch (Exception) { procName = "-"; }
            return procName;
        }
        static void Main(string[] args)
        {
        
        }
            
 
    
  
        }
    
}
вот вроде обьявлен
0
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 43
09.03.2015, 13:06  [ТС]
можете по подробнее ?
0
28 / 28 / 5
Регистрация: 24.03.2013
Сообщений: 238
09.03.2015, 13:32
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Port
{
  public string name
  {
    get
    {
      return string.Format("{0} ({1} port {2})",this.process_name, this.protocol, this.port_number);
    }
  }
  public string port_number { get; set; }
  public string process_name { get; set; }
  public string protocol { get; set; }
}
Вам нужно было внимательнее просмотреть пост Psilon.
0
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 43
09.03.2015, 15:35  [ТС]
точно,ошибки ушли.
List<Port> GetNetStatPorts() -можно узнать что это за обьявление странное?
0
28 / 28 / 5
Регистрация: 24.03.2013
Сообщений: 238
09.03.2015, 15:39
http://professorweb.ru/my/csha... l3/3_1.php
0
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 43
09.03.2015, 15:42  [ТС]
и ещё вопрос по выводу всего,до этого выводил readalltext или что то в этом роде
C#
1
2
3
4
5
6
7
8
9
10
 static void Main(string[] args)
         static void Main(string[] args)
        {
            
            var n=new List<Port>();
            for(int i=0;i<5;i++)
            Console.Write(n[i].ToString());
            Console.ReadKey();
          
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.03.2015, 15:42
Помогаю со студенческими работами здесь

Сниффер пакетов, запись пакета
Доброго времени суток! Не могли бы вы мне помочь, возникла следующая проблема - разбираюсь с сетевыми протоколами и рванул с места в...

Отправка TCP пакета
Всем привет! Появился ЕЩЁ один вопрос. Пишу программу без использования VCL, мне требуется отправить TCP пакет средствами (по...

Структура TCP пакета
TCP пакет, в данном случае, это порция данных переданная по TCP. И у меня такой вопрос. Вот заголовок этого пакета содержит Inthernet, IP,...

Идентификация отправителя TCP пакета
Всем привет! Народ мне интересно узнать, как можно идентифицировать отправителя TCP пакета, если он находиться за nat???

Контрольная сумма TCP пакета
Как вычислить контрольную сумму отправляемого TCP пакета на сервер? Ну например при помощи md5 как вычислить контрольную сумму? Какие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru