Cloudflare ืคืจืกืžื” ืืช xdpcap, ืžื ืชื— ืชื ื•ืขื” ื”ืžื‘ื•ืกืก ืขืœ ืชืช-ื”ืžืขืจื›ืช XDP

ื—ื‘ืจืช Cloudflare ืžื•ืฆื’ ืคืจื•ื™ื™ืงื˜ ืคืชื•ื— xdpcap, ืฉื‘ืชื•ื›ื• ืžืคืชื—ื™ื ืžื ืชื— ืžื ื•ืช ืจืฉืช ื‘ื“ื•ืžื” ืœ-tcpdump, ื‘ื ื•ื™ ืขืœ ื‘ืกื™ืก ืชืช-ื”ืžืขืจื›ืช XDP (ื ืชื™ื‘ ื ืชื•ื ื™ื ืฉืœ ืืงืกืคืจืก). ืงื•ื“ ื”ืคืจื•ื™ืงื˜ ื›ืชื•ื‘ ื‘- Go ื• ืžื•ืคืฅ ืขืœ ื™ื“ื™ ืชื—ืช ืจื™ืฉื™ื•ืŸ BSD. ื’ื ื”ืคืจื•ื™ืงื˜ ืžื•ึผื›ึธืŸ ืกืคืจื™ื™ื” ืœืงืฉื™ืจืช ืžื˜ืคืœื™ ืชืขื‘ื•ืจื” eBPF ืžื™ื™ืฉื•ืžื™ Go.

ื›ืœื™ ื”ืฉื™ืจื•ืช xdpcap ืชื•ืื ืœื‘ื™ื˜ื•ื™ื™ ืกื™ื ื•ืŸ tcpdump/libpcap ื•ืžืืคืฉืจ ืœืš ืœืขื‘ื“ ื ืคื—ื™ ืชืขื‘ื•ืจื” ื’ื“ื•ืœื™ื ืžืฉืžืขื•ืชื™ืช ื‘ืื•ืชื” ื—ื•ืžืจื”. Xdpcap ื™ื›ื•ืœ ืœืฉืžืฉ ื’ื ืœื ื™ืคื•ื™ ื‘ืื’ื™ื ื‘ืกื‘ื™ื‘ื•ืช ืฉื‘ื”ืŸ tcpdump ืจื’ื™ืœ ืื™ื ื• ื™ืฉื™ื, ื›ื’ื•ืŸ ืกื™ื ื•ืŸ, ื”ื’ื ืช DoS ื•ืžืขืจื›ื•ืช ืื™ื–ื•ืŸ ืขื•ืžืกื™ื ื”ืžืฉืชืžืฉื•ืช ื‘ืชืช-ืžืขืจื›ืช Linux kernel XDP, ื”ืžืขื‘ื“ืช ืžื ื•ืช ืœืคื ื™ ืฉื”ืŸ ืžืขื•ื‘ื“ื•ืช ืขืœ ื™ื“ื™ ืžื—ืกื ื™ืช ื”ืจืฉืช ืฉืœ ืœื™ื‘ืช ืœื™ื ื•ืงืก (tcpdump ืื™ื ื• ืจื•ืื” ืžื ื•ืช ืฉื ืคืœื• ืขืœ ื™ื“ื™ ื”ืžื˜ืคืœ XDP).

ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื ืžื•ืฉื’ื™ื ื‘ืืžืฆืขื•ืช ืฉื™ืžื•ืฉ ื‘ืชืชื™ ืžืขืจื›ื•ืช eBPF ื•-XDP. eBPF ื”ื•ื ืžืชื•ืจื’ืžืŸ ื‘ืชื™ื ืžื•ื‘ื ื” ื‘ืœื™ื‘ืช ืœื™ื ื•ืงืก ื”ืžืืคืฉืจ ืœืš ืœื™ืฆื•ืจ ืžื˜ืคืœื™ื ื‘ืขืœื™ ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื ืฉืœ ืžื ื•ืช ื ื›ื ืกื•ืช/ื™ื•ืฆืื•ืช ืขื ื”ื—ืœื˜ื•ืช ืœื’ื‘ื™ ื”ืขื‘ืจื” ืื• ื”ืฉืœื›ื”. ื‘ืืžืฆืขื•ืช ืžื”ื“ืจ JIT, eBPF bytecode ืžืชื•ืจื’ื ืชื•ืš ื›ื“ื™ ืชื ื•ืขื” ืœื”ื•ืจืื•ืช ืžื›ื•ื ื” ื•ืžื‘ื•ืฆืข ืขื ื‘ื™ืฆื•ืขื™ื ืฉืœ ืงื•ื“ ืžืงื•ืจื™. ืชืช-ืžืขืจื›ืช ื”-XDP (eXpress Data Path) ืžืฉืœื™ืžื” ืืช eBPF ืขื ื”ื™ื›ื•ืœืช ืœื”ืจื™ืฅ ืชื•ื›ื ื™ื•ืช BPF ื‘ืจืžืช ืžื ื”ืœ ื”ื”ืชืงืŸ ืฉืœ ื”ืจืฉืช, ืขื ืชืžื™ื›ื” ื‘ื’ื™ืฉื” ื™ืฉื™ืจื” ืœืžืื’ืจ ืžื ื•ืช ื”-DMA ื•ืขื‘ื•ื“ื” ื‘ืฉืœื‘ ืฉืœืคื ื™ ื”ืงืฆืืช ืžืื’ืจ skbuff ืขืœ ื™ื“ื™ ืžื—ืกื ื™ืช ื”ืจืฉืช.

ื›ืžื• tcpdump, ื›ืœื™ ื”ืฉื™ืจื•ืช xdpcap ืžืชืจื’ื ืชื—ื™ืœื” ื›ืœืœื™ ืกื™ื ื•ืŸ ืชืขื‘ื•ืจื” ื‘ืจืžื” ื’ื‘ื•ื”ื” ืœื™ื™ืฆื•ื’ BPF ื”ืงืœืืกื™ (cBPF) ื‘ืืžืฆืขื•ืช ืกืคืจื™ื™ืช libpcap ื”ืกื˜ื ื“ืจื˜ื™ืช, ื•ืœืื—ืจ ืžื›ืŸ ืžืžื™ืจื” ืื•ืชื ืœืฆื•ืจืช ืจื•ื˜ื™ื ื•ืช eBPF ื‘ืืžืฆืขื•ืช ืžื”ื“ืจ cbpfc, ื‘ืืžืฆืขื•ืช ืคื™ืชื•ื—ื™ LLVM/Clang. ื‘ืคืœื˜, ืžื™ื“ืข ืชืขื‘ื•ืจื” ื ืฉืžืจ ื‘ืคื•ืจืžื˜ ื”-pcap ื”ืกื˜ื ื“ืจื˜ื™, ื”ืžืืคืฉืจ ืœืš ืœื”ืฉืชืžืฉ ื‘-Traffic dump ืฉื”ื•ื›ืŸ ื‘-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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”