web-dev-qa-db-fra.com

Comment faire en sorte qu'une interface réseau supprime un pourcentage défini de paquets

Je souhaite tester une application contre une panne réseau ou un réseau défectueux. Existe-t-il un outil permettant de rendre une interface sujette aux défauts ou de simuler d'une autre manière une connexion de mauvaise qualité? Par exemple, forcez l'interface à abandonner 10% des paquets.

1
little ali

Le module random de iptables peut être utilisé pour créer une perte de paquet.
Pour une perte de paquet entrante de 10%:

$ Sudo iptables -A INPUT -m statistic --mode random --probability 0.1 -j DROP

Le résultat de ce ping provient d’un autre ordinateur:

--- rpi01-wifi.smythies.com ping statistics ---
247 packets transmitted, 217 received, 12% packet loss, time 246752ms
rtt min/avg/max/mdev = 0.958/4.933/169.588/17.884 ms

De même pour les paquets sortants:

$ Sudo iptables -A OUTPUT -m statistic --mode random --probability 0.1 -j DROP

Le résultat de ce ping provient d’un autre ordinateur:

--- rpi01-wifi.smythies.com ping statistics ---
1006 packets transmitted, 871 received, 13% packet loss, time 305146ms
rtt min/avg/max/mdev = 0.892/7.363/476.902/35.397 ms, pipe 2

Combinaison des deux INPUT et OUTPUT perte de paquets forcée, mais avec une probabilité de 0,5% chacune:

$ Sudo iptables -A INPUT -m statistic --mode random --probability 0.005 -j DROP
$ Sudo iptables -A OUTPUT -m statistic --mode random --probability 0.005 -j DROP

Résulte en:

--- rpi01-wifi.smythies.com ping statistics ---
1000 packets transmitted, 967 received, 3% packet loss, time 253840ms
rtt min/avg/max/mdev = 0.876/7.583/536.867/36.065 ms, pipe 3

Voir aussi ici .

2
Doug Smythies

netem exploite les fonctionnalités déjà intégrées à Linux et aux utilitaires d’espace utilisateur pour simuler des réseaux et peut faire exactement ce que vous demandez.

De leur page d'accueil .

Perte de paquets

La perte de paquet aléatoire est spécifiée dans la commande 'tc' en pourcentage. La plus petite valeur possible non nulle est:

232 = 0,0000000232%

# tc qdisc change dev eth0 perte netem racine 0.1%

Cela provoque la suppression aléatoire de 1/10ème de pour cent (c'est-à-dire 1 paquet sur 1000).

Une corrélation optionnelle peut également être ajoutée. Cela fait en sorte que le générateur de nombre aléatoire soit moins aléatoire et peut être utilisé pour émuler des pertes en rafales de paquets.

# tc qdisc change dev eth0 perte netem racine 0.3% 25%

Cela entraînera la perte de 0,3% des paquets et chaque probabilité successive dépendra du quart de la dernière.

Probn = .25 * Probn-1 + .75 * Aléatoire

1
Tom