LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1059|回复: 7

管道有这样的能力吗??

[复制链接]
发表于 2008-12-26 16:21:03 | 显示全部楼层 |阅读模式
有一个badip文件,文件内容是所有的不良ip地址,一个一行。
例如这样:
124.115.0.167
124.115.0.1
124.115.0.167
124.115.0.165
124.115.0.165
124.115.0.165

我希望能通过管道或者重定向一句命令搞定这些ip的封锁。
例如这样:

cat badip | iptables  -I INPUT -p tcp -s {这里来自去cat的每一行的文件内容}  -j DROP


但我现在只能这样。

MY_LINE_NO=1
while read MY_LINE
do
                iptables -I INPUT -p tcp -s $MY_LINE -j DROP
                echo "insert new rule $MY_LINE!"
    fi
    MY_LINE_NO=$((MY_LINE_NO+1))
done < badip

循环读出文件内容,然后执行iptables。
发表于 2008-12-26 19:25:24 | 显示全部楼层
试试
  1. man xargs
复制代码
回复 支持 反对

使用道具 举报

发表于 2008-12-26 23:12:51 | 显示全部楼层
我对iptables只了解个大概,如果iptables能用一条命令添加多个 “规则” 的话,用管道就比较好办了。
——————————————————
以下都对针对执行一次iptables,添加一条“规则”来处理的。

根据楼上说的,用xargs:
  1. cat badip | xargs -n1 -I'{}' iptables -I INPUT -p tcp -s '{}' -j DROP
复制代码
另外,我又想了一个方法,下面这个方法,我觉得一个好处是:如果badip文件里还有其它内容(比如ip后面是机器名等),可以直接用awk处理掉。
  1. eval "$(awk '{printf "iptables -I INPUT -p tcp -s %s -j DROP\n",$1;}'  badip)"
复制代码
回复 支持 反对

使用道具 举报

发表于 2008-12-27 03:07:05 | 显示全部楼层
拿perl或者python写个脚本,读入ip文件每一行,然后想干什么干什么。干嘛非要一条命令来完成。
回复 支持 反对

使用道具 举报

发表于 2008-12-27 17:09:02 | 显示全部楼层
iptables -A INPUT -s $(cat FILE) -j DROP
回复 支持 反对

使用道具 举报

发表于 2008-12-27 18:53:48 | 显示全部楼层
再来一个:

iptables -A INPUT -s `cat FILE` -j DROP
回复 支持 反对

使用道具 举报

发表于 2008-12-27 19:35:18 | 显示全部楼层
两位,你们执行过么?如果你们执行过。我想请教一下,你们用的是什么系统,怎么执行的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-29 11:55:00 | 显示全部楼层
谢谢,remote fish 和 tomgrean 你们给的思路非常酷。特别是eval 命令,这个思路可以解决很多问题了,谢谢tomgrean
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表