powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c#, SharpPcap, Сниффер пакетов
2 сообщений из 2, страница 1 из 1
c#, SharpPcap, Сниффер пакетов
    #38387305
Rastamans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток. Пишу снифер пакетов для одной сетевой игры. Метод шифрование пакетов мне известен.
Бьюсь уже не первый день над решением проблемы.
Суть такова:
Слушаю TCP пакеты с помощью библиотеки SharpPcap

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
            // выбираем первое устройство в спсике (для примера)
            ICaptureDevice captureDevice = deviceList[0];
            // регистрируем событие, которое срабатывает, когда пришел новый пакет
            captureDevice.OnPacketArrival += new PacketArrivalEventHandler(Program_OnPacketArrival);
            // открываем в режиме promiscuous, поддерживается также нормальный режим
            captureDevice.Open(DeviceMode.Promiscuous, 1);
            //Фильтр
            //MessageBox.Show(ipAddressControl1.Text);
            captureDevice.Filter = "ip and tcp and host " + ipAddressControl1.Text; //Следим только за TCP трафиком
            // начинаем захват пакетов
            captureDevice.StartCapture();



Код: 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.
        void Program_OnPacketArrival(object sender, CaptureEventArgs e)
        {
            List<byte[]> FirstList = new List<byte[]>();
            int i;
            // парсинг всего пакета
            Packet packet = Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);
            var DataTCP = packet.PayloadPacket.PayloadPacket.PayloadData;
            // получение только TCP пакета из всего фрейма
            var tcpPacket = TcpPacket.GetEncapsulated(packet);
            // получение только IP пакета из всего фрейма
            var ipPacket = IpPacket.GetEncapsulated(packet);
            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();
                // данные пакета
                var data = tcpPacket.PayloadPacket;

                var a = tcpPacket.Header;
            }
        }



В итоге получаю исходящие пакеты в таком виде:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Send: Return Code: 0x00000000
00000000  46 0C 41 01 3A 02 5F C9 9B A6 FE 43 31 52 78 68    F.A.:._....C1Rxh
00000010  35 48 D5 17 7D 7A 4D 48 E7 21 9F                   5H..}zMH.!.     


Send: Return Code: 0x00000000
00000000  E3 DC A0 03 9A 61 CB D0 B8 5A F2 04 B0 AA 22 F0    .....a...Z....".
00000010  ED F0 48 59 5B E8 0C 2D 08 18 2B 0D 22 0E 92 77    ..HY[..-..+."..w
00000020  DE B1 0B 39 73 0E E9 C5 0E D9 7A 46 22 11 30 B2    ...9s.....zF".0.
00000030  3F CB AC 6F 08 67 F0 78 0E AD A5 B5 75 5D 32 98    ?..o.g.x....u]2.
00000040  41 9E 69 B8 28 76 5B B1 5C 8F 3A E5 88 19 C8 EB    A.i.(v[.\.:.....
00000050  E8 99 A4 E0 27 52 02 0A D2 D6 C5 64 B4 1E BD 24    ....'R.....d...$
00000060  2C 71 EB 08 41 01 CE 7F 5E 99 93 8F 7D 20 6B AC    ,q..A..^...} k.
00000070  D8 E8 F7 BB 4F F0 5C 35 2D DA 34 C1 60 93 91 1C    ....O.\5-.4.`...
00000080  DA        



Но сервер получает этот же пакет в таком виде:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
0000: 46 0C 41 01 3A 02 5F C9 9B A6 FE 43 31 52 78 68   F.A.:._....C1Rxh
0010: 35 48 D5 17 7D 7A 4D 48 E7 21 9F 69 DC A0 03 8F   5H..}zMH.!.i....
0020: 61 48 E1 08 6B C3 B4 B0 AA 22 EA CA 32 79 68 6A   aH..k...."..2yhj
0030: D9 3D 2D 08 18 2B 0D 22 0E 92 77 DE B1 0B 39 73   .=-..+."..w...9s
0040: 0E E9 C5 0E D9 7A 46 22 11 30 B2 3F CB AC 6F 08   .....zF".0.?..o.
0050: 67 F0 78 0E AD A5 B5 75 5D 32 98 41 9E 69 B8 F9   g.x....u]2.A.i..
0060: 25 24 6A 1E 2F 38 07 1B 45 F0 3F 7C 00 AE 5E 14   %$j./8..E.?|..^.
0070: 0C D8 9C 49 08 11 5F C1 93 79 B2 B7 AF 3F 33 34   ...I.._..y...?34
0080: 8C 0A E9 C5 47 47 B4 08 AD AF 3A 43 36 23 80 3A   ....GG....:C6#.:
0090: 7D 98 A3 B6 04 E0 FA 86 42 6D 8F 86 F1 65 81 02   }.......Bm...e..
00A0: BA 23 5E 8E 38 16 7E 00 00 00 00 00 00 00 00 00   .#^.8.~.........



Не могу понять как добиться такого же результата при перехвате пакетов.
Подскажите уважаемые а то уже нервы сдают. Спасибо.
...
Рейтинг: 0 / 0
c#, SharpPcap, Сниффер пакетов
    #38387448
Rastamans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Утро вечера мудренее. После крепкого сна и прочтению на ночь нескольких статей про TCP был сделан вывод что TCP не отправляет пакеты а просто отправляет данные от сендера к рецейверу. Что и с подвигло на идею а что если брать проходящий поток данных и заносить его в массив? А уже с это массива сортировать манипулировать данными. Хотелось бы услышать совет, на сколько правильно такое решение? Не будет ли потери данных при перехвате? Как лучше реализовать данную идею?

ЗЫ: Сильно не пинать учусь сам по учебникам поэтому могу что то не понимать или опускать.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c#, SharpPcap, Сниффер пакетов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]