Ip

如何在單個表達式中寫入 /16 個 IP 地址範圍?

  • October 13, 2021

我想在nginx中禁止這個範圍的中文IP地址:

'223.64.0.0 - 223.117.255.255'

我知道如何禁止每個/16範圍,例如:

deny 223.64.0.0/16;

但是要包含整個223.64 - 223.117範圍需要很多行。是否有一種簡寫符號可以在一行中執行此操作?

ipcalcipcalcDebian 上的包)可以幫助您一個範圍分解為多個匹配的CIDR

$ ipcalc -r 223.64.0.0 - 223.117.255.255
deaggregate 223.64.0.0 - 223.117.255.255
223.64.0.0/11
223.96.0.0/12
223.112.0.0/14
223.116.0.0/15

其他 ipcalc相同(ipcalc-ngDebian 上的包和命令名稱):

$ ipcalc-ng -d '223.64.0.0 - 223.117.255.255'
[Deaggregated networks]
Network:        223.64.0.0/11
Network:        223.96.0.0/12
Network:        223.112.0.0/14
Network:        223.116.0.0/15

那一個有更多的選擇來改變輸出格式:

$ ipcalc-ng --no-decorate -d '223.64.0.0 - 223.117.255.255'
223.64.0.0/11
223.96.0.0/12
223.112.0.0/14
223.116.0.0/15

包括 json 如果與以下工具結合使用,則可以提供無限的重新格式化可能性jq

$ ipcalc-ng -j -d '223.64.0.0 - 223.117.255.255' |
   jq -r '.DEAGGREGATEDNETWORK[]|"deny " + . + ";"'
deny 223.64.0.0/11;
deny 223.96.0.0/12;
deny 223.112.0.0/14;
deny 223.116.0.0/15;
$ ipcalc-ng -j -d '223.64.0.0 - 223.117.255.255' |
  jq -r '"deny " + (.DEAGGREGATEDNETWORK|join(" ")) + ";"'
deny 223.64.0.0/11 223.96.0.0/12 223.112.0.0/14 223.116.0.0/15;

引用自:https://unix.stackexchange.com/questions/671747