Назад | Перейти на главную страницу

Генерация ошибочного трафика для тестирования

Я помню, что в Linux (когда делал make menuconfig) где-то была опция, которая говорила примерно так:

Используйте это только в том случае, если вы хотите генерировать сетевой трафик или если вы хотите создать ошибочный сетевой трафик.

К сожалению, я не могу вспомнить, где это было, или даже не могу вспомнить какой-либо инструмент, который позволяет мне действительно создавать такой трафик.

То, что мне нужно, это

в сети, которая в остальном прекрасно.

Цель состоит в том, чтобы протестировать поведение некоторых приложений, которые должны работать со ссылками между ЕС и США. Я хотел бы «нагрузить» приложение на то, какую задержку оно проглотит или с какой потерей пакетов оно может справиться.

Linux не так хорошо оборудован, чем FreeBSD Вот. Но ты можешь попробовать Netem с tc (пакет iproute).

Загрузить Netem

modprobe sch_netem

Сбросьте половину пакетов на устройство tap0:

tc qdisc add dev  tap0 root netem delay 50ms loss 50% 

Вариант, о котором вы думаете, это CONFIG_NET_PKTGEN.

hping позволяет генерировать пакеты протоколов TCP, UDP, ICMP и RAW-IP.

Также есть инструмент под названием чешуйчатый. Он может генерировать практически любой тип пакета. Как говорит автор:

Scapy - это мощная интерактивная программа для обработки пакетов. Он может подделывать или декодировать пакеты широкого ряда протоколов, отправлять их по сети, захватывать их, сопоставлять запросы и ответы и многое другое. Он может легко справляться с большинством классических задач, таких как сканирование, трассировка, зондирование, модульные тесты, атаки или обнаружение сети (он может заменить hping, 85% nmap, arpspoof, arp-sk, arping, tcpdump, tethereal, p0f и т. Д.)

А про потерю пакетов и задержку:

  • iptables есть --вероятность вариант
  • IIRC он может QUEUE пакеты для вставки задержки

Вы также можете рассмотреть возможность использования комбинации:

Смешайте это с ожидаемым уровнем трафика, генерируемого вашим приложением.

Вы также можете рассмотреть возможность использования PcapPlusPlus. Он имеет механизм создания пакетов, который поддерживает ICMP, и способ отправки пакетов в сеть. Вот пример кода того, что вы хотите (отправка ошибочных пакетов ICMP с высокой задержкой):

// open a pcap live device for interface with IP 10.0.0.1 (put your IP address instead)
IPv4Address ipToSearch("10.0.0.1");
PcapLiveDevice* liveDev = PcapLiveDeviceList::getInstance().getPcapLiveDeviceByIp(ipToSearch);;
liveDev->open();

int NUM_OF_ERRONEOUS_PACKETS_TO_GENERATE = 1000;

// send NUM_OF_ERRONEOUS_PACKETS_TO_GENERATE echo request packets
for (int i = 0; i < NUM_OF_ERRONEOUS_PACKETS_TO_GENERATE; i++)
{
    // create an Eth layer with whatever MAC addresses you want
    MacAddress srcMac(std::string("11:22:33:44:55:66")); // put the MAC address you want here
    MacAddress destMac(std::string("66:55:44:33:22:11")); // put the MAC address you want here
    EthLayer ethLayer(srcMac, destMac, ETHERTYPE_IP);

    // create IPv4 layer with whatever IPs you want (put the IPs you want instead)
    IPv4Layer ipLayer(IPv4Address(std::string("1.1.1.1")), IPv4Address(std::string("2.2.2.2")));

    // Create ICMP echo (ping) request layer
    IcmpLayer echoReqLayer;
    icmp_echo_request* echoReq = echoReqLayer.setEchoRequestData(100, 0, 0xe45104007dd6a751ULL, NULL, 0);

    // make the echo request erroneous. You can do whatever manipulation you want here
    echoReq->header->checksum = 0x1111;
    echoReq->header->code = 100;

    // create a packet with Eth, IPv4, ICMP echo layers;
    Packet echoRequestPacket(100);
    echoRequestPacket.addLayer(&ethLayer);
    echoRequestPacket.addLayer(&ipLayer);
    echoRequestPacket.addLayer(&echoReqLayer);

    // send the packet
    liveDev->sendPacket(&echoRequestPacket);
}

liveDev->close();