0 / 0 / 0
Регистрация: 24.02.2019
Сообщений: 2
1

Проблема с отправкой пакета размером более 1514 байт pcap_sendpacket() Npcap

24.02.2019, 19:08. Показов 1739. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Просьба оказать помощь в следующем вопросе. Пытаюсь отправить пакет сырых данных размером более 1514 байт на сетевой адаптер с помощью функции pcap_sendpacket(). Функция возвращает (-1). jumbo frame сетевого адаптера установлено max значение (9 kb). При этом, при отправке пакета размером 1514 байт ошибок не возникает. Код написан на C++ VS 2017.

Код:

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
#include <iostream>
#include <stdio.h>
#include <pcap.h>
#include "misc.h"
#define HAVE_REMOTE
 
using namespace std;
int main()
{
    int cnt_name = 0;
    int cnt_descr = 0;
    pcap_if_t *alldevs;
    pcap_if_t *d;
    int i = 0;
    char errbuf[PCAP_ERRBUF_SIZE];
    const char *name_adapter = "";
 
    if (pcap_findalldevs(&alldevs, errbuf) == -1)
    {
        fprintf(stderr, "Error in pcap_findalldevs_ex: %s\n", errbuf);
        exit(1);
    }
 
    for (d = alldevs; d != NULL; d = d->next)
    {
        cnt_name++;
        if (d->description)
        {
            cnt_descr++;
        }
    }
    const char *massd[12];
    int cnt = 0;
    for (d = alldevs; d != NULL; d = d->next)
    {
        printf("%d. %s", ++i, d->name);
        name_adapter = d->name;
        massd[cnt++] = name_adapter;
        if (d->description) {
            printf(" (%s)\n", d->description);
        }
        else
            printf(" (No description available)\n");
    }
 
    if (i == 0)
    {
        printf("\nNo interfaces found! Make sure Npcap is installed.\n");
        exit(1);
    }
    //Отправка пакета
    int number = 0;
    cin >> number;
    pcap_t *fp;
    pcap_freealldevs(alldevs);
    /* Load Npcap and its functions. */
    if (!LoadNpcapDlls())
    {
        fprintf(stderr, "Couldn't load Npcap\n");
        exit(1);
    }
 
    unsigned char pack[1600];
    for (size_t i = 0; i < 1600; i++)
    {
        pack[i] = i;
 
    }
    fp = pcap_open_live(massd[number - 1],65536,1000, NULL, errbuf);
    if (fp == NULL)
    {
        cout << "Error pcap_open" << endl;
        exit(1);
    }
    else
    {
        int err = 0;
        if ((err = pcap_sendpacket(fp, pack, 1515))!=NULL)
        {
            cout << "Error" <<" "<<"value "<<err<< endl;
        }
    }
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.02.2019, 19:08
Ответы с готовыми решениями:

Lipcap: Как получить timeval перед отправкой своего пакета?
Всем доброго времени суток. Собственно пара вопросов появилась. 1. При приеме пакетов pcap...

Ввести строку символов, длиной до 20 байт. Ввести слово, размером до 10 байт. Содержит ли данная строка символ
Для начала организовал просто поиск одной буквы(код уже переделан от исходного),теперь пытаюсь...

Проблема С Отправкой E-mail
Итак, исходные... имеется Lotus 8.5, HP Service Desk (черт его знает, какой версии) и агент,...

Проблема с отправкой почты
Не могу передать почту в общем,в инете масса тем по этому поводу,но не получается все равно string...

3
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
28.02.2019, 13:08 2
Ksenia I, 1514 байт - мб роутер между не поддерживает или удаленный хост? Откуда и куда вообще посылается?
0
0 / 0 / 0
Регистрация: 24.02.2019
Сообщений: 2
28.02.2019, 20:37  [ТС] 3
Это просто консольное приложение C++. Работа ведется на одном компьютере. С помощью вышеизложенного кода формируется буфер char значений , и с помощью pcap_sendpacket() пытаюсь его отправить на сетевой адаптер. Если размер этого буфера до 1514 байт включительно, то проблем с отправкой нет. Если больше, то функция возвращает -1.
0
545 / 222 / 72
Регистрация: 01.03.2011
Сообщений: 612
01.03.2019, 20:49 4
Ksenia I, сознаюсь сразу с npcap никогда не работал. Под линксом после исправлением 2х ошибок и сборки с libpcap все работает. просмотр git https://github.com/nmap/npcap/... Openclos.c показывает такое:
C
1
2
3
4
5
6
7
8
9
10
11
    {
        Open->MaxFrameSize = 1514;
        Status = STATUS_SUCCESS;
        // This call will cause SYSTEM_SERVICE_EXCEPTION BSoD sometimes.
        // I didn't figure out the reason, I threw an ask on Stackoverflow: http://stackoverflow.com/questions/31869373/get-system-service-exception-bluescreen-when-starting-wireshark-on-win10-vmware
        // But no replies, so I just workaround by hard-coding it as 1514 for now.
//      if (NPF_GetDeviceMTU(Open, &Open->MaxFrameSize) != STATUS_SUCCESS)
//      {
//          Open->MaxFrameSize = 1514;
//      }
    }
Ну а в функции записи стоит проверка на размер пакета <= MaxFrameSize. Ф-цию меняющую это значение не нашел (правда искал не долго и только глазами). Если задача не учебная, то попробуйте поискать сами, или просто пересобрать библиотеку
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.03.2019, 20:49
Помогаю со студенческими работами здесь

Проблема с отправкой нулей.
Все прекрасно работает, только не отправляет нулевые байты. Помогите чайнику,пожааалуйста!)) ...

Outlook Express 6 проблема с отправкой.
Всем привет! Подскажите пожалуйста в чём проблема. Оутлук не хочет отправлять письма пишет ошибку...

Проблема с отправкой по USART STM32F3
Добрый вечер, никак не могу найти ошибку в коде для отправки данных с микроконтроллера на ПК с...

Проблема с отправкой почты по SMTP
не пойму, как произвести аутентификацию перед отправкой почты по СМТП протоколу. Во всех...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru