[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] [已解决]批处理读取TXT文档每一行IP地址并添加到IP策略进行屏蔽

我想利用批处理实现一个功能,就是批处理屏蔽“危险IP列表.txt”里面的所有IP地址仿问本机80端口。

所需要用的到文件如下:
“ipseccmd.exe、winipsec.dll、屏蔽危险IP.bat、危险IP列表.txt”

然后:
“危险IP列表.txt”里面的IP目前有以下几个:
61.164.47.226
222.186.9.53
122.224.11.5
61.164.49.204
222.186.9.53
61.164.49.204

“屏蔽危险IP.bat”内容我是这样写的,如下:
  1. @echo off
  2. for /f "delims= " %%a in (危险IP列表.txt) do ipseccmd -w REG -p "Rocky" -r "Web TCP/80" -f %%a+0:80:TCP -n BLOCK -x >nul
  3. ipseccmd  -w REG -p "Rocky" -x >nul
  4. cls
  5. @echo 危险IP屏蔽完成...
  6. ping 127.0.0.1 -n 5 >nul
复制代码
但是问题就出来了,IP安全策略里,并没有将“危险IP列表.txt”里面的所有IP添加成功,而只有TXT文档最后一行的IP“61.164.49.204”,只有它添加成功了。
请问高手们该怎么办啊?

[ 本帖最后由 Rocky 于 2010-9-30 23:13 编辑 ]
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

for /f "delims= " %%a in (危险IP列表.txt) do ipseccmd -w REG -p "Rocky" -r
"Web TCP/80" -f %%a+0:80:TCP -n BLOCK -x >nul
我也是看了才明白的 这里每次执行都要不一样 你可以用%%a来代替变化


IPSeccmd简单说明
ipseccmd在xp系统安装盘的 SUPPORT\TOOLS\SUPPORT.CAB 中。
ipsec是网管员应该熟悉的一个非常好用的工具,该工具的GUI界面在本地安全策略的IP策略里,网上有一些教程,但使用命令行ipseccmd.exe程序进行设置有助于在多台电脑中进行部署和交流,这里我通过自己的一个实例来简单说明一下其使用方法。
关于策略的概念:
策略即policy,貌似在这里只能同时指派一个策略,我没试过,一般一个策略就够用了,-p选项用来指定策略
关于规则的概念:
规则即filter,也可以叫过滤器,一个策略里可以创建无数规则,但每个规则的名称不能重复,-f选项用来指定规则。
关于规则的格式:
规则的格式=A.B.C.D/mask:port=A.B.C.D/mask:port:protocol
等号可以被加号替换,加号表示双向,我的智商理解不了加号的使用,所以宁愿写两遍等号也不用加号。
比如:192.168.0.1/255.255.255.0:80=192.168.0.2/255.255.255.0:8080:tcp
这是一个没什么含义的例子,一般很少这样写。
A.B.C.D/mask可以使用两个特殊常量来代替,一个是*,表示所有地址;一个是0,表示本机IP,均不带mask。
例:
-f *=0:135:tcp
这个例子的规则是源地址为所有IP的所有端口,目标地址为本机IP的135端口,协议为tcp。
关于-n选项:
只要记住-N选项可以跟BLOCK和PASS就可以了,BLOCK表示禁止,PASS表示开通。
关于-w reg选项:
-w reg是记录在注册表的意思,这是固定格式,记住别忘了写就OK了。
关于-y选项:
-y 用来取消指派策略。策略只有被指派了才可以被执行,-y可以取消指派,这个选项通常用来把正在执行的策略停止。
关于-x选项:
-x 用来立即指派并执行策略,我们来验证一下,下面的策略可以使你和外界无法互相ping:
例:
ipseccmd -p xk -r noping -f *+0::icmp -n BLOCK -w reg -x
这条规则翻译一下就是:
建立一条策略,名字叫xk
在策略中建立一条规则,名字叫noping
这条规则的内容是,所有IP地址和我本机之间的icmp都被block了,阻止了,icmp是ping用到的协议,所以就无法互ping了。
-w reg表示记录到注册表中
-x表示do it now,马上行动。
关于-o选项:
-o 用来删除策略。如果策略还在指派中,是无法删除的,先用-y取消指派吧。
如果仍然无法删除,就把IPSEC Services服务重新启动一下就OK了。
简易教程:
1、建立一个策略并且不指派:
ipseccmd -p 策略名 -r 过滤名 [-f.....] -w reg
例1:ipseccmd -p xk -r xkf1 *=0:135:tcp -n BLOCK -w reg
xk是我的策略名,xkf1是xk策略里的一条规则,每条规则的名称不可以重复
2、指派并立即执行某策略
ipseccmd -p 策略名 -w reg -x
例2: ipseccmd -p xk -w reg -x
3、停止指派某策略
ipseccmd -p 策略名 -w reg -y
例3:ipseccmd -p xk -w reg -y
这个操作可以使正在执行的策略停止下来。
4、删除某策略
ipseccmd -p 策略名 -w reg -o
例4:ipseccmd -p xk -w reg -o
5、查看策略
ipseccmd show gpo
ipseccmd show filters
6、通过停止并启动IPSec Service服务可以清空策略,这是微软官方的说法,而在我下面的例子里却正好相反,重启该服务激发了策略。

[ 本帖最后由 leap 于 2010-9-30 22:03 编辑 ]
1

评分人数

TOP

谢谢楼上这位兄台,问题已经得到解决。
原来策略里的每条规则的名称不可以重复。
而我在代码 for /f "delims= " %%a in (危险IP列表.txt) do ipseccmd -w REG -p "Rocky" -r "Web TCP/80" -f %%a+0:80:TCP -n BLOCK -x >nul  红色处给定义了绝对名。
正确应该如下:for /f "delims= " %%a in (危险IP列表.txt) do ipseccmd -w REG -p "Rocky" -r "%%a" -f %%a+0:80:TCP -n BLOCK -x >nul
这样的话每条规则的名称就会以(危险IP列表.txt)里的IP地址为名了,就不会重复了。

TOP

返回列表