Gerando tráfego incorreto para teste

5

Eu lembro que no Linux (quando fazendo make menuconfig ) em algum lugar havia uma opção que dizia algo assim:

Use this only if you want to generate network traffic, or if you want to create faulty network traffic

Infelizmente não me lembro de onde isso foi ou até me lembro de qualquer ferramenta que me permita realmente criar esse tráfego.

O que eu estou procurando é

  • criando pacotes ICMP errados
  • injetando alta latência ou perda de pacotes

em uma rede perfeitamente normal.

O objetivo é testar o comportamento de alguns aplicativos que precisam trabalhar com links entre a UE e os EUA. Eu gostaria de "teste de estresse" o aplicativo quanto latência vai engolir ou quanto perda de pacotes ele pode lidar com.

    
por serverhorror 17.06.2009 / 17:15

6 respostas

4

A opção em que você está pensando é CONFIG_NET_PKTGEN .

    
por 17.06.2009 / 17:28
5

O Linux não está tão bem equipado como FreeBSD aqui. Mas você pode tentar o Netem com o tc (pacote iproute).

Carregue o Netem

modprobe sch_netem

Solte metade dos pacotes no dispositivo tap0:

tc qdisc add dev  tap0 root netem delay 50ms loss 50% 
    
por 18.06.2009 / 08:20
1

hping permite gerar pacotes de protocolos TCP, UDP, ICMP e RAW-IP.

    
por 17.06.2009 / 17:18
1

Existe também uma ferramenta chamada scapy . Pode gerar quase qualquer tipo de pacote. Como autor diz:

Scapy is a powerful interactive packet manipulation program. It is able to forge or decode packets of a wide number of protocols, send them on the wire, capture them, match requests and replies, and much more. It can easily handle most classical tasks like scanning, tracerouting, probing, unit tests, attacks or network discovery (it can replace hping, 85% of nmap, arpspoof, arp-sk, arping, tcpdump, tethereal, p0f, etc.)

E sobre perda e atraso de pacotes:

  • iptables têm - probabilidade opção
  • IIRC pode QUEUE pacotes para inserir atraso
por 17.06.2009 / 17:46
0

Você também pode considerar usar uma combinação de:

Misturando isso com os níveis esperados de tráfego gerados pelo seu aplicativo.

    
por 17.06.2009 / 17:43
0

Você também pode considerar o uso de PcapPlusPlus . Ele tem um mecanismo de criação de pacotes que suporta ICMP e uma maneira de enviar pacotes para a rede. Aqui está um código de exemplo para o que você deseja (enviando pacotes ICMP errados de alta latência):

// 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();
    
por 25.01.2016 / 08:27