萬兆線速ddos攻擊測試工具pktgen-dpdk

      網(wǎng)友投稿 1765 2022-05-30

      萬兆線速ddos攻擊測試工具pktgen-dpdk

      簡介

      dpdk是Intel發(fā)起的高速網(wǎng)絡(luò)處理工具,能夠旁路Linux在用戶空間接管CPU、內(nèi)存和網(wǎng)卡隊(duì)列,進(jìn)行高度并行的網(wǎng)絡(luò)收發(fā)包。pktgen-dpdk是Linux內(nèi)核發(fā)包工具的dpdk加強(qiáng)版,本文介紹了使用此工具如何從一臺(tái)服務(wù)器上提供超過100Gbps的DDOS發(fā)包壓力測試。

      安裝

      安裝過程需要設(shè)置hugepage以支持dpdk,編譯加載dpdk模塊和綁定網(wǎng)卡,編譯pktgen-dpdk,運(yùn)行pktgen-dpdk查看網(wǎng)卡cpu對(duì)應(yīng)關(guān)系以設(shè)定cpu分配關(guān)系。

      為順利安裝,需要Linux系統(tǒng)18.04或以上,以及支持dpdk的網(wǎng)卡,dpdk官網(wǎng)可以查詢你的網(wǎng)卡是否支持。

      內(nèi)核開啟巨頁支持

      編輯內(nèi)核啟動(dòng)參數(shù),按物理內(nèi)存容量分配適當(dāng)?shù)腍ugePages容量,頁大小可以是2MB和1GB二者之一,這里設(shè)置1GB x 8。

      compile dpdk per kernel update

      vi?/etc/default/grub: GRUB_CMDLINE_LINUX="default_hugepagesz=1g?hugepagesz=1g?hugepages=8" ls?/boot/grub/?&&?update-grub reboot

      重啟系統(tǒng)后,應(yīng)能查看到如下結(jié)果:

      tail?/proc/meminfo CmaFree:???????????????0?kB HugePages_Total:???????8 HugePages_Free:????????8 HugePages_Rsvd:????????0 HugePages_Surp:????????0 Hugepagesize:????1048576?kB Hugetlb:????????67108864?kB DirectMap4k:??????305912?kB DirectMap2M:?????6938624?kB DirectMap1G:????128974848?kB

      編譯dpdk

      下載并解壓dpdk (以版本18.11.5為例),按如下步驟編譯。其中前2行export需要放到環(huán)境變量中以供以后運(yùn)行使用。

      export?RTE_SDK=/path/to/dpdk export?RTE_TARGET=x86_64-native-linuxapp-gcc cd?${RTE_SDK} apt?install?make apt?install?make-guile apt?install?gcc apt?install?libnuma-dev make?install?T=${RTE_TARGET}??-j4 insmod?${RTE_SDK}/${RTE_TARGET}/kmod/igb_uio.ko insmod?${RTE_SDK}/${RTE_TARGET}/kmod/rte_kni.ko

      為了快速綁定網(wǎng)卡到dpdk或者解綁回到Linux內(nèi)核,可以創(chuàng)建腳本dpdk_bind_ports.sh:

      #!/bin/bash ports=(0?1)?#?dpdk?nic?number,?start?from?0 #?NIC's?interface?name?like?eth1/enp130s0f0/eno1 nic=(enp130s0f0?enp130s0f1) #?NIC's?PCI-ID ids=(82:00.0?82:00.1) #Linux?kenerl?NIC?driver,?like?i40e/ixgbe/tg3 drv="i40e" cd?${RTE_SDK} if?[?""?=?"-u"?];?then ??for?i?in?${ports[@]};?do ????./usertools/dpdk-devbind.py?-u?${ids[$i]} ????./usertools/dpdk-devbind.py?-b?$drv?${ids[$i]} ??done else ??insmod?./x86_64-native-linuxapp-gcc/kmod/igb_uio.ko?2>/dev/null ??insmod?./x86_64-native-linuxapp-gcc/kmod/rte_kni.ko?2>/dev/null ??for?i?in?${ports[@]};?do ????ifconfig?${nic[$i]}?down ????./usertools/dpdk-devbind.py?-u?${ids[$i]} ????./usertools/dpdk-devbind.py?-b?igb_uio?${ids[$i]} ??done fi ./usertools/dpdk-devbind.py?--status-dev?net

      執(zhí)行./dpdk_bind_ports.sh將上述所列的兩個(gè)網(wǎng)口綁定到dpdk,可以看到如下類似結(jié)果:

      Network?devices?using?DPDK-compatible?driver ============================================ 0000:82:00.0?'Ethernet?Controller?X710?for?10GbE?SFP+?1572'?drv=igb_uio?unused=i40e 0000:82:00.1?'Ethernet?Controller?X710?for?10GbE?SFP+?1572'?drv=igb_uio?unused=i40e Network?devices?using?kernel?driver =================================== 0000:01:00.0?'NetXtreme?BCM5720?Gigabit?Ethernet?PCIe?165f'?if=eno1?drv=tg3?unused=igb_uio?*Active*

      請(qǐng)按自己的網(wǎng)卡信息編輯上述腳本,ports為0開始的順序編號(hào),nic和ids數(shù)目應(yīng)該與其一致。

      若不知道網(wǎng)卡接口名字,可以先修改驅(qū)動(dòng)名和PCI-ID正確,未知網(wǎng)卡名隨意填充,執(zhí)行./dpdk_bind_ports.sh -u恢復(fù)網(wǎng)卡到Linux 內(nèi)核接管,則輸出結(jié)果或者ifconfig -a 都可以查到網(wǎng)卡名字。最后,再次執(zhí)行./dpdk_bind_ports.sh將網(wǎng)卡綁定到dpdk。

      編譯pktgen-dpdk

      下載并解壓pktgen-dpdk,執(zhí)行如下步驟編譯:

      cd?/path/to/pktgen-dpdk apt?install?liblua5.3-dev apt?install?libpcap-dev make?-j4

      執(zhí)行 ./app/x86_64-native-linuxapp-gcc/pktgen 進(jìn)入交互式界面,輸入page config命令得到網(wǎng)卡和cpu的交互圖,以創(chuàng)建-m綁定關(guān)系。

      Socket???:????0?????????1??????Port?description ??Core???0?:?[?0,20]???[?1,21]???0000:01:00.0?:?Broadcom?Inc.?and?subsidiaries?NetXtreme?BCM5720?Gigabit?Ethernet?PCIe ??Core???1?:?[?2,22]???[?3,23]???0000:01:00.1?:?Broadcom?Inc.?and?subsidiaries?NetXtreme?BCM5720?Gigabit?Ethernet?PCIe ??Core???2?:?[?4,24]???[?5,25]???0000:02:00.0?:?Broadcom?Inc.?and?subsidiaries?NetXtreme?BCM5720?Gigabit?Ethernet?PCIe ??Core???3?:?[?6,26]???[?7,27]???0000:02:00.1?:?Broadcom?Inc.?and?subsidiaries?NetXtreme?BCM5720?Gigabit?Ethernet?PCIe ??Core???4?:?[?8,28]???[?9,29]???0000:82:00.0?:?Intel?Corporation?X710?for?10GbE?SFP+?(rev?01) ??Core???5?:?[10,30]???[11,31]???0000:82:00.1?:?Intel?Corporation?X710?for?10GbE?SFP+?(rev?01) ??Core???6?:?[12,32]???[13,33] ??Core???7?:?[14,34]???[15,35] ??Core???8?:?[16,36]???[17,37] ??Core???9?:?[18,38]???[19,39]

      上述信息表明有2個(gè)物理cpu 0 和1,每個(gè)cpu有10個(gè)核心,操作系統(tǒng)統(tǒng)一編號(hào)后為0~19,開啟超線程之后為0~39。

      dpdk綁定的2個(gè)網(wǎng)口因?yàn)樵谝粋€(gè)網(wǎng)卡上(PCI-ID是連號(hào)的),而同一個(gè)網(wǎng)卡物理上只會(huì)連到一個(gè)物理CPU的PCI-Express Lane,所以這兩個(gè)網(wǎng)口(dpdk編號(hào)0/1)能綁定的CPU編號(hào)要么左邊一列方括號(hào)[8,28]/[10,30],要么右邊一列方括號(hào)[9,29]/[11,31] (注意方括號(hào)里逗號(hào)右邊的是超線程cpu核心編號(hào))。

      Core???4?:?[?8,28]???[?9,29]???0000:82:00.0?:?Intel?Corporation?X710?for?10GbE?SFP+?(rev?01) ??Core???5?:?[10,30]???[11,31]???0000:82:00.1?:?Intel?Corporation?X710?for?10GbE?SFP+?(rev?01)

      那么可以先試試能否正確加載:

      ./app/x86_64-native-linuxapp-gcc/pktgen?-m?8.0?-m?10.1

      若報(bào)告錯(cuò)誤,類似 “port 0 on socket ID 1 has different socket ID for lcore 8 socket ID 0”,則左邊數(shù)字加1再試:

      ./app/x86_64-native-linuxapp-gcc/pktgen?-m?9.0?-m?10.1

      總能把這對(duì)網(wǎng)口配到正確的物理cpu上:

      Copyright?(c)?<2010-2019>,?Intel?Corporation.?All?rights?reserved.?Powered?by?DPDK EAL:?Detected?40?lcore(s) EAL:?Detected?2?NUMA?nodes EAL:?Multi-process?socket?/var/run/dpdk/rte/mp_socket EAL:?Probing?VFIO?support... EAL:?PCI?device?0000:82:00.0?on?NUMA?socket?1 EAL:???probe?driver:?8086:1572?net_i40e EAL:?PCI?device?0000:82:00.1?on?NUMA?socket?1 EAL:???probe?driver:?8086:1572?net_i40e Lua?5.3.3??Copyright?(C)?1994-2016?Lua.org,?PUC-Rio ***?Copyright?(c)?<2010-2019>,?Intel?Corporation.?All?rights?reserved. ***?Pktgen?created?by:?Keith?Wiles?--?>>>?Powered?by?DPDK?<<< ?Port:?Name?????????IfIndex?Alias????????NUMA??PCI ????0:?net_i40e????????0???????????????????1???8086:1572/82:00.0 ????1:?net_i40e????????0???????????????????1???8086:1572/82:00.1

      萬兆線速ddos攻擊測試工具pktgen-dpdk

      測試

      最終,創(chuàng)建test.cfg并進(jìn)入攻擊交互式界面:

      #./app/x86_64-native-linuxapp-gcc/pktgen -- -l ./pktgen.log -PGNT -m 9.0 -m 11.1 -f test.cfg

      運(yùn)行 start 0開始第一個(gè)網(wǎng)口,stop 0停止第一個(gè)網(wǎng)口,第二個(gè)網(wǎng)口類似;

      運(yùn)行 start all開始所有網(wǎng)口,stop all停止所有網(wǎng)口;

      運(yùn)行page help可以看到可用命令,主要有page stats, page xstats, page rate, quit

      test.cfg為交互式命令的集合版本,可以參考官方文檔生成各種協(xié)議的包和指定發(fā)包策略。

      這里簡單列舉一個(gè)0網(wǎng)口全速發(fā)udp? 64字節(jié)小包的例子:

      clear?0?stats reset?0 enable?screen enable?0?range disable?0?vlan set?0?size?64 set?0?rate?100 set?0?burst?64 set?0?type?ipv4 set?0?proto?udp set?0?dst?ip?192.168.0.1/24 set?0?src?ip?172.0.0.1/16 set?0?sport?12325 set?0?dport?12325 set?0?dst?mac?20:04:0f:34:aa:3d set?0?src?mac?f8:f2:1e:1a:d6:00 range?0?proto?udp range?0?src?port?10000?10000?60000?1 range?0?dst?port?10000?10000?60000?1 set?0?src?ip?172.0.0.1/16 range?0?src?ip?start?172.0.0.1 range?0?src?ip?min?172.0.0.1 range?0?src?ip?max?172.0.255.254 range?0?src?ip?inc?0.0.0.1 set?0?dst?ip?192.168.0.1 range?0?dst?ip?start?192.168.0.1 range?0?dst?ip?min?192.168.0.1 range?0?dst?ip?max?192.168.0.1 range?0?dst?ip?inc?0.0.0.0 disable?0?process disable?0?bonding disable?0?mac_from_arp start?0?arp?request range?0?dst?mac?start?20:04:0f:34:aa:3d range?0?dst?mac?min?20:04:0f:34:aa:3d range?0?dst?mac?max?20:04:0f:34:aa:3d range?0?src?mac?start?f8:f2:1e:1a:d6:00 range?0?src?mac?min?f8:f2:1e:1a:d6:00 range?0?src?mac?max?f8:f2:1e:1a:d6:00

      也可以用bash腳本gencfg一次性生成多個(gè)port的配置:

      #!/bin/bash ports="0?1" smacs=("f8:f2:1e:1a:d6:00"?"f8:f2:1e:1a:d6:02") dmacs=("20:04:0f:34:aa:3d"?"20:04:0f:34:aa:3d") dips=("192.168.0.1"?"192.168.0.1") set_nic(){ i=$1 smac=$2 dmac=${3:-"20:04:0f:34:aa:3d"} dip=${4:-"192.168.0.1"} cat?<

      最后執(zhí)行:

      ./gencfg > test.cfg

      這個(gè)配置實(shí)測過,可以從一臺(tái)Dell R620 (2 * E5-2660 v2 / 64GB Mem / 8個(gè)10G Intel網(wǎng)口)服務(wù)器 ,輕松打滿8x10Gbps的udp小包,發(fā)包總速率達(dá)到8x15=120Mpps??紤]到CPU 隊(duì)列并未用完,如果有更多的網(wǎng)卡,超過100Gbps沒有懸念。

      DDos高防 DDOS 壓力測試

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Python 統(tǒng)計(jì)基礎(chǔ):(二)如何描述您的數(shù)據(jù)
      下一篇:《Flink原理、實(shí)戰(zhàn)與性能優(yōu)化》
      相關(guān)文章
      春暖花开亚洲性无区一区二区 | 亚洲精品无码不卡在线播放| 亚洲乱亚洲乱妇无码麻豆| 色窝窝亚洲av网| 亚洲AV永久无码精品放毛片| 国产成+人+综合+亚洲专| 亚洲欧洲精品视频在线观看| 亚洲精品视频观看| 久久亚洲精品无码VA大香大香| 亚洲AV成人无码久久精品老人 | 亚洲一区二区三区国产精华液| 国产精品高清视亚洲精品| 亚洲国产成a人v在线| 亚洲精品mv在线观看| 亚洲精品中文字幕乱码| 亚洲国语精品自产拍在线观看| 亚洲免费视频在线观看| 久久水蜜桃亚洲av无码精品麻豆 | 精品亚洲国产成人av| 噜噜噜亚洲色成人网站| 亚洲国产精品成人久久蜜臀| 亚洲国产成人精品无码久久久久久综合 | 国产亚洲精品成人AA片| 亚洲中文字幕无码久久2020| 国产亚洲精品影视在线| 亚洲 欧洲 自拍 另类 校园| 亚洲色欲啪啪久久WWW综合网| 亚洲日韩精品无码专区加勒比| 亚洲av日韩av无码av| 亚洲一区二区三区四区视频| 久久综合亚洲色HEZYO社区| 亚洲国产精品午夜电影| tom影院亚洲国产一区二区| 亚洲色欲色欲www在线播放| 国产偷国产偷亚洲高清在线| 久久精品夜色噜噜亚洲A∨| 亚洲VA中文字幕无码一二三区| 久久久亚洲欧洲日产国码二区| 亚洲AV无码一区二区三区人 | 亚洲hairy多毛pics大全| 亚洲av午夜精品一区二区三区|