Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# Windows Forms

Войти
Регистрация
Восстановить пароль
 
SecuritySide
1 / 1 / 0
Регистрация: 04.11.2015
Сообщений: 22
#1

SharPcap. Перехват пакетов в реальном времени - C#

07.11.2016, 21:17. Просмотров 467. Ответов 0
Метки нет (Все метки)

Всем доброго времени суток! В учебных целях необходимо реализовать сниффер базирующийся на Winpcap, для указанной (с#) платформы в качестве адаптации выбрал sharpPcap. Нашел много исходников и от самих разработчиков и от форумчан, пришел к следующему результату. Код минимально переделан, написан по посту Простой сниффер - Не удается загрузить DLL "wpcap", нашел и исходник на Хабре.Код во вложении. Так вот суть в том, что мой код работает ограниченно: начало перехвата осуществляется по нажатии Button1, затем перехватывается n пакетов, точнее в коде n=2 , затем, после остановки перехвата, нажимается Button2 и содержимое переменной s записывается в текстбокс. Я же хотел бы получить перехват в реальном времени: Нажимается Button1 начало перехвата, данные о пакетах записываются в текстбокс с периодом N секунд(мс), затем нажимается кнопка button2. Перехват прекращается.
Спасибо!


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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SharpPcap;
using PacketDotNet;
using System.Threading;
using SharpPcap.AirPcap;
using System.IO;
namespace sniffer
{
    public partial class Form1 : Form
    {
        CaptureDeviceList dList; 
        ICaptureDevice device;
        Thread thread;
        static ICaptureDevice captureDevice;
        static int i = 0;
        static string s = "";
        static void capture()
        {
            try
            {
                CaptureDeviceList deviceList = CaptureDeviceList.Instance;
                // выбираем первое устройство в спсике (для примера)
                captureDevice = deviceList[0];
                // регистрируем событие, которое срабатывает, когда пришел новый пакет
                captureDevice.OnPacketArrival += new PacketArrivalEventHandler(Program_OnPacketArrival);
                // открываем в режиме promiscuous, поддерживается также нормальный режим
                captureDevice.Open(DeviceMode.Promiscuous, 1000);
                // начинаем захват пакетов
                captureDevice.StartCapture();
            }
            catch (ThreadAbortException)
            {
                Thread.ResetAbort();
                captureDevice.Close();
                captureDevice.OnPacketArrival -= new PacketArrivalEventHandler(Program_OnPacketArrival);
                return;
            }
        }
 
        static void Program_OnPacketArrival(object sender, CaptureEventArgs e)
        {
            if (i < 2)
            {
                // парсинг всего пакета
                Packet packet = Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);
                // получение только TCP пакета из всего фрейма
                var tcpPacket = TcpPacket.GetEncapsulated(packet);
                // получение только IP пакета из всего фрейма
                var ipPacket = IpPacket.GetEncapsulated(packet);
                packet.GetType();
                
                s += "\n" + packet.ToString();
                if (tcpPacket != null && ipPacket != null)
                {
                    DateTime time = e.Packet.Timeval.Date;
                    int len = e.Packet.Data.Length;
 
                    // IP адрес отправителя
                    var srcIp = ipPacket.SourceAddress.ToString();
                    // IP адрес получателя
                    var dstIp = ipPacket.DestinationAddress.ToString();
 
                    // порт отправителя
                    var srcPort = tcpPacket.SourcePort.ToString();
                    // порт получателя
                    var dstPort = tcpPacket.DestinationPort.ToString();
                    // данные пакета
                    //string data = tcpPacket.PayloadPacket.ToString();
 
                }
            }
            else
            {
                captureDevice.Close();
                return;
            }
            i++;  
        }
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
        private void button1_Click(object sender, EventArgs e)
        {
            capture();
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text = s;
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2016, 21:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос SharPcap. Перехват пакетов в реальном времени (C#):

Перехват вывода консольного приложения в реальном времени - C#
Всем доброго утра! Суть в чем: есть такое консольное приложение for($x=0; $x&lt;20; $x++) { print &quot;$x\n&quot;; sleep 1; } Нужно...

(LAN) Перехват пакетов и передача их третьей машине - C#
Перехват пакетов делаю с помощью след. действий: _device.OnPacketArrival += new PacketArrivalEventHandler(Program_OnPacketArrival); ...

TCP, перехват пакетов: нужен пример - C#
Всем доброго времени... Реально ли прослушивать тсп соединение посредством .net, ловить пакеты.? Интересуют примеры с кодом.

.NET 4.x Ssl/Tls криптография, перехват пакетов - C#
Вообщем, создал свой клиент - серверное приложение и использую Ssl/Tls криптографию. Попробовал перехватить данные между клиентом и...

.NET 4.x Перехват пакетов, если знаем порты, имя сервера - C#
Всем привет. Имеется приложение, которое взаимодействует с базой данных на другом сервере, мы знаем полное имя сервера, можем посмотреть...

Модификация голоса в реальном времени - C#
Я хочу создать утилиту для скайпа, которая будет менять голос при подключение микрофона и уговорящего будет менять голос. Есть предложения ?

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2016, 21:17
Привет! Вот еще темы с ответами:

.NET 4.x Отображение информации из БД в реальном времени - C#
Здравствуйте. Вопрос следующий... В БД поступают данные по топливу каждые n-секунд. Хочу написать приложение которое мониторит изменения...

Изменение страницы в WebBrowser в реальном времени - C#
Друзья, подскажите, каким образом можно реализовать следующую программу: WebBrowser на форме открывает сохранённый html файл По...

Чтение данных с COM порта в реальном времени - C#
Как осуществить данную задачу при нажатии на кнопку?

Преобразование данных с COM порта в реальном времени - C#
Подскажите пожалуйста. Мне необходимо считать температурные показатели с COM порта для дальнейшего использования их в температурном...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru