Имитация отброшенных пакетов в Linux на основе протокола (UDP, TCP и т. Д.) - PullRequest
1 голос
/ 21 марта 2012

Я знаю, что могу использовать tc и netem, чтобы сделать

tc qdisc add dev eth0 root netem loss 50%

Это отбросит 50% пакетов во всем трафике eth0. Однако я хотел бы указать протокол (UDP, TCP и т. Д.), Чтобы отбрасывать только пакеты этого протокола.

Ответы [ 2 ]

8 голосов
/ 21 июня 2012

Это раздражающая особенность iptables.Хотя в документах говорится, что DROP молча отбрасывает пакет на полу, он все равно сообщает вызывающей программе, в результате чего sendmsg (или что-то еще) возвращает значение установки errno в ENETUNREACH или EPERM.Кажется, что нет функции «не молча отбрасывать пакет и никому не рассказывать об этом».

Однако я нашел следующий обходной путь: если пакеты будут выходить из вашеголокальный компьютер, вы можете установить TTL на 0 в таблице mangle:

iptables -t mangle -A SomeChain -m ttl -j TTL --ttl-gt 0 --ttl-set 0

Я успешно использовал это, чтобы справиться с атакой отражения DoS.

4 голосов
/ 21 марта 2012

Вместо этого используйте iptables - у него есть опция вероятности, которая должна позволить вам сделать это, например:

iptables -A INPUT -m statistic -p tcp --mode random --probability 0.5 -j DROP

Настройте различные значения в соответствии с желаемым трафиком / направлением / вероятностью.

...