/bin/bash 复制代码

/bin/bash 复制代码

我一直在绞尽脑汁,最后才决定在这里问这个问题。我是 linux/bash 脚本的新手。所以我的问题如下:

我正在使用这个小脚本来阻止某些国家访问我的服务器(它是 Debian 上的一个小型网络服务器)

#!/bin/bash
TERM='xterm'
#
for IP in $(wget -O - http://www.ipdeny.com/ipblocks/data/countries/**country.zone**) ; do
    ipset add blacklist $IP
done

问题是我不想每次想要阻止另一个国家(更改 country.zone)时都重新编辑脚本,我可以选择的国家区域有 238 个。我的问题是 - 我如何编写一个脚本来显示整个区域列表并要求我选择一个或多个(例如:cn.zone)来下载并将其添加到 ipset。

我知道添加我不想阻止的区域并阻止其余区域要容易得多,我知道我可以一次选择多个区域{1.zone,2.zone,3.zone}。

基本上,我想要一个可以向我显示所有区域(如在表中)的脚本,从中选择一个(或多个),然后脚本将下载选定的区域并将它们添加到 ipset。

答案1

我的解决方案是:

/bin/bash 复制代码

for IP in $(wget -O - http://www.ipdeny.com/ipblocks/data/countries/$1.zone) 
do 
  ipset add blacklist $IP
done

您发送的输入参数在哪里$1,即:“it”。这基本上允许您确定要阻止哪个区域。

如果您想禁止很多区域,这没有用,我建议将您想要阻止的所有区域添加到一个文件中,然后使用循环读取它for

/区域到区块:

it
es
au

命令行:

for zone in $(cat zones_to_block); do ./block_zones $zone; done

答案2

假设您有 GNU grep:

url=http://www.ipdeny.com/ipblocks/data/countries
allzones=( $(wget -qO- "$url" | grep -oP 'href="\K[^"]+\.zone') )

PS3="enter a number (^C to quit): "
select zone in "${allzones[@]}"; do
    if [[ $zone == *.zone ]]; then
        for IP in $(wget -qO- "$url/$zone"); do
            ipset add blacklist "$IP"
        done
    fi
done

在宽度为 80 列的终端上,我们看到的是这样的:

 1) ad.zone    49) cv.zone   97) im.zone  145) ms.zone  193) sl.zone
 2) ae.zone    50) cw.zone   98) in.zone  146) mt.zone  194) sm.zone
 3) af.zone    51) cy.zone   99) io.zone  147) mu.zone  195) sn.zone
 4) ag.zone    52) cz.zone  100) iq.zone  148) mv.zone  196) so.zone
 5) ai.zone    53) de.zone  101) ir.zone  149) mw.zone  197) sr.zone
 6) al.zone    54) dj.zone  102) is.zone  150) mx.zone  198) ss.zone
 7) am.zone    55) dk.zone  103) it.zone  151) my.zone  199) st.zone
 8) ao.zone    56) dm.zone  104) je.zone  152) mz.zone  200) sv.zone
 9) ap.zone    57) do.zone  105) jm.zone  153) na.zone  201) sx.zone
10) ar.zone    58) dz.zone  106) jo.zone  154) nc.zone  202) sy.zone
11) as.zone    59) ec.zone  107) jp.zone  155) ne.zone  203) sz.zone
12) at.zone    60) ee.zone  108) ke.zone  156) nf.zone  204) tc.zone
13) au.zone    61) eg.zone  109) kg.zone  157) ng.zone  205) td.zone
14) aw.zone    62) er.zone  110) kh.zone  158) ni.zone  206) tg.zone
15) az.zone    63) es.zone  111) ki.zone  159) nl.zone  207) th.zone
16) ba.zone    64) et.zone  112) km.zone  160) no.zone  208) tj.zone
17) bb.zone    65) eu.zone  113) kn.zone  161) np.zone  209) tk.zone
18) bd.zone    66) fi.zone  114) kp.zone  162) nr.zone  210) tl.zone
19) be.zone    67) fj.zone  115) kr.zone  163) nu.zone  211) tm.zone
20) bf.zone    68) fm.zone  116) kw.zone  164) nz.zone  212) tn.zone
21) bg.zone    69) fo.zone  117) ky.zone  165) om.zone  213) to.zone
22) bh.zone    70) fr.zone  118) kz.zone  166) pa.zone  214) tr.zone
23) bi.zone    71) ga.zone  119) la.zone  167) pe.zone  215) tt.zone
24) bj.zone    72) gb.zone  120) lb.zone  168) pf.zone  216) tv.zone
25) bl.zone    73) gd.zone  121) lc.zone  169) pg.zone  217) tw.zone
26) bm.zone    74) ge.zone  122) li.zone  170) ph.zone  218) tz.zone
27) bn.zone    75) gf.zone  123) lk.zone  171) pk.zone  219) ua.zone
28) bo.zone    76) gg.zone  124) lr.zone  172) pl.zone  220) ug.zone
29) bq.zone    77) gh.zone  125) ls.zone  173) pm.zone  221) us.zone
30) br.zone    78) gi.zone  126) lt.zone  174) pr.zone  222) uy.zone
31) bs.zone    79) gl.zone  127) lu.zone  175) ps.zone  223) uz.zone
32) bt.zone    80) gm.zone  128) lv.zone  176) pt.zone  224) va.zone
33) bw.zone    81) gn.zone  129) ly.zone  177) pw.zone  225) vc.zone
34) by.zone    82) gp.zone  130) ma.zone  178) py.zone  226) ve.zone
35) bz.zone    83) gq.zone  131) mc.zone  179) qa.zone  227) vg.zone
36) ca.zone    84) gr.zone  132) md.zone  180) re.zone  228) vi.zone
37) cd.zone    85) gt.zone  133) me.zone  181) ro.zone  229) vn.zone
38) cf.zone    86) gu.zone  134) mf.zone  182) rs.zone  230) vu.zone
39) cg.zone    87) gw.zone  135) mg.zone  183) ru.zone  231) wf.zone
40) ch.zone    88) gy.zone  136) mh.zone  184) rw.zone  232) ws.zone
41) ci.zone    89) hk.zone  137) mk.zone  185) sa.zone  233) ye.zone
42) ck.zone    90) hn.zone  138) ml.zone  186) sb.zone  234) yt.zone
43) cl.zone    91) hr.zone  139) mm.zone  187) sc.zone  235) za.zone
44) cm.zone    92) ht.zone  140) mn.zone  188) sd.zone  236) zm.zone
45) cn.zone    93) hu.zone  141) mo.zone  189) se.zone  237) zw.zone
46) co.zone    94) id.zone  142) mp.zone  190) sg.zone
47) cr.zone    95) ie.zone  143) mq.zone  191) si.zone
48) cu.zone    96) il.zone  144) mr.zone  192) sk.zone
enter a number (^C to quit): 

相关内容