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

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Добавить в сниффер соотношение tcp пакета (порта) и процесса»

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.571 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут