Я помню, что в 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 и т. Д.)
А про потерю пакетов и задержку:
Вы также можете рассмотреть возможность использования комбинации:
Смешайте это с ожидаемым уровнем трафика, генерируемого вашим приложением.
Вы также можете рассмотреть возможность использования 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(ðLayer);
echoRequestPacket.addLayer(&ipLayer);
echoRequestPacket.addLayer(&echoReqLayer);
// send the packet
liveDev->sendPacket(&echoRequestPacket);
}
liveDev->close();