Я пишу простой преобразователь сетевых пакетов на C++, который меняет только значение TTL (на данный момент). Основной цикл получает запросы из очереди netfilter с помощью Recv(fd, buf, sizeof(buf), 0), а затем обрабатывает эти запросы с помощью nfq_handle_packet(h, buf, rv). Размер буфера составляет 500000000 байт, что составляет около 500 мегабайт или 4000 мегабит. Скорость интернета далеко не близка к 4 гигабитам (и даже если бы она была 4 гигабита, я не передаю столько данных), но функция Recv продолжает получать ENOBUFS («Нет буфера доступное пространство» при форматировании с помощью strerror), когда я, например, запускаю тест скорости на сайтеspeed.cloudflare.com. Я не понимаю, как мне здесь не хватает буферного пространства. Код, который получает запросы:
// created before in the code: char buf[500000000] = {0};
fd = nfq_fd(h);
while (true) {
rv = recv(fd, buf, sizeof(buf), 0);
if (rv < 0) {
std::cout packetsRejected += 1;
return result;
}
uint8_t ipVersion = (packetData[0] & 0b11110000) >> 4;
if (ipVersion == 4) {
uint8_t headerLength = packetData[0] & 0b1111;
if (headerLength < 5 || headerLength > 15) {
int result = nfq_set_verdict(qh, id, NF_ACCEPT, 0, NULL);
data->packetsRejected += 1;
data->bytesRejected += length;
return result;
}
headerLength *= 4;
packetData[8] = 64;
fixIPv4Checksum(packetData, headerLength);
}
int result = nfq_set_verdict(qh, id, NF_ACCEPT, length, packetData);
data->packetsAccepted += 1;
data->bytesAccepted += length;
return result;
}
Подробнее здесь: https://stackoverflow.com/questions/789 ... hen-my-buf
Почему я продолжаю получать ошибки ENOBUFS в моей программе nfqueue, даже если мой буфер достаточно велик? ⇐ C++
Программы на C++. Форум разработчиков
1726470308
Anonymous
Я пишу простой преобразователь сетевых пакетов на C++, который меняет только значение TTL (на данный момент). Основной цикл получает запросы из очереди netfilter с помощью Recv(fd, buf, sizeof(buf), 0), а затем обрабатывает эти запросы с помощью nfq_handle_packet(h, buf, rv). Размер буфера составляет 500000000 байт, что составляет около 500 мегабайт или 4000 мегабит. Скорость интернета далеко не близка к 4 гигабитам (и даже если бы она была 4 гигабита, я не передаю столько данных), но функция Recv продолжает получать ENOBUFS («Нет буфера доступное пространство» при форматировании с помощью strerror), когда я, например, запускаю тест скорости на сайтеspeed.cloudflare.com. Я не понимаю, как мне здесь не хватает буферного пространства. Код, который получает запросы:
// created before in the code: char buf[500000000] = {0};
fd = nfq_fd(h);
while (true) {
rv = recv(fd, buf, sizeof(buf), 0);
if (rv < 0) {
std::cout packetsRejected += 1;
return result;
}
uint8_t ipVersion = (packetData[0] & 0b11110000) >> 4;
if (ipVersion == 4) {
uint8_t headerLength = packetData[0] & 0b1111;
if (headerLength < 5 || headerLength > 15) {
int result = nfq_set_verdict(qh, id, NF_ACCEPT, 0, NULL);
data->packetsRejected += 1;
data->bytesRejected += length;
return result;
}
headerLength *= 4;
packetData[8] = 64;
fixIPv4Checksum(packetData, headerLength);
}
int result = nfq_set_verdict(qh, id, NF_ACCEPT, length, packetData);
data->packetsAccepted += 1;
data->bytesAccepted += length;
return result;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78985672/why-do-i-keep-on-receiving-enobufs-errors-in-my-nfqueue-program-even-when-my-buf[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия