免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1421 | 回复: 6
打印 上一主题 下一主题

请教带子网掩码的ip替换问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-05 10:35 |只看该作者 |倒序浏览
作一个iptables课题的cgi,要求能修改iptables的ip,
比如:iptables -t nat -A POSTROUTING -s 192.1.1.0/24 -j SNAT --to 116.6.6.100
现在要修改192.1.1.0/24为192.1.2.0/24,而整个192.1.1.0/24为一个变量,用sed命令的话,其中的“/”很难处理
课题比较急,请各位高手帮帮忙,谢谢了!

论坛徽章:
0
2 [报告]
发表于 2007-01-05 10:42 |只看该作者
'/' just a usual delimiter, you can change another delimiter to solve this problem. maybe ':' is a good candidate.

论坛徽章:
0
3 [报告]
发表于 2007-01-05 10:56 |只看该作者
谢谢Edengundam (Eden),我这里必须要用“/”
我的想法是:192.1.1.0/24为一个变量,要么想办法把这个变量拆开为两部分,192。1。1。0为一部分,后面的/24为一部分,在/24前加“\”,用sed就好处理了,但是怎么取前面的ip?
另一个思路是:我可以获得这条iptables命令的行号,能不能利用行号替换?
刚学shell和sed、awk,很多东西不懂,请大家帮帮忙!

论坛徽章:
0
4 [报告]
发表于 2007-01-05 11:10 |只看该作者
我再把问题说详细点,我有一个snat.sh的文件,里面的内容为:
#!/bin/sh
/usr/sbin/iptables -t nat -A POSTROUTING -s 2.2.2.3 -j SNAT --to 3.3.3.3-5.5.5.4
/usr/sbin/iptables -t nat -A POSTROUTING -s 4.4.4.6 -j SNAT --to 10.101.11.44
/usr/sbin/iptables -t nat -A POSTROUTING -s 11.1.1.3 -j SNAT --to 6.6.6.100
/usr/sbin/iptables -t nat -A POSTROUTING -s 2.2.2.3 -j SNAT --to 223.12.34.77
~
如果只是像这样的地址是很好替换的,但是实际应用不会是这样的,一般都是如下的地址:
#!/bin/sh
/usr/sbin/iptables -t nat -A POSTROUTING -s 2.2.2.0/24 -j SNAT --to 3.3.3.3-5.5.5.4
/usr/sbin/iptables -t nat -A POSTROUTING -s 4.4.4.0/24 -j SNAT --to 10.101.11.44
/usr/sbin/iptables -t nat -A POSTROUTING -s 11.1.1.0/24 -j SNAT --to 6.6.6.100
/usr/sbin/iptables -t nat -A POSTROUTING -s 2.2.2.0/24 -j SNAT --to 223.12.34.77
该怎么替换其中的2.2.2.0/24等子网地址,请大家教教我

论坛徽章:
0
5 [报告]
发表于 2007-01-05 11:23 |只看该作者
原帖由 ncxsx 于 2007-1-5 11:10 发表
我再把问题说详细点,我有一个snat.sh的文件,里面的内容为:
#!/bin/sh
/usr/sbin/iptables -t nat -A POSTROUTING -s 2.2.2.3 -j SNAT --to 3.3.3.3-5.5.5.4
/usr/sbin/iptables -t nat -A POSTROUTING -s 4. ...



我的意思:
/ is usual delimiter when we use s cmd....^_^

  1. sed 's:2\.2\.2\.0/24:haha/24:'
复制代码

论坛徽章:
0
6 [报告]
发表于 2007-01-05 11:53 |只看该作者
非常感谢Edengundam (Eden),我明白你的意思了。
变量$FORM_sourip是从web表格获取的新ip,$souraddr是要被替换掉的地址,我原来的处理方法是:
sed -i 's/POSTROUTING -s $souraddr -j SNAT --to $snataddr/POSTROUTING -s $FORM_sourip -j SNAT --to $FORM_rangip/g' snat.sh
在作为一个变量的ip地址的“.”前加“\”有点困难,我先试试你说的方法,非常感谢你的帮助!

论坛徽章:
0
7 [报告]
发表于 2007-01-05 12:08 |只看该作者
可以了!
真的非常感谢Edengundam (Eden) !
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP