Cloudflare เป„เบ”เป‰เป€เบœเบตเบเปเบœเปˆ xdpcap, เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบฅเบฐเบšเบปเบšเบเปˆเบญเบ XDP

เบšเปเบฅเบดเบชเบฑเบ” Cloudflare เบ™เบณ เบชเบฐ เป€เปœเบต เป‚เบ„เบ‡เบเบฒเบ™เป€เบ›เบตเบ” xdpcap, เบžเบฒเบเปƒเบ™เบ—เบตเปˆเป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐเปเบžเบฑเบเป€เบเบฑเบ”เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš tcpdump เบเปเบฒเบฅเบฑเบ‡เบ–เบทเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ, เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบšเบปเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบเปˆเบญเบ. XDP (eXpress Data Path). เบฅเบฐเบซเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™เปเบกเปˆเบ™เบ‚เบฝเบ™เปƒเบ™ Go เปเบฅเบฐ เปเบˆเบเบขเบฒเบเป‚เบ”เบ เบžเบฒเบเปƒเบ•เป‰เปƒเบšเบญเบฐเบ™เบธเบเบฒเบ” BSD. เป‚เบ„เบ‡เบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง เบเบฐเบเบฝเบก เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบœเบนเบเบกเบฑเบ”เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™ eBPF เบˆเบฒเบเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ Go.

เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ” xdpcap เปเบกเปˆเบ™เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡ tcpdump/libpcap เปเบฅเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ›เบฐเบฅเบดเบกเบฒเบ™เบเบฒเบ™เบˆเบฒเบฅเบฐเบˆเบญเบ™เบ—เบตเปˆเปƒเบซเบเปˆเบเบงเปˆเบฒเบขเบนเปˆเปƒเบ™เบฎเบฒเบ”เปเบงเบ”เบฝเบงเบเบฑเบ™. Xdpcap เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ”เบตเบšเบฑเบเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆ tcpdump เบ›เบปเบเบเบฐเบ•เบดเบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰, เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡, เบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡ DoS, เปเบฅเบฐเบฅเบฐเบšเบปเบšเบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เบ—เบตเปˆเปƒเบŠเป‰เบฅเบฐเบšเบปเบšเบเปˆเบญเบ Linux kernel XDP, เป€เบŠเบดเปˆเบ‡เบ›เบฐเบกเบงเบ™เบœเบปเบ™เปเบžเบฑเบเป€เบเบฑเบ”เบเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเบกเบฑเบ™เบˆเบฐเบ–เบทเบเบ›เบธเบ‡เปเบ•เปˆเบ‡เป‚เบ”เบ Linux kernel networking stack (tcpdump เบšเปเปˆเป€เบซเบฑเบ™เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเบซเบผเบธเบ”เบฅเบปเบ‡เป‚เบ”เบเบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™ XDP).

เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเบนเบ‡เปเบกเปˆเบ™เบšเบฑเบ™เบฅเบธเป„เบ”เป‰เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบฅเบฐเบšเบปเบšเบเปˆเบญเบ eBPF เปเบฅเบฐ XDP. eBPF เป€เบ›เบฑเบ™เบ™เบฒเบเบžเบฒเบชเบฒ bytecode เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™ Linux kernel เบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เปเบžเบฑเบเป€เบเบฑเบ”เบ‚เบฒเป€เบ‚เบปเป‰เบฒ / เบ‚เบฒเบญเบญเบเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเบนเบ‡เบ”เป‰เบงเบเบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบ•เปเปˆเบซเบผเบทเบเบฒเบ™เบเบปเบเป€เบฅเบตเบเบžเบงเบเบกเบฑเบ™. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™ JIT, bytecode eBPF เป„เบ”เป‰เบ–เบทเบเปเบ›เป€เบ›เบฑเบ™เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ”เป‰เบงเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡. เบฅเบฐเบšเบปเบšเบเปˆเบญเบ XDP (eXpress Data Path) เป€เบชเบตเบก eBPF เบ”เป‰เบงเบเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เป‚เบ„เบ‡เบเบฒเบ™ BPF เปƒเบ™เบฅเบฐเบ”เบฑเบšเป„เบ”เป€เบงเบตเป€เบ„เบทเบญเบ‚เปˆเบฒเบ, เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป‚เบ”เบเบเบปเบ‡เบเบฑเบš DMA packet buffer เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเปˆเบญเบ™เบ—เบตเปˆ skbuff buffer เบ–เบทเบเบˆเบฑเบ”เบชเบฑเบ™เป‚เบ”เบ stack เป€เบ„เบทเบญเบ‚เปˆเบฒเบ.

เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš tcpdump, เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ” xdpcap เบ—เปเบฒเบญเบดเบ”เปเบ›เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบเบฒเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™ BPF เบ„เบฅเบฒเบชเบชเบดเบ (cBPF) เป‚เบ”เบเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” libpcap เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ›เปˆเบฝเบ™เบžเบงเบเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ eBPF เบ›เบปเบเบเบฐเบ•เบดเป‚เบ”เบเปƒเบŠเป‰ compiler. cbpfc, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ LLVM/Clang. เบขเบนเปˆเบ—เบตเปˆเบœเบปเบ™เบœเบฐเบฅเบดเบ”, เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบˆเบฒเบฅเบฐเบˆเบญเบ™เบˆเบฐเบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เปƒเบ™เบฎเบนเบšเปเบšเบš pcap เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบ—เบตเปˆเบเบฐเบเบฝเบกเปƒเบ™ xdpcap เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบถเบเบชเบฒเบ•เปเปˆเป„เบ›เปƒเบ™ tcpdump เปเบฅเบฐเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบญเบทเปˆเบ™เป†เบ—เบตเปˆเบกเบตเบขเบนเปˆ. เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™ DNS, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ "tcpdump ip and udp port 53", เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ "xdpcap /path/to/hook capture.pcap 'ip and udp port 53โ€ฒ" เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบŠเป‰ capture. เป„เบŸเบฅเปŒ .pcap, เป€เบŠเบฑเปˆเบ™: เบ”เป‰เบงเบเบ„เบณเบชเบฑเปˆเบ‡ "tcpdump -r" เบซเบผเบทเปƒเบ™ Wireshark.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™