Проверьте контрольную сумму UDP в ловушке сетевого фильтра Linux - PullRequest
0 голосов
/ 26 октября 2018

Я обрабатываю / изменяю дейтаграммы UDP для локальной доставки в ловушке сетевого фильтра в версии ядра Linux> 4.x в цепочке NF_INET_PRE_ROUTING.Однако, прежде чем я начну изменять такие дейтаграммы, я хочу проверить их согласованность, проверив их контрольную сумму.Как наиболее эффективный способ сделать это?

Поскольку я предполагаю, что уровень IP уже пройден и, следовательно, согласованность заголовка IP уже задана, достаточно ли этого, если я выполню проверку с помощью:

if(udp4_csum_init(skb,udp_hdr(skb),IPPROTO_UDP)) {
    return NF_DROP;
}
else {
    //start modifying skb
}
  1. Охватывает ли udp4_csum_init заголовок UDP и полезную нагрузку?

  2. Прав ли я, что заголовок IP-пакета уже проверен, поскольку вызывается ловушка netfilterв ip_rcv?

  3. В чем разница между udp4_csum_init, udp_lib_checksum_comblete(skb) и udp_v4_check(len,saddr,daddr,base)?

  4. Как можно избежатьдополнительная проверка контрольной суммы в самом стеке UDP после того, как дейтаграммы покидают ловушку netfilter и принимаются локальным стеком UDP.Это возможно путем установки skb->csum_valid = 1?

BR

...